Skip to main content

api-sync

Check upstream Basecamp API changes and sync the Smithy spec. Compares bc3 API docs and app code against the tracked bc3 revision in spec/api-provenance.json, identifies what changed, and optionally updates the Smithy spec and regenerates SDKs.

Informations de source

Dépôt
basecamp/basecamp-sdk
Dernière activité de la source
17 août 2026 à 01:36
Langue détectée de SKILL.md
anglais
Étoiles
53
Forks
11

Options d'installation

Le prompt qui vérifie d'abord la source est sélectionné par défaut. Vous pouvez passer à une commande directe ou télécharger une copie locale.

Vérifiez les fichiers source

Lisez SKILL.md et les fichiers associés affichés par SkillsMP avant de décider de l'installer.

Affichage de SKILL.md

SKILL.md
Instructions source · Aperçu en lecture seule
name
api-sync
description
Check upstream Basecamp API changes and sync the Smithy spec. Compares bc3 API docs and app code against the tracked bc3 revision in spec/api-provenance.json, identifies what changed, and optionally updates the Smithy spec and regenerates SDKs.
disable-model-invocation
true
argument-hint
[check|sync|update-rev]
# API Sync Skill You are synchronizing the Basecamp SDK's Smithy spec against upstream API changes. ## Inputs - **mode**: `{{ arguments.mode | default: "check" }}` ## Upstream repo - **bc3** (canonical source): `basecamp/bc3` - API reference docs: watch `doc/api/` - Rails app/API implementation: watch `app/controllers/` The public `basecamp/bc3-api` repo is a mirror for documentation consumption, not a provenance input. ## Phase 1: Load State 1. Read `spec/api-provenance.json` to get the last-synced revision for `bc3`. ## Phase 2: Check Upstream List files changed in the watched paths since the last sync. For **bc3 API docs** (`doc/api/`): ```bash gh api repos/basecamp/bc3/compare/<bc3.revision>...HEAD \ --jq '[.files[] | select(.filename | startswith("doc/api/"))] | if length == 0 then " (no changes in doc/api/)" else .[] | .status[:1] + " " + .filename end' ``` For **bc3 API implementation** (`app/controllers/`): ```bash gh api repos/basecamp/bc3/compare/<bc3.revision>...HEAD \ --jq '[.files[] | select(.filename | startswith("app/controllers/"))] | if length == 0 then " (no changes in app/controllers/)" else .[] | .status[:1] + " " + .filename end' ``` Summarize the changed files by API domain (todos, messages, people, etc.). If there are no changes in either watched path, report "up to date" and stop. If mode is `check`, stop here after reporting what changed. ## Phase 3: Sync Spec (mode=sync only) For each changed doc file in `bc3`: 1. Fetch the upstream doc from `basecamp/bc3`: ```bash gh api repos/basecamp/bc3/contents/doc/api/<path> --jq '.content' | base64 -d ``` 2. Read the corresponding Smithy operations in `spec/basecamp.smithy` and `spec/overlays/` 3. Identify gaps: missing operations, changed fields, new parameters 4. Propose specific Smithy changes and apply after confirmation For controller changes in `bc3`, cross-reference them with `doc/api/` to identify behavioral changes that affect the spec. ## Phase 4: Regenerate (mode=sync only) After spec changes are applied: ```bash make generate make check ``` `make generate` is the pipeline's only definition — do not expand it into individual targets here. The list this replaced had gone stale in five places: it omitted `py-generate`, `kt-generate-services` and `swift-generate` entirely (so following it left three SDKs ungenerated), along with `behavior-model` and the final `sync-api-version` that re-derives prose constants from the generated accessors. Fix any issues that arise during generation or checks. ## Phase 5: Update Revision (mode=sync or update-rev) Get the current `bc3` HEAD: ```bash gh api repos/basecamp/bc3/commits/HEAD --jq '.sha' ``` Write the new revision and today's date to `spec/api-provenance.json`: ```json { "bc3": { "revision": "<new-sha>", "date": "<today>" } } ``` Then run `make provenance-sync` to update the Go embedded copy. ## Output Report a summary of: - What changed upstream (by domain) - What spec changes were made (if sync mode) - New revision SHA stamped - Any warnings or issues encountered
Voir sur GitHub