Before changing discovery, generated methods, pricing, schemas, releases, or customer-facing integration docs, read the canonical ecosystem map: https://github.com/getanyapi-com/anyapi/blob/main/ECOSYSTEM.md.
Classify the change there and record an impact-ledger disposition for every Adapter. Remember
that regeneration updates generated SKU methods only; it does not update the handwritten
TypeScript and Python catalog, search, or describe clients.
Local pre-flight:
- Read
SPEC.mdand preserve its USD-only andAnyAPIprovider invariants. - Keep TypeScript and Python public surfaces in lockstep.
- Run
pnpm check, then the Python pyright, mypy, and pytest gates documented inREADME.md. - Follow the release order in
ECOSYSTEM.md.
Releasing:
Publishing is tag-triggered, not branch-triggered. Bump all three version surfaces together
with pnpm --filter @anyapi/generator version:apply <version>, land the change on main,
then push a matching v<version> tag. .github/workflows/release.yml re-runs the full gate
and refuses to publish unless the tag matches the manifests, then publishes to npm with
provenance and to PyPI via trusted publishing. regen.yml uses the same path automatically
for catalog refreshes.
The rule is about the COMMIT, not about who is doing the work: never tag a commit that is not
merged to main, because the published artifact would not match the repository's history.
Tagging a merged commit is the normal release path and an agent may run it.
Accepting a blocked refresh:
When regen.yml blocks a batch it still prepares the whole release: the regenerated tree,
committed as chore(release): catalog refresh v<X.Y.Z> with all three version surfaces
bumped, force-pushed to the fixed catalog-refresh branch. Nothing is tagged or published.
Review it at https://github.com/getanyapi-com/sdks/compare/main...catalog-refresh alongside
the blocked items named in the incident issue. To accept, press "Run workflow" on
.github/workflows/accept-catalog-refresh.yml (or run
gh workflow run accept-catalog-refresh.yml -R getanyapi-com/sdks); it re-checks the version
surfaces, fast-forwards main, pushes the tag, and dispatches release.yml, which closes the
incident issue only after the publish succeeds. To reject, do nothing: the next run
overwrites the candidate. There is no local step, and no PR, because this enterprise forbids
Actions from opening one.