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.
소스 정보
- 저장소
- basecamp/basecamp-sdk
- 최근 소스 활동
- 2026년 8월 17일 01:36
- 감지된 SKILL.md 언어
- 영어
- 스타
- 53
- 포크
- 10
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
SKILL.md 표시 중
SKILL.md
소스 지침 · 읽기 전용 미리보기- 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
GitHub에서 보기