|
2 | 2 |
|
3 | 3 | ## Status |
4 | 4 |
|
5 | | -**Proposed** (2026-06-29; §2 version-line strategy **ratified 2026-07-02** — decouple). |
| 5 | +**Accepted** (2026-06-29; all **[RATIFY]** items resolved 2026-07-02). |
6 | 6 | Companion checklist: [`docs/1.0-readiness.md`](../../docs/1.0-readiness.md). |
7 | 7 |
|
8 | | -This ADR frames the decisions a 1.0 release commits to; the bracketed **[RATIFY]** |
9 | | -items are open calls for the maintainer to confirm before this moves to *Accepted*. |
10 | | -It does not itself change any code or contract. **§2 (version-line strategy) is |
11 | | -ratified: decouple — npm/PyPI/NuGet `→1.0.0`, Java/Kotlin `→8.0.0`, tied by a shared |
12 | | -`Metamodel 1.0` spec version.** The §3 items (A2 FR-024, A3 deprecated export, A4 |
13 | | -own-your-codegen) remain open. |
| 8 | +This ADR frames the decisions a 1.0 release commits to. All bracketed **[RATIFY]** |
| 9 | +items are now resolved: |
| 10 | +- **§2 version-line strategy — decouple:** npm/PyPI/NuGet `→1.0.0`, Java/Kotlin |
| 11 | + `→8.0.0`, tied by a shared `Metamodel 1.0` spec version. |
| 12 | +- **§3 A2 FR-024 — defer** (reserved-but-unregistered post-1.0). |
| 13 | +- **§3 A3 deprecated export — remove at the 1.0/8.0 cut** (G2, not before). |
| 14 | +- **§3 A4 own-your-codegen — ratified per-port-idiomatic + documented.** |
| 15 | + |
| 16 | +It does not itself change code; the one-time moves it commits to (version |
| 17 | +re-baselining, the export removal) execute at the cut per `docs/1.0-readiness.md` §G. |
14 | 18 |
|
15 | 19 | ## Context |
16 | 20 |
|
@@ -126,18 +130,28 @@ by the conformance matrix. Pre-cut the vocabulary is "Metamodel 0.x / in |
126 | 130 | development"; the cut *freezes* it as `1.0` (mirroring OTel's own 0.x→1.0). Tracked |
127 | 131 | in `docs/1.0-readiness.md` (§C). |
128 | 132 |
|
129 | | -### 3. Gating items — the breaking-change consolidation window — **[RATIFY each]** |
130 | | - |
131 | | -Treat the next one or two `0.x`/`7.x` releases as the window to land every breaking |
132 | | -change we still want, then freeze. Before cutting 1.0: |
133 | | -- **FR-024 declared-API:** land it, **or** explicitly defer post-1.0 with |
134 | | - `api.*`/`operation.*`/`binding.*` *reserved but unregistered* (so adding them later |
135 | | - is additive, not breaking). **[RATIFY: land vs defer]** |
136 | | -- **Deprecated `codegen-ts/generators` export:** remove at 1.0 (1.0 is the natural |
137 | | - major for it), **or** consciously retain one more line. **[RATIFY: remove vs keep]** |
138 | | -- **Cross-port "own your codegen":** ratify that it is *per-port-idiomatic* (TS |
139 | | - `meta init`; JVM/Python/C# via build config) and **document that explicitly**, OR |
140 | | - close a parity gap first. **[RATIFY: idiomatic-and-document vs close-gap]** |
| 133 | +### 3. Gating items — the breaking-change consolidation window — **[RATIFIED 2026-07-02]** |
| 134 | + |
| 135 | +Treat the next one or two releases as the window to land every breaking change we |
| 136 | +still want, then freeze. Before cutting 1.0: |
| 137 | +- **FR-024 declared-API — [RATIFIED: DEFER].** `api.*`/`operation.*`/`binding.*` stay |
| 138 | + **reserved but unregistered** post-1.0 (they are already absent from |
| 139 | + `expected-registry.json`; ADR-0030 defines the shape). Adding them later is |
| 140 | + *additive*, so deferral costs nothing and keeps the declared-API surface out of the |
| 141 | + 1.0 breaking window. This is what makes the quiet period achievable — it removes the |
| 142 | + only remaining candidate for another breaking round (§C3). Tracked in #10. |
| 143 | +- **Deprecated `codegen-ts/generators` export — [RATIFIED: REMOVE at the cut].** The |
| 144 | + `@deprecated ADR-0034` re-exports (`entityFile`/`queriesFile`/`routesFile`/`barrel` |
| 145 | + from `@metaobjectsdev/codegen-ts/generators`) are removed **as part of the 1.0/8.0 |
| 146 | + major bump (G2)** — *not before*. Removing an export is itself a breaking change; |
| 147 | + doing it at the major absorbs it, whereas doing it during the run-up would restart |
| 148 | + the quiet-period clock (§G3). Consumers migrate to the `meta init`-scaffolded owned |
| 149 | + copies under `codegen/generators/*`. |
| 150 | +- **Cross-port "own your codegen" — [RATIFIED: idiomatic + document].** The per-port |
| 151 | + split is intentional and *not* a parity gap to close: TS uses `meta init` |
| 152 | + scaffold-and-own; the JVM/Python/C# ports own their codegen via build config |
| 153 | + (Maven `metaobjects:gen`, `metaobjects gen`, `dotnet meta gen`). Documented in |
| 154 | + `docs/features/own-your-codegen.md` (readiness D4). |
141 | 155 | - **Metamodel freeze:** the metamodel-1.0 vocabulary program (`0.15.0`/`7.7.0`; |
142 | 156 | ADR-0036/0037/0038) was the intended finalization, and ADR-0037 sets the framework |
143 | 157 | for future additions; `registry-conformance` is the enforcer. **The actual last |
|
0 commit comments