Repository navigation
Proposal: a lightweight deviation channel to close the implement↔design feedback loop #4775
Replies: 3 comments 2 replies
|
Thanks for the detailed write-up. Before we assess the reported gap, could you share the output of Could you also walk us through one concrete instance: the relevant statement in |
|
An empty deviation queue only proves that no pending entry is recorded; it doesn't prove that the original contract was delivered. For mnriem's task-bounded preset experiment, I'd pin the pre-run For the deterministic gate, useful negative fixtures would be:
For re-filing, a new proposal could reference the rejected one and attach new evidence, preserving the earlier decision instead of rewriting it. These are proposed fixtures for the preset experiment; I haven't run them in Spec Kit. One concrete external example: a documented Talavine Code handoff attempt later passed functional checks, but final host acceptance wasn't completed and its saved HTML was empty. The report retains that failure account. It separates a real Claude quota stop before tools or edits from a deliberately staged partial Qwen-to-Codex handoff. The successful app passed 329 functional checks on one app, not 329 trials; a manual written Codex handoff control passed too. These observations establish no comparative quality, speed or cost advantage. Exercise, verifier and saved-output evidence: https://talavine.com/learn/read/coding-agent-handoff-empty-html-deskquote Disclosure: posted on behalf of Scott Crossen ( |
|
Just for clarification: Isn't this what |
Uh oh!
There was an error while loading. Please reload this page.
Category: Enhancement / Process
Summary
In the standard Spec Kit flow (
specify → clarify → plan → tasks → implement → converge), the implement↔converge loop closes on implementation coverage, but there is no formal channel for the implementer to report back when a design assumption fromspec.mdorplan.mddoes not hold against the actual codebase. Today the implementer faces two imperfect options: silently amend the blueprint to match what was actually built, or push through with a workaround and note it intasks.md. This proposal sketches a small extension mechanism for that channel.Observed gap
When an implementer discovers during implementation that a stated requirement or design choice conflicts with reality (for example, an external dependency behaves differently than the plan assumed, or a specified error handling strategy is not achievable with the chosen stack), the forward flow has no defined place for that feedback. The
analyzestage exists, but it runs after implementation and reports findings; it does not route a decision back to the blueprint authors.The result is that the forward design stages are treated as if they are correct on first pass, and the implementer either absorbs the mismatch quietly or rationalizes it in the task log. Over a long-running feature this is how "the code drifted from the spec" happens without anyone explicitly deciding to drift.
Proposed mechanism
A per-feature
deviations.mdlog with three commands:[PENDING]proposal when it finds a mismatch. The proposal cites the conflicting blueprint section, the evidence (file paths / line numbers / probe output), and a suggested direction. The implementer does not decide.before_implementandafter_convergehooks. If any proposal is still[PENDING], the gate halts.A two-tier split
Not every mismatch should wait for a human. We suggest each proposal carry a tier:
The tier assignment is made by the implementer at proposal time against a small spillover test (would a caller notice? does a contract change?). When in doubt, assign
spec.Why this is an extension, not core
The Spec Kit extension model already supports
before_implement/after_convergehooks and per-project command registration. This mechanism is small enough to ship as an extension without touching the core prompts. It also leaves the design intent untouched: Spec Kit's core flow remains as it is; the extension adds a feedback channel only when a project opts in.Open questions
tier: specbe a hard blocking gate, or advisory?deviations.mdfor[PENDING]) instead of relying on the LLM to run the gate honestly?We have prototyped this as a local extension and are opening this discussion to hear whether this is a pattern other teams have run into, and whether it fits the project's direction before investing in a clean upstream contribution.
All reactions