BOHICA-LABS / BOHICA-LABS/vsdd-factory
process-gap(product-owner+story-writer): Fix Phase 2 spec propagation gap — spec-side fix lands but story body/AC prose retains contradicting language
- Dominant language
- Rust
- Stars
- 2
- Forks
- 1
- Avg merge
- 6h 43m
- Merged PRs (30d)
- 29
Description
## Defect class
Fix Phase pattern in the current factory:
1. Adversary finds a defect on a per-story review pass
2. Fix Phase 1a: product-owner + architect update BC/spec artifacts (versioned bump on factory-artifacts branch)
3. Fix Phase 1b: story-writer propagates BC changes to story body / AC prose
4. Fix Phase 2: implementer + test-writer address impl/test-side gaps
**Observed failure mode**: Fix Phase 1a lands the spec-side changes correctly, but Fix Phase 1b's story-writer does **not** consistently propagate every changed BC term back into the story body prose, §Implementation Guidance, §Notes, §Known-issues. The story becomes internally contradictory: frontmatter/changelog say v1.N, ACs reference the new BC terms, but §Notes still uses the old terminology.
## Observed real-world failure
Wave 3 Batch 2 on ftc-blue, multiple stories over multiple passes:
- \`STORY-5.05.002\` Fix Phase 2 landed `solutions` as canonical term in BC-5.05.002 v1.4. Story v1.2 AC-004 updated but §Notes still said \`solution_paths\`. Only caught in Pass 2 adversary as F-P2-I2 (stale BC-DRIFT-CHECK comment) — but the drift itself had been present for one full convergence pass.
- \`STORY-5.05.005\` v1.3 was authored *during* Fix Phase 3 with §Known-issues describing debt that the same commit resolved. Pass 3 F-P2-H2 caught it — but only because the adversary looked at the code AND the story simultaneously.
- \`STORY-5.05.002\` Pass 3 F-P3-H2: story v1.3 §Known-issues declared \"F-MOD-6 sibling test debt: BC-5.05.002 AC-5/AC-6 currently have no dedicated tests\" — the same commit added those tests. Fix Phase 3 propagation gap.
## Why this happens
The story-writer's Fix Phase 1b dispatch prompt currently focuses on frontmatter + changelog + ACs. It doesn't have a **body-prose sweep** step. When a BC term changes:
- Frontmatter version pin bumps ✓
- Changelog entry added ✓
- AC prose that names the term explicitly updated ✓
- §Notes / §Implementation Guidance / §Known-issues sections referencing the term via examples, code snippets, informal narrative — **often missed** ✗
Since Pass 2/3 adversaries have fresh context, they surface the drift. But the story goes through at least one convergence pass in a self-contradictory state.
## What's needed
1. Update `agents/story-writer.md` Fix Phase 1b constraints to explicitly enumerate a **full-body sweep** requirement: on any BC term change, grep the entire story file for that term (including all synonyms captured in the BC-DRIFT-CHECK comments) and reconcile.
2. Add a **story-writer self-review pass**: after edits, produce a diff-vs-BC summary showing every term the BC mentions and where in the story it appears (or is intentionally absent).
3. Add a **consistency-validator gate** post-story-writer that greps the story body for old-term-vs-new-term drift before releasing for adversary re-run.
4. Codify **L-W3-YY-SPEC-PROPAGATION**: \"Spec changes must propagate to ALL story body sections (Notes, Implementation Guidance, Known-issues, examples), not only frontmatter/changelog/ACs. A story-writer that only updates frontmatter is producing an internally-contradictory artifact.\"
## Related
- #216 enumerate-before-fix sweep template
- #287 /vsdd-factory:check-bc-version-propagation skill — 9-site checklist; this is the same idea but focused on story bodies specifically
- #390 fix-and-bump-in-same-commit re-creates stale self-refs — same class
- #430 body-prose ↔ impl-symbol drift persists across POL gates — very close class; this may be a special case of #430
## Priority
MEDIUM-HIGH — occurs almost every Fix Phase in Wave 3 Batch 2. Wastes a convergence pass every time.
Contributor guide
Assessment
This issue has not been assessed yet.