|
15 | 15 | - [x] Unit A (#270) — Java honors declared `@isArray` on plain scalars (`34705ce9`) |
16 | 16 | - [x] Unit A (#270) — docs closure (CLAUDE.md open question, KNOWN_GAPS, roadmap) + doc-truth wave (`608f4217`) |
17 | 17 | - [x] Unit A — independent review (review → adjudication → 2 fix rounds → final review → re-review): **SHIP** |
18 | | -- [ ] Unit A — merge to `main` + local-ci green |
| 18 | +- [x] Unit A — merge to `main` + local-ci green — **PR #274, `18792e52`, 9/9 green** |
| 19 | +- [x] **Release 1 — `0.20.16` / `7.20.16` coordinated PATCH — SHIPPED to all four registries** |
| 20 | +- [x] Unit B — doctrine docs amendment — **verified already landed** (`91de3a85`, `d6e250f3`); roadmap marked with Unit C |
| 21 | +- [x] Unit C — `@role` shrink to `primary | replica` (+ closes #212) — `93955c35`, `cb991a25` |
| 22 | +- [x] Unit D — #210: assembly origins off `object.value`; `@payloadRef`/`@responseRef` widened — `6c73e77a`, `e0e561ab`, `9c4fbadd` |
| 23 | +- [x] Fixture-count + docs propagation — **262 → 270** (counted, not computed: the plan's 269 missed the nested-target fixture) |
| 24 | +- [x] Batch (Units C+D) — independent review + merge to `main` + local-ci green — **PR #276, `18fb4bbe`, 9/9 green** |
| 25 | +- [x] **Release 2 — `0.21.0` / `7.21.0` coordinated MINOR — SHIPPED to all four registries** |
| 26 | +- [x] Issues closed with receipts: **#270, #212, #210, #271** (#271 discharged — premise falsified by recon) |
| 27 | + |
| 28 | +## OUTCOME — batch complete 2026-08-08 |
| 29 | + |
| 30 | +**Deviations from this plan, all deliberate and recorded:** |
| 31 | +1. **Unit A grew to include Java.** This plan recorded TS/C#/**Java** as origin-blind reference ports. False for Java — `SpringPayloadGenerator` carried the identical origin dispatch. Root cause: raw NUL bytes made the file test as *binary*, so the environment's `-I` grep wrapper silently returned nothing. Maintainer ruled fix-Java-too. See the NOTE on A's ruling above. |
| 32 | +2. **Three breaking changes, not two.** Final review found the nested-target rule (`field.object @objectRef` must target an `object.value`) is a genuine third break — TS/C#/Python previously accepted a non-value target *and emitted from it*. |
| 33 | +3. **Release 2 cut as MINOR, not the directed PATCH.** Pre-1.0 `^0.20.x` resolves `<0.21.0`, so a patch would be auto-adopted on a routine `npm update` and break adopters with no deliberate action. Maintainer left the call to the executor. |
| 34 | +4. **§4b (payload nested legal-target-set) implemented** as one fail-closed loader rule across four loaders, per the adjudication that overturned a per-port codegen filter. |
| 35 | +5. **`runner.ts` `dbImport`/`dialect` guard re-keyed** to `hasAnyRdbSource` — the release gate caught that it would false-positive on the very sourceless projections this release recommends. |
| 36 | + |
| 37 | +**The batch's recurring failure mode, five instances:** documentation asserting removed behavior as |
| 38 | +current, each surviving a sweep that was slightly narrower than the prose required — a false roadmap |
| 39 | +claim; a Java error message listing the rejected value as allowed (grepped constant *names*, not |
| 40 | +values); an ADR Consequences bullet contradicting its own amendment 35 lines above (grepped subtype |
| 41 | +names, not prose); **a skill shipped in `@metaobjectsdev/sdk` instructing agents to author |
| 42 | +now-illegal metadata** (grepped `origin.aggregate`; the file wrote `aggregate` bare); and `CLAUDE.md` |
| 43 | +listing 2 of 5 origin subtypes (never swept at all). **Lesson: sweep member VALUES as free text, |
| 44 | +spelling-agnostic, and read the hits rather than counting them.** |
19 | 45 | - [ ] Release 1 — `0.20.16` / `7.20.16` coordinated PATCH (checkpoint with the maintainer first) |
20 | 46 | - [ ] Unit B — doctrine docs amendment (ADR-0007 / FR-024 §7) — docs-only |
21 | 47 | - [x] Unit C — Gate 0 adopter scan — **CLEARED 2026-08-06** (see C.0) |
|
0 commit comments