feat: the sharper end-to-end method — scope move, instructions, sharper exports, guided fanout (0.16.0, #53 t1-t14)#58
Conversation
Task gains an optional verbatim `instruction` field (default "" = none); PLAN_SCHEMA_VERSION bumps 1 -> 2. from_dict defaults the field for pre-existing (v1) task dicts, so legacy plans keep loading unchanged. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…53 t1] Adds Frame.scope_entries (new ScopeEntry: id/surface/finding/seeds, with seed-id validation against existing claims) and an optional verbatim Claim.instruction / HonestyCondition.instruction field (empty string means "no instruction"). Bumps SCHEMA_VERSION 1->2; loading a v1 frame with none of the new fields still succeeds with empty defaults, and a newer-than-supported schema_version keeps failing closed. Also fixes tests/test_cli_moves.py::test_load_newer_schema_errors_cleanly, whose string-replace assumed a hardcoded schema_version of 1; it now edits the JSON structurally so it stays correct across future schema bumps. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Adds the deterministic `devague scope` verb: records a surface + finding as first-class Frame state (t1's ScopeEntry model), with optional `--seeds <claim-id>` provenance links. Unknown seed ids are refused transactionally with a hint. `scope --list`/bare `scope` render recorded entries (text or --json). No LLM calls, no subprocess — recording only. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… t8] Add a new non-blocking warning to the plan convergence gate that flags confirmed tasks with empty instruction fields. The warning is advisory and does not affect ready_for_plan status; it reminds operators to attach working guidance via `devague plan instruct <taskId> "<text>"`. Tests: - 9 new tests in test_plan_convergence_sharper.py covering instruction warnings - All 318 tests pass (309 baseline + 9 new) - Existing test helpers updated to set default instructions for convergence Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…tions [#53 t4] capture --instruction and interrogate --instruction store the instruction verbatim on the item (interrogate accepts a claim OR honesty-condition id for this flag). Changing the instruction on a confirmed claim or honesty condition flips its status back to proposed with a stderr note explaining why, so the user re-confirms (gate-2 review); setting it on an already-proposed item leaves status as-is. devague review (text + --json) now lists each proposed item's instruction alongside it; items without one render unchanged. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Adds --instruction to `plan task` (stores verbatim on the new task) and a new `devague plan instruct <tN> "<text>"` move that adds/updates a task's instruction after the fact. Setting or changing the instruction on a CONFIRMED task flips it back to 'proposed' (stderr note + JSON `flipped` flag) so the user re-confirms — the instruction is part of what was confirmed. `plan show --json` already carried it via the generic dataclasses.asdict serialization; no renderer/model changes needed. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Add two warning-only structural-sharpness rules to the frame gate (soft rollout per the resolved parked-v2 decision — no frame that converges today is newly blocked; all new signals land in `warnings`): - S1: a confirmed spec-affecting claim with an empty instruction draws a per-claim warning naming its id and the fixing move. - S2: a frame with >=1 confirmed success_signal claim but none carrying a measurable token (numeral / % / comparator) draws one warning. Both are pure predicates over frame state — never LLM judgment (h6) — and are enumerated with predicate + false-positive modes in the module docstring. Covers c5, h10, h6. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…53 t6] Renders a nested `- instruction: <verbatim text>` bullet under any claim or honesty condition that carries one (in both spec-md and frame-md); an item without an instruction renders exactly as before. Adds a `## Scope exploration` section listing each frame.scope_entries record (id, surface, finding, seeded claim ids), omitted entirely when there are no entries. Implements decision c14 / requirements c11+c10, covering h4, h3, h2, h12, c8, c3. Golden-file tests pin both the new shape and byte-identical no-instruction output. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…uctions, schema v2 [#53 t12] Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… t9] Extend the plan-md renderer with a per-task `- instruction: <verbatim text>` bullet (mirroring t6's spec-md/frame-md idiom; nothing renders when a task carries none), and enrich `devague plan waves --json` with a new top-level `tasks` key carrying each active task's summary, instruction, acceptance criteria, and covered targets — enough for a subagent brief with no external context. Existing `plan`/`waves` keys and text-mode output stay unchanged. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… move [#53 t10] devague learn now teaches the optional-but-recommended scope-exploration lead-in (recommended when an idea touches an existing codebase, freely skippable for small ones per the recorded non-goal c7 — never a mandatory first stage) with the real, shipped `devague scope` syntax, plus a note on the --instruction flags and how they carry to the plan handoff (`plan task --instruction` / `plan instruct`). The ten numbered guided stages are unchanged (it is a lead-in, not an eleventh stage). MOVES gains `scope`, `question`, and `review` — the three frame-side moves `devague explain` didn't know about — so `devague explain scope` and `devague explain question` now resolve (explain.py itself needed no change: it already reads MOVES dynamically). cli/_status.py is untouched: the frame-empty hint text that could plausibly mention the scope survey lives in cli/_commands/status.py, which is outside this task's declared file scope (and shared with the forbidden plan.py via the same StatusLabels mechanism), so no natural, safe extension point exists without touching out-of-scope files. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ace [#53 t11] /think now documents the shipped `devague scope` move (with --seeds) as the scope stage's primary landing surface, capture/interrogate --instruction, the confirmed->proposed re-confirm rule, and the two deterministic gate warnings (missing instruction, non-measurable success_signal), plus a worked example exercising all of it. /spec-to-plan documents `plan task --instruction` / `plan instruct <tN>`, replaces the "acceptance criteria are the instruction contract until t5 lands" coaching with the shipped split (acceptance criteria = testable contract, instruction = working guidance), the plan-gate instruction warning, and the enriched `waves --json` payload's `tasks` object shape (pinned contract for the sibling t9 shipping in this same build wave). /scope now teaches `devague scope` as the primary way findings land (ScopeEntry state with provenance-citing seeds) instead of the prior "planned, not shipped, do not run" caveat; capture-only landing is documented as the fallback for boundary/non-goal/requirement/assumption claims. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ad [#53 t13] split-plan now parses `devague plan waves --json`'s tasks payload (t9) and renders each task's real summary, whether it carries an instruction, and its acceptance-criteria count — replacing the "(see plan export...)" placeholder. SKILL.md documents the payload shape and makes `waves --json` the single, verbatim source for every subagent brief (summary + instruction + acceptance criteria + covers) — the operator-paraphrase step and the stale plan-show/plan-md fallback language are gone from the fan-out step. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
/agentic_review |
…onar S3776, PR 58) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
PR Summary by QodoShip sharper end-to-end method: scope entries, per-item instructions, enriched waves
AI Description
Diagram
High-Level Assessment
Files changed (43)
|
|




