Skip to content

Commit 41a2d44

Browse files
docs(adr): record the v5.0 project to environment rename in ADR-0006, and land its inbound pointers (#13364)
* docs(adr): record the v5.0 project to environment rename and its no-alias decision ADR-0006 v4 gains a short section stating what the v5.0 tenancy rename covered, that no alias was kept, and why -- measured on main rather than recalled. The section states its reasons itself instead of quoting the instruction file that points here, which is what made the previous pointer a loop. The three byte-identical v5.0 banners in ADR-0004/0005/0008 move together: repointed at the new section, and the changeset path they named for the breaking-change list is dropped (that file no longer exists -- it was consumed at release, which is why a doc should not cite one as durable evidence). Placed before the two addenda so their 'first addendum' / 'second addendum at the end of this file' cross-references stay true. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EXxTW8mvPBhoHxmyPZ63de * docs(adr): point ADR-0007 and ADR-0008 Builds-on at the Accepted ADR-0006 v4 Both linked ADR-0006 under the bare filename, which holds the Superseded v3. The redirect works, so the link checker was green either way and nothing would ever have gone red. Repointed at the .v4 filename -- the revision that carries the API-surface vocabulary boundary -- with a short parenthetical on each so the historical fact a Builds-on line records is not silently destroyed: these records really were built on v3. No mechanical Builds-on-vs-Superseded rule is added; two instances do not justify a permanent gate. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EXxTW8mvPBhoHxmyPZ63de * docs(adr): mark ADR-0006 v2 Superseded -- two files under one number claimed Accepted v2 (three-layer tenancy: Project and Environment as siblings under Organization, joined by sys_deployment) still read 'Accepted (v2)' while v4 also reads Accepted. v4's own Supersedes line already names v2. Verified before changing rather than assumed: nothing in v2's Decision is uniquely live. It keeps sys_project as the physical table, plans a dual sys_project / sys_environment ORM name, and holds the API URLs at /api/v1/cloud/projects with provisionProject on the SDK -- every one of which v4 and the v5.0 rename reverse, and the dual-name plan is exactly the alias posture the rename refused. Unlike v3 this file carries no redirect of any kind, so a reader or a corpus scan keying on 'Status: Accepted' had nothing telling it to go read v4. Status line only; neither v2 nor v3 is deleted -- they are part of the record. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EXxTW8mvPBhoHxmyPZ63de --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 7c41693 commit 41a2d44

6 files changed

Lines changed: 64 additions & 6 deletions

docs/adr/0004-cloud-multi-kernel.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# ADR-0004: Cloud Control Plane + Per-Project Kernels
22

3-
> **v5.0 update (2026):** Throughout this document, the term *project* has been renamed to *environment* (no aliases; CLI flags, URL paths, schemas, env vars all hard-renamed). See ADR-0006 for the rationale and `.changeset/v5-project-to-environment-rename.md` for the breaking-change list. The body below is preserved verbatim for historical context.
3+
> **v5.0 update (2026):** Throughout this document, the term *project* has been renamed to *environment* (no aliases; CLI flags, URL paths, schemas, env vars all hard-renamed). See [ADR-0006 v4 — the v5.0 rename and its no-alias decision](./0006-project-environment-split.v4.md#the-v50-rename-and-its-no-alias-decision) for the rationale. The body below is preserved verbatim for historical context.
44
55

66
**Status**: Superseded (2026-04-23) — the physical split between `apps/cloud`

docs/adr/0005-metadata-customization-overlay.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# ADR-0005: Metadata Customization Overlay (Artifact + sys_metadata Delta)
22

3-
> **v5.0 update (2026):** Throughout this document, the term *project* has been renamed to *environment* (no aliases; CLI flags, URL paths, schemas, env vars all hard-renamed). See ADR-0006 for the rationale and `.changeset/v5-project-to-environment-rename.md` for the breaking-change list. The body below is preserved verbatim for historical context.
3+
> **v5.0 update (2026):** Throughout this document, the term *project* has been renamed to *environment* (no aliases; CLI flags, URL paths, schemas, env vars all hard-renamed). See [ADR-0006 v4 — the v5.0 rename and its no-alias decision](./0006-project-environment-split.v4.md#the-v50-rename-and-its-no-alias-decision) for the rationale. The body below is preserved verbatim for historical context.
44
55

66
**Status**: Accepted (2026-05-16) · **Amended** (2026-05-22, see "Amendment: post-ADR-0006 v4 scope") · **Amended** (2026-04-13, branch concept removed — see [ADR-0008 §0](./0008-metadata-repository-and-change-log.md#0-2026-04-13-amendment--drop-project-and-branch-from-metaref)) · **Amended** (2026-08-09, #6825 — the Phase-1 overlay-index migration is deleted; see "Amendment (2026-08-09, #6825): overlay-index delivery after the Phase-1 migration was deleted")

docs/adr/0006-project-environment-split.v2.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# ADR-0006: Three-Layer Tenancy — Organization, Project, Environment
22

3-
**Status**: Accepted (v2)
3+
**Status**: Superseded by v4 (`0006-project-environment-split.v4.md`) — 2026-05-20
44
**Date**: 2026-05-20 (v1) / 2026-05-20 (v2 — same day revision)
55
**Deciders**: ObjectStack Protocol Architects
66
**Builds on**: ADR-0002 (Environment-Per-Database Isolation), ADR-0003 (Package as First-Class Citizen), ADR-0005 (Metadata Customization Overlay)

docs/adr/0006-project-environment-split.v4.md

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,64 @@ when needed.
255255

256256
---
257257

258+
## The v5.0 rename and its no-alias decision
259+
260+
**Recorded 2026-08-30 (#12747); the decision itself is v5.0's.** This section
261+
writes down a decision that was made and enforced platform-wide but never
262+
stated, and it is written *here* because this record is where the rest of the
263+
repository sends a reader who asks why the platform says `environment`. It
264+
therefore states its reasons directly, rather than citing back the instruction
265+
file that cites this record.
266+
267+
**What was renamed.** The tenancy noun `project` became `environment` on every
268+
surface the platform owns. Measured on `main`, 2026-08-30:
269+
270+
| Surface | Spelling today |
271+
|:---|:---|
272+
| CLI command group | `packages/cli/src/commands/environments/``list`, `show`, `create`, `switch`, `bind`; there is no `projects` group |
273+
| Control-plane routes | `/api/v1/cloud/environments` |
274+
| Request header | `X-Environment-Id` (read in `packages/rest/src/rest-server.ts`) |
275+
| Environment variable | `OS_ENVIRONMENT_ID` (read in `packages/runtime`, `service-job`, `cloud-connection`) |
276+
277+
Afterwards `project` keeps exactly one meaning here: the npm/monorepo sense — a
278+
checkout, a workspace, a `package.json` — which is the sense the v4 body above
279+
unifies onto Package.
280+
281+
**No alias was kept, and that half is the load-bearing one.** There is no
282+
`OS_PROJECT_ID` and no `X-Project-Id` in the tree, and ADR-0087's conversion
283+
registry — the declared home for any tolerated legacy spelling — carries no
284+
entry translating `project` to `environment`. Since a tolerated alias would have
285+
to be declared there, the empty registry is positive evidence that none was
286+
tolerated, not merely evidence that nobody recorded one.
287+
288+
**Why no alias.** Three reasons, none of which expires with the price:
289+
290+
1. **One word per concept, or the vocabulary becomes a guess per call site.** An
291+
alias makes both spellings correct, so every reader and every code generator
292+
has to pick one, and a wrong pick typechecks. This is D3's argument below
293+
applied one level up: a split vocabulary is worse than a uniformly old one,
294+
because the reader cannot tell which half is the mistake.
295+
2. **A compatibility spelling outlives the reason for it.** It is cheap only
296+
while it is understood as temporary. Nothing schedules its removal, each new
297+
consumer learns it as a legitimate second form, and the mapping between the
298+
two spellings becomes a permanent seam that every consumer reimplements.
299+
3. **The window was open, and it does not reopen at this price.** The Context
300+
above records the condition the rename was taken under — *"The platform is
301+
still pre-launch; the same one-shot-wipe window v3 used remains open."* Taken
302+
then, the rename cost one coordinated edit; taken later it would cost a
303+
deprecation cycle plus the alias it exists to avoid. The startup-stage
304+
posture is to spend that window rather than bank a migration: no gradualism,
305+
no dual-spelling interval, no single release carrying both.
306+
307+
**What this section does not claim.** Not that the string `project` is absent
308+
from the tree — it remains correct in the npm/monorepo sense, in domain fixtures
309+
modelling a customer's own project object, and in the API identifiers the two
310+
addenda below adjudicate. The claim is the narrower, checkable one: on the
311+
surfaces tabled above the platform emits a single spelling, and no declared
312+
alias accepts the other.
313+
314+
---
315+
258316
## Addendum (2026-08-27, #12473) — the rename stops at the CLI's user-facing vocabulary: three API surfaces keep `project` deliberately
259317

260318
**Provenance.** Maintainer ruling on

docs/adr/0007-settings-manifest-and-kv-store.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
**Status**: Accepted — backend implemented; UI pending (objectui) (proposed 2026-05-20 · calibrated 2026-06-12)
44
**Deciders**: ObjectStack Protocol Architects
5-
**Builds on**: [ADR-0005](./0005-metadata-customization-overlay.md) (Metadata Customization Overlay), [ADR-0006](./0006-project-environment-split.md) (Project/Environment Split)
5+
**Builds on**: [ADR-0005](./0005-metadata-customization-overlay.md) (Metadata Customization Overlay), [ADR-0006 v4](./0006-project-environment-split.v4.md) (Project/Environment Split — this record was originally built on v3, superseded by v4)
66
**Consumers**: `@objectstack/spec`, `@objectstack/platform-objects`, new `@objectstack/service-settings`, `@objectstack/plugin-auth` (Setup app), `objectui` (Settings renderer)
77

88
---

docs/adr/0008-metadata-repository-and-change-log.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
# ADR-0008: Metadata Repository, Change Log & Subscription (M0 → M4)
22

3-
> **v5.0 update (2026):** Throughout this document, the term *project* has been renamed to *environment* (no aliases; CLI flags, URL paths, schemas, env vars all hard-renamed). See ADR-0006 for the rationale and `.changeset/v5-project-to-environment-rename.md` for the breaking-change list. The body below is preserved verbatim for historical context.
3+
> **v5.0 update (2026):** Throughout this document, the term *project* has been renamed to *environment* (no aliases; CLI flags, URL paths, schemas, env vars all hard-renamed). See [ADR-0006 v4 — the v5.0 rename and its no-alias decision](./0006-project-environment-split.v4.md#the-v50-rename-and-its-no-alias-decision) for the rationale. The body below is preserved verbatim for historical context.
44
55

66
**Status**: Accepted (2026-05-22) · Amended 2026-04-13 — branch concept removed (see §0 Amendment).
77
**Deciders**: ObjectStack Protocol Architects
8-
**Builds on**: [ADR-0003](./0003-package-as-first-class-citizen.md), [ADR-0004](./0004-cloud-multi-kernel.md), [ADR-0005](./0005-metadata-customization-overlay.md), [ADR-0006](./0006-project-environment-split.md)
8+
**Builds on**: [ADR-0003](./0003-package-as-first-class-citizen.md), [ADR-0004](./0004-cloud-multi-kernel.md), [ADR-0005](./0005-metadata-customization-overlay.md), [ADR-0006 v4](./0006-project-environment-split.v4.md) (this record was originally built on v3, superseded by v4)
99
**Supersedes (parts of)**: ad-hoc HMR wiring in `packages/metadata` and the local-only POST contract between CLI and runtime.
1010

1111
---

0 commit comments

Comments
 (0)