BOHICA-LABS / BOHICA-LABS/vsdd-factory

bug(architect): hallucinated internal/ packages declared in ARCH-08 §6.5 — story stubs read as current-state

Open
#272 2 comments 0 reactions 0 assignees View on GitHub
Dominant language
Rust
Stars
2
Forks
1
Avg merge
6h 43m
Merged PRs (30d)
29

Description

## Summary

During Wave 3 planning on switchboard-blue, the `vsdd-factory:architect` agent was dispatched to refresh ARCH-08 (dependency graph) and identify which new internal/ packages Wave 3 would introduce. The agent produced ARCH-08 v1.2 §6.5 — a "full Wave 1–3 topological table" — declaring positions 1–16 for the internal/ packages and labeling them "Wave 1" or "Wave 2" or "Wave 3" as their introduction wave.

**The actual `internal/` package count on develop is 5: {admission, frame, halfchannel, hmac, routing}.**

The architect's §6.5 declared positions for 11 packages that do not exist anywhere in the codebase: `internal/paths`, `arq`, `replay`, `multipath`, `metrics`, `tmux`, `discovery`, `svtnmgmt`, `drain`, `config`, `session`. Several of these were labeled "Wave 2" — implying they are already implemented and merged. They are not.

## How the architect arrived at this output

The dispatch prompt instructed the architect to "read existing ARCH docs" and "identify Wave 3 packages" by inspecting "S-3.01..S-3.03 story stubs". The story stubs (in `.factory/stories/`) and the original wave-schedule (`.factory/specs/prd-supplements/wave-schedule.md`) reference these package names as PLANNED future packages. The architect treated these planning references as evidence that the packages already exist.

The orchestrator's verification — `ls internal/` followed by `grep -rn "switchboard/internal/" --include="*.go" internal/` — would have caught this in <2 seconds. The architect did not perform that verification, even though the dispatch prompt explicitly said "Verify against code reality."

## Impact if undetected

1. **Story-writer would generate file structures citing packages that don't exist** ("create internal/tmux/control.go" — wrong directory).
2. **Implementer would import non-existent packages** and the build would fail.
3. **Consistency-validator** at the next gate would find the ARCH spec lying about reality.
4. **Future orchestrator runs** would treat positions 6–16 as authoritative, propagating the hallucination.

The orchestrator caught it on this run by verifying `ls internal/` before dispatching story-writer, but only because it explicitly suspected the architect's output. A less paranoid orchestrator could have missed it.

## Recommendation

The architect agent's system prompt should require:
1. **Run `ls internal/` (or equivalent for the language) BEFORE writing any §6 table entries.**
2. **Run `grep` for actual imports BEFORE claiming "Wave N introduced package X".**
3. **Separate "current state" tables from "planned future" tables** — never co-mingle.
4. **Treat story stubs as DESIRED state, never as PROVEN state.**

Also: this is the same pattern class as #260 (drift-deferral) and #263 (PO overreach) — agents making confident claims about state they did not verify. The hooks/guardrails approach proposed in #260 could plausibly catch this too (pre-commit hook on factory-artifacts that runs `bin/lobster-parse` or `ls internal/` and compares to what the diff claims).

## Reproduction

Switchboard-blue session `b8690230-7b5d-4e57-b71c-8b9ffeee3d9a`, transcript snapshot around the architect-burst dispatch for Wave 3. Commit `e6aa5ba` on `factory-artifacts` is the hallucinated output. Subsequent corrective re-dispatch will bump ARCH-08 v1.2→v1.3.

## Related

- drbothen/vsdd-factory#260 — agent-side overreach class
- drbothen/vsdd-factory#263 — PO overreach + structural gap class
- This issue is the third agent-overreach pattern in <10 days of switchboard-blue work

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.