Skip to content

ADR-0006 D2 execution carrier (SDK half): rename client.projects.*client.environments.* + wire unwrap shapes + JSDoc — parked until the next SDK/protocol breaking major #12865

Description

@os-litant

Filed by the Director/skills seat (session session_01MnijPVVDakqK2J335JoJtq), 2026-08-27, on maintainer instruction in live PM chat (verbatim: 「我如何安排 cloud 项目继续处理完?」— arranging the deferred Option-1 rename so it actually fires). This card is the machine carrier for ADR-0006's D2 pre-registration (PR #12736): an ADR paragraph is a record, not an inbox — this card is the inbox half.

Restart-when: a maintainer ruling on this card declares the next SDK/protocol breaking major open

Hold record

Parked pm:on-hold at filing, 2026-08-27, by maintainer ruling (#12473 option 3, 「其他同意」; the deferral rationale is ADR-0006 D2, merged via PR #12736): doing this today buys a zero-pull cross-repo breaking change. ⛔ Do not dispatch, do not "tidy" the surfaces early — an early rename PR reverses a recorded decision (ADR-0006 D1 / Prime Directive 13).

Scope when it unparks (the SDK half of one coordinated rename)

  • packages/client/src/index.ts: the projects method namespace → environments (all methods incl. the nested projects.packages block), no aliases (the standing v5.0 rename rule); the declared unwrap shapes' keys follow the wire rename ({ environments: … } / { environment: … }); the JSDoc sentence naming ProjectProvisioningService.provisionProject updated to whatever the server class is named at that time (it must keep describing the running system truthfully — ADR-0006 D1 point 3).
  • CLI consumers of those shapes (packages/cli/src/commands/environments/list.ts / create.ts / show.ts) follow in the same PR.
  • Migration entry in the major's notes; ADR-0006 D1 retired by an addendum in the same release (D2's own instruction: retire, never alias).

Pairing (hard)

Must land in the SAME coordinated release as the producer half — the cloud control plane's response fields project/projectsenvironment/environments (objectstack-ai/cloud; that repo's seat files and owns the paired card — requested at this card's filing; link lands in a comment below when filed). Neither half ships alone: shipping the SDK half alone is ADR-0006 D3, permanently declined; shipping the producer half alone breaks every current SDK caller mid-flight.

Timing note for the ruling-maker (from the 2026-08-27 Director discussion, recorded so it survives)

The rename's cost grows with SDK adoption — the caller base is smallest now. If one or two majors pass without touching the SDK/protocol face, re-adjudicate deliberately (「专门为它破一次值不值」) instead of letting this hold ride indefinitely. The window depreciates.

Refs: ADR-0006 v4 addendum (PR #12736) · #12473 (the ruled decision card) · the four predecessor cards the addendum exists to stop re-litigating


Epic delegation (2026-08-28, by maintainer ruling — see the unpark comment)

Epic PM: session session_65d2faee-1ff4-4be8-be28-72b972c539d9, branch claude/pm-dispatch-adr-0006-d2-sdk-eb8b61. The hold above is HISTORICAL — unparked 2026-08-28; the Restart-when clause was satisfied by the maintainer's ruling recorded in the unpark comment.

Declared file territory (other seats: batch selection avoids intersecting this):

  • objectstack: packages/client/src/index.ts (the projects namespace), packages/client tests and packages/client/exported-any-returns.json, packages/cli/src/commands/environments/**, content/docs/api/environment-routing.mdx + content/docs/concepts/north-star.mdx (census-reached, recorded 2026-08-28), docs/adr/0006-project-environment-split.v4.md (retirement addendum only, after PR docs(adr): record the ADR-0006 API-surface boundary — three surfaces keep project deliberately #12736 lands)
  • cloud: packages/service-cloud/src/routes/environment-crud.ts, packages/service-cloud/src/routes/environment-lifecycle.ts, and their tests
  • Deliberately NOT territory: packages/spec (measured 2026-08-28: zero projects envelope contracts in spec)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions