Skip to content

Commit 5d97456

Browse files
dmealingclaude
andcommitted
docs(roadmap): FR-012 nested-object prompt expansion shipped (5 ports), corpus 12 cases
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 9821b1a commit 5d97456

1 file changed

Lines changed: 2 additions & 1 deletion

File tree

spec/roadmap.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ _Last refreshed 2026-05-30._
3030
- **Persistence conformance**`fixtures/persistence-conformance/`. TS / C# / Kotlin / Python all 12/12 against Testcontainers Postgres / Derby (per port). Java runs the **query** scenarios only (it no longer owns schema migrations); its runtime auto-create path bootstraps the schema, and the aggregate-projection view scenario is deferred (the view-body builder was part of the removed migration engine).
3131
- **API-contract conformance**`fixtures/api-contract-conformance/`. TS / C# / Java / Kotlin / Python all 20/20.
3232
- **Recover conformance**`fixtures/recover-conformance/` (20 dirty-input cases). TS / C# / Java / Python all 20/20; Kotlin reuses the shared JVM engine.
33-
- **Output-prompt conformance**`fixtures/output-prompt-conformance/` (10 cases × 3 `@promptStyle` styles). Pins the FR-010 output-format prompt fragment byte-identically across all 5 ports (zero-drift, no ledger) + a render→recover round-trip skew guard. TS pilot; C# / Java / Python reproduce the bytes natively; Kotlin drives the shared JVM engine. Backlog item R13. (Also added three `fixtures/conformance/error-enum-*` negative fixtures pinning FR-011 enum-coercion attr-validation — `@coerceDefault`/`@default` membership + `@normalize` mode — across the 4 loader ports.)
33+
- **Output-prompt conformance**`fixtures/output-prompt-conformance/` (12 cases × 3 `@promptStyle` styles). Pins the FR-010 output-format prompt fragment byte-identically across all 5 ports (zero-drift, no ledger) + a render→recover round-trip skew guard. Fragments expand **nested objects + arrays-of-objects + scalar arrays** (FR-012). TS pilot; C# / Java / Python reproduce the bytes natively; Kotlin drives the shared JVM engine. Backlog item R13. (Also added three `fixtures/conformance/error-enum-*` negative fixtures pinning FR-011 enum-coercion attr-validation — `@coerceDefault`/`@default` membership + `@normalize` mode — across the 4 loader ports.)
3434
- **YAML / verify** corpora — green across the ports that ship those layers.
3535

3636
### Key cross-language features
@@ -47,6 +47,7 @@ _Last refreshed 2026-05-30._
4747
- **FR-006 — `template.output` parser-on-receipt codegen.** ADR-0010. Shipped in all 5 ports (TS / C# / Java / Python / Kotlin); `meta verify` extended to cover output drift.
4848
- **FR-010 — output-format prompt fragment + tolerant `recover` parser.** Shipped in all 5 ports. One `template.output` drives three artifacts: a comment-free output-format prompt fragment (3 styles × json/xml via `@promptStyle`), a tolerant `recover()` (8-stage, never-throws, returns an all-nullable mirror of the payload) that complements FR-006's strict parser, and the `@example`/`@instruction`/`@enumAlias`/`@enumDoc` field-teaching attrs. Pinned by the shared `fixtures/recover-conformance/` corpus; tolerance is at classification + canonical value (not byte-identity). Designed in `docs/superpowers/specs/2026-05-29-fr-010-output-format-prompt-and-tolerant-parsing-design.md`.
4949
- **FR-011 — recover hardening (enum coercion + nested-object recovery).** Shipped in all 5 ports (TS pilot → C# / Java / Kotlin / Python). Hardens FR-010's `recover()` in place: an enum coercion pipeline (exact → `@normalize` `none|collapse|strip``@enumAlias``@coerceDefault` → MALFORMED), `@default` fills an absent enum (emitting the now-live `DEFAULTED` state, which satisfies `@required`), and uniform nested/embedded-object recovery via dotted child paths (`meta.score`, `items[i].label`) across JSON + XML. Normalization is ASCII-only (manual case-fold, byte-identical cross-port); `@normalize`/`@coerceDefault`/`@default` are member-validated on `field.enum` at load time, with an object-level `@normalize` default. Fuzzy matching deferred (reserved pipeline slot). Corpus expanded 10 → 20 cases. Designed in `docs/superpowers/specs/2026-05-30-fr-011-recover-hardening-design.md`.
50+
- **FR-012 — nested-object prompt expansion.** Shipped in all 5 ports (TS pilot → Java / C# / Python; Kotlin inherits the shared JVM engine). The FR-010 output-format prompt renderer now recurses into nested `OBJECT` fields, arrays-of-objects, and scalar arrays (instead of a flat `{name}` placeholder) across all 3 styles (guide/inline/exampleOnly) × json/xml, with an identity-based cycle guard + `MAX_NEST_DEPTH`. Closes the FR-010 request/response asymmetry (`recover` already handled nesting). Output-prompt-conformance corpus 10 → 12 cases (added `json-deep-nest` + `json-array-of-objects`; `json-nested`/`xml-nested` now round-trip). Designed in `docs/superpowers/specs/2026-05-30-fr-012-nested-object-prompt-expansion-design.md`.
5051
- **Prompt-construction pillar — per-port building blocks complete.** Render (Mustache) + payload-VO codegen + `verify` (FR-004), the output parser (FR-006), and the output-format prompt + recover (FR-010) all ship in all 5 ports. The library-side primitives of the fourth pillar are delivered; what remains is MCP exposure (see Planned).
5152
- **Cross-port `templateGenerator()`** (shipped 2026-05-28). TS reference + Python / C# / Java factories; 3/3 conformance fixtures byte-equivalent. Java ships lightweight types under `com.metaobjects.render.templategen` (its legacy `Generator` interface was incompatible). Maven-plugin integration for the Java factory is a follow-up. See `design-docs/2026-05-28-cross-port-template-generator.md`.
5253
- **OMDB Spring Boot 3 starter** (shipped 2026-05-30). Autoconfiguration wires a `DataSource``ObjectManagerDB` with Spring-tx; closes the OMDB-modernization open question (jOOQ migration ruled out as a non-goal).

0 commit comments

Comments
 (0)