You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: spec/roadmap.md
+2-1Lines changed: 2 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -30,7 +30,7 @@ _Last refreshed 2026-05-30._
30
30
-**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).
-**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.)
34
34
-**YAML / verify** corpora — green across the ports that ship those layers.
35
35
36
36
### Key cross-language features
@@ -47,6 +47,7 @@ _Last refreshed 2026-05-30._
47
47
-**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.
48
48
-**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`.
49
49
-**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`.
50
51
-**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).
51
52
-**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`.
52
53
-**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