Repair acceptance scenarios after structural rule migrations
Owner authorization: repair all 49 failing acceptance tests at 918efe93, branch fix-acceptance. FAMX belongs to pi and is excluded. Allowed paths: tests/acceptance/, tests/fixtures/, this task page, scripts/real/benchmark/inject.{ts,test.ts}; demonstrated regressions require hub/knowledge/{sync.ts,sync-unreleased-alias.test.ts,README.md}, hub/server/{text.ts,tools.ts,feeding-text.test.ts,README.md}, packs/workflow/case-review/{functions/expected-quality.ts,functions/expected-quality.test.ts,README.md,api.ts,pack.json}, contracts/{README.md,src/submission.ts}, regenerated submission/tool schemas, and hub/runs/engine identity submission, lineage, reuse and replay code/tests and README, with any published pack change versioned and signed together.
Baseline: 109 acceptance tests, 60 pass, 49 fail, no skipped tests (owner fullcheck TAP).
Root causes and migration rationale
- R3 introduced the optional expected_quality judgment slot. Scripted review submissions must explicitly send an empty list when no judgment is supplied. This preserves undeclared/pending judgment rather than inventing a judgment from prose. Requirement inventories include the new item requirement.
- R2 treats resource values as exact declarations. Configuration is not configuration; variants remain advisory structural violations. Negative membership uses the exact declared negative literal only.
- R6 no longer infers PLM identities from prose titles. Source-binding scenarios explicitly declare stories and bugs through the existing parameters, preserving their source-read assertions.
-
R5 runtime-contract@2 preserves a recoverable original contract identity. Extending its original entries requires recomputing both original identity and the augmented declaration, with the profile pinning the original identity.
- Optional expected_quality had a code regression: an empty judgment was treated as forged evidence when a complete expected leaf was available (notably carry-over). It now remains unknown with the exact missing judgment and next step. Nonempty malformed claims still refute. case-review is bumped and re-signed to 1.1.23.
- The synthetic bed does not enable spec_index or legacy case_index. It must disclose that no unversioned root is declared; it cannot assert a closed empty root without a source inventory.
- Hub sync’s final alias check wrongly demanded a root for unpublished aliases whose unpublished base was intentionally skipped. It now uses structured release state; published aliases still require a produced base. Tests cover both across reruns.
- Feeding text was appended after the 30,000-character renderer budget. Both normal and fallback answers now fit the disclosure into that same budget with explicit omission/recovery and the original trace.
-
The benchmark injector still used a negative-tag regex. It now calls the published exact resource declaration helper. Injected structural defects are compared by newly introduced codes, since an existing advisory R2 violation must not mask a new structural failure. A second expected leaf preserves existing tag violations and introduces no structural violation.
- A04’s explicit identity contract existed but was not accepted by submit_result or propagated into author lineage. Report scenarios remained blocked by independence_unknown after their draft-slot migration. The optional model_identity input now consumes exactly model-identity@1; stored submissions supply exact model/family IDs across handover, reuse and effect replay. Legacy submissions keep their missing-family state. Model warrants use the declared model_id, never the display text; account independence stays unchanged.
Baseline failure inventory
Every baseline failing leaf is retained. Shared-slot failures cascade from the same missing required slot shape; the table records additional failures exposed after admission was repaired.
| Scenario file | Baseline failures | Root cause and resolution |
|---|---|---|
| 01-normal-review | 6 | New requirement inventory and slot; exact tags, explicit PLM IDs, no inferred searches or fabricated unversioned root |
| 02-quote-mismatch | 2 | Shared draft slot migration preserves the quote-refusal assertions |
| 03-command-membership-contradicted | 1 | Shared draft slot migration preserves catalog contradiction |
| 04-negative-case-param-out-of-range | 1 | Shared draft slot migration preserves typed range refutation |
| 05-cross-item-claims | 1 | Shared draft slot migration preserves cross-item judgments |
| 08-second-product-pack | 1 | Shared draft slot and five-requirement inventory |
| 10-item-reuse | 2 | Shared slot, explicit fresh slot, empty optional judgment remains unknown on reuse |
| 13-idempotence | 1 | Shared draft slot; immutable transitional result behavior retained |
| 14-knowledge-sync | 1 | Unpublished alias excluded from production is not a failed root |
| 15-aliasing-end-to-end | 1 | Shared draft slot migration |
| 16-agile-mindmap-review | 2 | Explicit source IDs and shared slot; additionally repaired post-layout feeding budget overflow |
| 17-hub-restart | 2 | Shared draft slot migration; append-only persisted results retained |
| 19-concurrency | 2 | Shared draft slot migration; concurrent current results retained |
| 20-injected-defects | 4 | Shared slot; individual-code delta; exact declared negative removal; multiple expected leaves do not erase tag violations |
| 21-model-violations | 3 | Shared draft slot migration preserves intentional invalid-submission refusals |
| 22-fact-model-independence | 3 | Shared slot; distinct explicit scripted identities, fact terminals remain independent of model judgment |
| 26-review-report | 8 | Shared slot followed by explicit model identity wiring; fulfilled declarations enable reports, absent/same-family cases remain blocked |
| 28-device-run | 7 | Recoverable original contract pin, full typed inspect authority/effect closure from the locked catalog; parseable tampering changes expectation text within its source quote |
| 31-predecessor-default | 1 | Shared draft slot migration; no implicit predecessor fallback introduced |
| Total | 49 | No tests removed or skipped |
Validation
Full acceptance rerun completed on synthetic loopback connectors and temporary PostgreSQL: 109 tests, 109 passed, 0 failed, 0 cancelled, 0 skipped (baseline 60 passed / 49 failed). Focused reruns followed new changes or remaining failures. No deployment or real-system evidence is claimed.
Completed checks:
- Changed semantic, budget, sync and injection regressions: 104/104 passed, no skips.
- Model identity, handover, legacy immutability, reuse and effect replay: 30/30 passed, no skips.
- Contract tests: 336/336 passed; generated contracts match all 129 files.
- Documentation checks: 210/210 passed; typecheck passed.
- Published case-review validation/sample checks passed with version 1.1.23 and a regenerated manifest.
- A broader diagnostic run including case-review’s old unit tests: 328 tests, 317 passed, 11 failed. Every failing test also appears in the owner’s baseline unit TAP: old tag normalization/spelling expectations, legacy subject expectations, table inventory, runtime-import scanner, and the repository-wide handwritten-axis scanner. These are outside the assigned acceptance failures and were not relaxed or deleted. This is not a claim that the repository’s unit suite is green.