Skip to content

docs(adr): record the ADR-0006 API-surface boundary — three surfaces keep project deliberately - #12736

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-12473-adr-0006-boundary-addendum
Aug 28, 2026
Merged

docs(adr): record the ADR-0006 API-surface boundary — three surfaces keep project deliberately#12736
os-zhuang merged 1 commit into
mainfrom
claude/issue-12473-adr-0006-boundary-addendum

Conversation

@os-litant

Copy link
Copy Markdown
Collaborator

Fixes #12473

Records the maintainer's Option 3 ruling (2026-08-27, decision-inbox batch, verbatim 「其他同意」) as an addendum on ADR-0006. Doc-only: one file, zero code changes — on this question, not touching the three named API surfaces is the deliverable.

What landed

docs/adr/0006-project-environment-split.v4.md (the Accepted revision of the record; v2/v3 are superseded and untouched):

  1. New section — a top-level heading reading Addendum (2026-08-27, [decision] Does the v5.0 projectenvironment rename extend to the API surface — client.projects.* and the res.project / res.projects response fields? #12473) — the rename stops at the CLI's user-facing vocabulary: three API surfaces keep project deliberately, appended after References, following the convention measured in this repo.
  2. Status line amended to point at it, so a reader who lands on the header meets the boundary without scrolling — the same shape ADR-0069, ADR-0085 and ADR-0099 use for their addenda.

The addendum carries the three parts the ruling requires: D1 names the retained surfaces, D2 pre-registers Option 1, D3 declines Option 2 with its reason. It also records what it does not change, and why it is an addendum rather than a new ADR (the ADR-0094 precedent).

The three surfaces, measured today and named by quoted phrase

The card anchored one of the three to a line number, and that anchor was already stale when this branch was cut — the sentence sits one line further down on main. The addendum therefore identifies all three by quoted phrase. Measured on main at a65db76:

surface how the addendum identifies it measured
SDK method namespace the projects block on the @objectstack/client client class, reached as client.projects.list / .get / .create / .update / .delete / .activate, plus the nested projects.packages methods present, unchanged; no environments namespace exists on that client
control-plane response fields the envelope keys project and projects returned by the /api/v1/cloud/environments endpoints consumer side only — the SDK's declared unwrap shapes, plus res?.projects ?? [] in packages/cli/src/commands/environments/list.ts and res?.project in the sibling create.ts / show.ts
SDK JSDoc the sentence "Provision a new project. Delegates to ProjectProvisioningService.provisionProject on the server." on that namespace's create method present, unchanged

Two limits stated in the addendum rather than glossed: the producer of the wire fields is the cloud control plane in objectstack-ai/cloud, which is not this repository — nothing here claims to have measured it, and nothing cross-repo was touched. And worth noting for the next reader: the routes underneath the SDK namespace are already renamed (every method calls /api/v1/cloud/environments), so the namespace identifier is the only project spelling left on that face.

Deliberately not touched

packages/client/src/index.ts — both because the JSDoc sentence in it is ruled retained (editing it executes the permanently-declined Option 2) and because the file is held by #11925 in another container. Two independent reasons, either one sufficient.

Addendum convention — measured, not invented

29 of the 130 records under docs/adr/ carry at least one addendum. The dominant shape is a top-level ## Addendum (DATE, #issue) — one-line summary section appended at the end of the record, after References where one exists (ADR-0057), with the Status line amended to point at it when the addendum changes how the record should be read (ADR-0069, ADR-0085, ADR-0099). ADR-0094 additionally carries a "Why an addendum, not a new ADR" paragraph, which this one follows.

Gates

Union re-run after the final commit, on 0fdf6eb9f, working tree clean. Families derived with node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack (re-derived after the commit; same five):

gate verdict line
pnpm check:adr-anchors check-adr-anchors: OK (52 anchored file(s) … 29630 citation(s) across 3722 file(s) resolve)
pnpm check:doc-authoring doc authoring guard: 391 files clean — no bare metadata literals
pnpm --filter @objectstack/lint run check:doc-formula-expressions 22 record-scoped formula example(s) across 424 files / 1450 TS blocks judged clean
node scripts/check-adr-links.mjs check-adr-links: 564 relative link destination(s) under docs/adr/ resolve
pnpm check:pm-governed-merges self-test 206 assertions pass; live: the real generator declared 9 output(s) and certified this tree
pnpm check:nul-bytes check-nul-bytes: OK (scanned 7067 text file(s) … no raw ASCII control bytes)

check:doc-formula-expressions first reported PREREQUISITE NOT MET (unbuilt @objectstack/formula, then @objectstack/lint); it was re-run to a real green after turbo run build --filter=@objectstack/lint.

Changeset: none — derived, not assumed. The changeset gate exempts a PR only via a changeset or the skip-changeset label, with no docs-only path of its own; this diff publishes nothing from any package, so skip-changeset is the correct declaration.

Governance

docs/adr/** is a governed surface (AGENTS.md Prime Directive 14). This PR stays draft and is merged by the maintainer, by hand. No auto-merge is armed, and no seat should flip it ready.


Generated by Claude Code

…keep `project` deliberately (#12473)

The v5.0 `project` → `environment` rename is scoped to the CLI's user-facing
vocabulary. The SDK method namespace, the control-plane response fields and
the SDK JSDoc that travels with them keep `project` deliberately; the full
rename is pre-registered to reopen at the next planned SDK/protocol breaking
major, and the SDK-only half-rename is permanently declined with its reason.

Doc-only: no code, no schema, no route changes.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UjujZN219uFzBhSYfMykCd
@os-litant os-litant added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Aug 27, 2026 — with Claude
@github-actions github-actions Bot added size/m documentation Improvements or additions to documentation labels Aug 27, 2026
@os-zhuang
os-zhuang marked this pull request as ready for review August 28, 2026 06:56
@os-zhuang
os-zhuang requested a review from hotlong as a code owner August 28, 2026 06:56
@os-zhuang
os-zhuang enabled auto-merge August 28, 2026 06:57
@os-zhuang
os-zhuang added this pull request to the merge queue Aug 28, 2026

os-elon commented Aug 28, 2026

Copy link
Copy Markdown
Collaborator

Merging directly on the maintainer's explicit order — provenance: maintainer, 2026-08-28, live director session (session session_016SG9S6V15MqeAgkehDcTwk), verbatim: 「12718 12736 12689 我都批准了,为什么合并队列会踢出,你帮我合并」.

docs/adr/** is a governed surface: the queue guard refuses it by design (until the approve-gated queue path of PR #12755 lands); the sanctioned landing is a human-authorized direct merge, and this comment records that authorization. mergeable_state: clean at merge time.


Generated by Claude Code

@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Aug 28, 2026
@os-zhuang
os-zhuang added this pull request to the merge queue Aug 28, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Aug 28, 2026
@os-zhuang
os-zhuang merged commit ac35e2a into main Aug 28, 2026
29 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-12473-adr-0006-boundary-addendum branch August 28, 2026 07:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/m skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

4 participants