BOHICA-LABS / BOHICA-LABS/vsdd-factory
enhancement(phase-1d): add decision-registry pre-flight to formalize conventions before adversarial review
- Dominant language
- Rust
- Stars
- 2
- Forks
- 1
- Avg merge
- 6h 43m
- Merged PRs (30d)
- 29
Description
## Summary
Many of the recurring drift classes that the adversary catches across multiple Phase 1d passes are not "bugs" in the traditional sense — they are **unregistered conventions**. Multiple agents writing the spec at different times made independent valid choices, and the adversary catches the divergence as "drift" when it's really "no canonical rule yet exists."
Examples from the ftc-blue Phase 1d cycle:
- `era_id` naming: zones.md author wrote `"text-adventure"`; BC-3.03.002 author wrote `text_catacombs`. Both forms are valid in isolation. No registry entry pinned a canonical form (caught pass-9 F-H1).
- NFR label canonicalization: BC bodies paraphrased NFR labels in different ways (caught across passes 5, 6, 7).
- OQ-NNN namespace ownership: L2-INDEX, L3-PRD §7, and UX-INDEX all used bare `OQ-NNN` identifiers with different meanings (caught pass-7 H-2, pass-9 F-H2).
- Save-schema field paths: top-level vs nested-under-zone (caught passes 6, 7, 8, 9).
- DI-NNN namespace ownership: ARCH-INDEX §5 introduced DI-009/010 without L2-INDEX registration (caught passes 7, 8).
In every case, the convention was registered RETROACTIVELY after the adversary caught the drift. That registration would have prevented the drift entirely had it happened before adversarial review began.
## Proposed change
Add a "decision-registry pre-flight" step at the start of Phase 1d (or potentially at the end of Phase 1, before Phase 1d adversarial begins). The step:
1. Spawns an agent (or skill) that scans the entire spec corpus.
2. Identifies all "convention-shaped" patterns: identifier namespaces (XX-NNN forms), naming schemes (snake_case vs kebab-case for identifiers), field nesting conventions in canonical schemas, version-pinning syntax, error code prefixes, etc.
3. For each pattern, either (a) reads its canonical form from an existing decision-registry.yaml entry, or (b) flags it as unregistered.
4. For each unregistered pattern, dispatches the responsible owner (architect / product-owner / spec-steward) to formalize and register.
The output: a decision-registry.yaml with comprehensive coverage of all conventions in use, BEFORE the adversary starts looking for drift.
## Applies to
- New skill: `/vsdd-factory:decision-registry-preflight` (or extend the existing `/vsdd-factory:policy-registry` skill)
- `workflows/phases/phase-1d-adversarial-spec-review.lobster` — add the pre-flight step
- `agents/spec-steward.md` — owner of the registry
## Acceptance criteria
- [ ] Skill that scans spec corpus for convention patterns
- [ ] Skill produces a list of registered + unregistered conventions
- [ ] Workflow integration into Phase 1d (or Phase 1 close)
- [ ] Reduces recurring-convention-drift findings in subsequent adversarial passes by ≥50% (measured on a real cycle)
## Found during
ftc-blue Phase 1d adversarial cycle (2026-06-23, vsdd-factory@1.0.0-rc.21). Cumulative: 5 passes, ~10 drift findings that would have been prevented by upfront convention registration.
## Notes
This is one of the highest-leverage improvements identified during the ftc-blue cycle. It converts content-drift into mechanical-drift (lint-catchable) and front-loads the conventions discussion to a single design conversation, rather than spreading it across N adversarial passes.
Contributor guide
Assessment
This issue has not been assessed yet.