What
The sharper end-to-end method ships (0.16.0) — the full #53 build plan
(t1–t14), executed as a devague-orchestrated workforce fan-out: 5 dependency
waves from
devague plan waves, one agent per task in an isolated worktree,every merge TDD-gated (full suite green before and after), no human in the
per-task loop per the approved implementation split plan.
devague scope— records explored surfaces as first-classScopeEntrystate (surface, finding,
--seedsclaim links; unknown ids refused);scope --list [--json]reads them back. (t1, t3)instructiontext on claims, honestyconditions, and plan tasks (
capture --instruction,interrogate <c*|h*> --instruction,plan task --instruction,new
plan instruct <tN>); changing one on a confirmed item flips it back toproposedfor re-confirmation. (t2, t4, t5)spec/frame/plan markdown, golden-file tested; absent instructions render
nothing. (t6, t9)
waves --json— top-leveltasksobject(
summary/instruction/acceptance_criteria/coversper id): aself-contained subagent brief; existing keys unchanged. The
assign-to-workforce skill + split-plan script now brief verbatim from it —
the operator-paraphrase step is gone. (t9, t13)
deterministic predicates): instruction-less spec-affecting claims,
non-measurable success signals, instruction-less confirmed tasks. (t7, t8)
learnpresents the optional scope stage;explain scope/explain questionfixed; /think, /spec-to-plan, /scope SKILL.md teach theshipped surface (verified live by the doc agent). (t10, t11, t12)
unpark move) runs scope → frame → sharper spec → plan → fanout brief on the
shipped surface; the audit pins no LLM imports / no process spawning in the
package (Expose plan dependency waves as deterministic metadata, not orchestration #20). (t14)
Both schemas bump 1 → 2, fail-closed, with empty-default hydration of v1
files.
Evidence
bandit -r devague/: no issues identified. flake8/black/isort: clean.markdownlint-cli2clean on CHANGELOG + the three updated docs.Notes
Merge order: independent of spec+plan: multi-repo efforts — hub-repo state, repo-tagged tasks, per-repo PRs (0.15.1) #56 (multi-repo spec+plan, 0.15.1); whichever
merges second keeps the version monotonic (0.15.1 < 0.16.0).
This unblocks the multi-repo plan's r1 precondition (spec+plan: multi-repo efforts — hub-repo state, repo-tagged tasks, per-repo PRs (0.15.1) #56): its t1/t3 ride
the instruction fields + enriched waves payload shipped here.
devague (Claude)