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.

Source facts

Repository
basecamp/basecamp-sdk
Last source activity
August 17, 2026 at 01:36
Detected SKILL.md language
English
Stars
53
Forks
11

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
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
View on GitHub