Parent issue: #844
Parent PR: #846
Blocked reason: fix loop reached 12 rounds and was reconciled to blocked.
Smaller scope / alternative approach:
Governing practice: Ports-and-Adapters, contract-first fail-closed validation, and a single contract-owned canonicalization authority. This isolates the domain boundary after repeated drift in operation naming, result shape, validation ownership, and JSON array-preserving copies.
Smaller scope:
- Add
TestCaseGenerationPort.generate(request) and the generation use case.
- Validate requests and successful candidate sets through the existing testing-design generation contract.
- Preserve the closed typed failure union and return detached snapshots from the fake adapter using contract canonicalization.
Non-goals: Codex CLI execution, Node process code, production runtime wiring, signed publication, or #795 handoff.
Acceptance criteria:
- Fake-adapter tests cover valid success, cancellation, every typed failure, malformed outcomes, foreign
request_digest, prompt identity, and mutation isolation.
- No second canonical JSON or digest implementation is introduced.
- Valid arrays retain their JSON representation after detachment.
- Relevant checks and tests pass.
Non-goals:
- Do not repeat the same high-round fix path without reducing scope or changing approach.
Acceptance:
- The work is independently reviewable.
- The implementation can pass the normal intake, consensus, implementation, and review pipeline.
Parent issue: #844
Parent PR: #846
Blocked reason: fix loop reached 12 rounds and was reconciled to blocked.
Smaller scope / alternative approach:
Governing practice: Ports-and-Adapters, contract-first fail-closed validation, and a single contract-owned canonicalization authority. This isolates the domain boundary after repeated drift in operation naming, result shape, validation ownership, and JSON array-preserving copies.
Smaller scope:
TestCaseGenerationPort.generate(request)and the generation use case.Non-goals: Codex CLI execution, Node process code, production runtime wiring, signed publication, or
#795handoff.Acceptance criteria:
request_digest, prompt identity, and mutation isolation.Non-goals:
Acceptance: