devague 0.14.0__tar.gz → 0.14.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. devague-0.14.1/.devague/current_plan +1 -0
  2. devague-0.14.1/.devague/frames/devague-ships-a-sharper-end-to-end-method-a-guided.json +276 -0
  3. devague-0.14.1/.devague/plans/devague-ships-a-sharper-end-to-end-method-a-guided.json +402 -0
  4. {devague-0.14.0 → devague-0.14.1}/CHANGELOG.md +13 -0
  5. {devague-0.14.0 → devague-0.14.1}/PKG-INFO +1 -1
  6. devague-0.14.1/docs/plans/2026-07-01-devague-ships-a-sharper-end-to-end-method-a-guided.md +118 -0
  7. devague-0.14.1/docs/specs/2026-07-01-devague-ships-a-sharper-end-to-end-method-a-guided.md +66 -0
  8. {devague-0.14.0 → devague-0.14.1}/pyproject.toml +1 -1
  9. {devague-0.14.0 → devague-0.14.1}/uv.lock +1 -1
  10. devague-0.14.0/.devague/current_plan +0 -1
  11. {devague-0.14.0 → devague-0.14.1}/.claude/skills/agent-config/SKILL.md +0 -0
  12. {devague-0.14.0 → devague-0.14.1}/.claude/skills/agent-config/data/backend-fingerprints.yaml +0 -0
  13. {devague-0.14.0 → devague-0.14.1}/.claude/skills/agent-config/scripts/show.sh +0 -0
  14. {devague-0.14.0 → devague-0.14.1}/.claude/skills/assign-to-workforce/SKILL.md +0 -0
  15. {devague-0.14.0 → devague-0.14.1}/.claude/skills/assign-to-workforce/scripts/assign-to-workforce.sh +0 -0
  16. {devague-0.14.0 → devague-0.14.1}/.claude/skills/cicd/SKILL.md +0 -0
  17. {devague-0.14.0 → devague-0.14.1}/.claude/skills/cicd/scripts/_resolve-nick.sh +0 -0
  18. {devague-0.14.0 → devague-0.14.1}/.claude/skills/cicd/scripts/portability-lint.sh +0 -0
  19. {devague-0.14.0 → devague-0.14.1}/.claude/skills/cicd/scripts/pr-reply.sh +0 -0
  20. {devague-0.14.0 → devague-0.14.1}/.claude/skills/cicd/scripts/pr-status.sh +0 -0
  21. {devague-0.14.0 → devague-0.14.1}/.claude/skills/cicd/scripts/workflow.sh +0 -0
  22. {devague-0.14.0 → devague-0.14.1}/.claude/skills/communicate/SKILL.md +0 -0
  23. {devague-0.14.0 → devague-0.14.1}/.claude/skills/communicate/scripts/fetch-issues.sh +0 -0
  24. {devague-0.14.0 → devague-0.14.1}/.claude/skills/communicate/scripts/mesh-message.sh +0 -0
  25. {devague-0.14.0 → devague-0.14.1}/.claude/skills/communicate/scripts/post-comment.sh +0 -0
  26. {devague-0.14.0 → devague-0.14.1}/.claude/skills/communicate/scripts/post-issue.sh +0 -0
  27. {devague-0.14.0 → devague-0.14.1}/.claude/skills/communicate/scripts/templates/skill-new-brief.md +0 -0
  28. {devague-0.14.0 → devague-0.14.1}/.claude/skills/communicate/scripts/templates/skill-update-brief.md +0 -0
  29. {devague-0.14.0 → devague-0.14.1}/.claude/skills/doc-test-alignment/SKILL.md +0 -0
  30. {devague-0.14.0 → devague-0.14.1}/.claude/skills/doc-test-alignment/scripts/check.sh +0 -0
  31. {devague-0.14.0 → devague-0.14.1}/.claude/skills/pypi-maintainer/SKILL.md +0 -0
  32. {devague-0.14.0 → devague-0.14.1}/.claude/skills/pypi-maintainer/scripts/switch-source.sh +0 -0
  33. {devague-0.14.0 → devague-0.14.1}/.claude/skills/recall/SKILL.md +0 -0
  34. {devague-0.14.0 → devague-0.14.1}/.claude/skills/recall/scripts/recall.sh +0 -0
  35. {devague-0.14.0 → devague-0.14.1}/.claude/skills/remember/SKILL.md +0 -0
  36. {devague-0.14.0 → devague-0.14.1}/.claude/skills/remember/scripts/remember.sh +0 -0
  37. {devague-0.14.0 → devague-0.14.1}/.claude/skills/run-tests/SKILL.md +0 -0
  38. {devague-0.14.0 → devague-0.14.1}/.claude/skills/run-tests/scripts/test.sh +0 -0
  39. {devague-0.14.0 → devague-0.14.1}/.claude/skills/sonarclaude/SKILL.md +0 -0
  40. {devague-0.14.0 → devague-0.14.1}/.claude/skills/sonarclaude/scripts/sonar.sh +0 -0
  41. {devague-0.14.0 → devague-0.14.1}/.claude/skills/spec-to-plan/SKILL.md +0 -0
  42. {devague-0.14.0 → devague-0.14.1}/.claude/skills/spec-to-plan/scripts/spec-to-plan.sh +0 -0
  43. {devague-0.14.0 → devague-0.14.1}/.claude/skills/think/SKILL.md +0 -0
  44. {devague-0.14.0 → devague-0.14.1}/.claude/skills/think/scripts/think.sh +0 -0
  45. {devague-0.14.0 → devague-0.14.1}/.claude/skills/version-bump/SKILL.md +0 -0
  46. {devague-0.14.0 → devague-0.14.1}/.claude/skills/version-bump/scripts/bump.py +0 -0
  47. {devague-0.14.0 → devague-0.14.1}/.claude/skills.local.yaml.example +0 -0
  48. {devague-0.14.0 → devague-0.14.1}/.devague/frames/devague-0-6-0-ships-the-human-review-loop-devague.json +0 -0
  49. {devague-0.14.0 → devague-0.14.1}/.devague/frames/devague-now-ships-a-documented-spec-contract-every.json +0 -0
  50. {devague-0.14.0 → devague-0.14.1}/.devague/frames/devague-turns-a-converged-plan-into-parallel-simpl.json +0 -0
  51. {devague-0.14.0 → devague-0.14.1}/.devague/plans/devague-0-6-0-ships-the-human-review-loop-devague.json +0 -0
  52. {devague-0.14.0 → devague-0.14.1}/.devague/plans/devague-now-ships-a-documented-spec-contract-every.json +0 -0
  53. {devague-0.14.0 → devague-0.14.1}/.devague/plans/devague-turns-a-converged-plan-into-parallel-simpl.json +0 -0
  54. {devague-0.14.0 → devague-0.14.1}/.flake8 +0 -0
  55. {devague-0.14.0 → devague-0.14.1}/.github/workflows/publish.yml +0 -0
  56. {devague-0.14.0 → devague-0.14.1}/.github/workflows/security-checks.yml +0 -0
  57. {devague-0.14.0 → devague-0.14.1}/.github/workflows/tests.yml +0 -0
  58. {devague-0.14.0 → devague-0.14.1}/.gitignore +0 -0
  59. {devague-0.14.0 → devague-0.14.1}/.markdownlint-cli2.yaml +0 -0
  60. {devague-0.14.0 → devague-0.14.1}/.pre-commit-config.yaml +0 -0
  61. {devague-0.14.0 → devague-0.14.1}/CLAUDE.md +0 -0
  62. {devague-0.14.0 → devague-0.14.1}/LICENSE +0 -0
  63. {devague-0.14.0 → devague-0.14.1}/README.md +0 -0
  64. {devague-0.14.0 → devague-0.14.1}/culture.yaml +0 -0
  65. {devague-0.14.0 → devague-0.14.1}/devague/__init__.py +0 -0
  66. {devague-0.14.0 → devague-0.14.1}/devague/__main__.py +0 -0
  67. {devague-0.14.0 → devague-0.14.1}/devague/cli/__init__.py +0 -0
  68. {devague-0.14.0 → devague-0.14.1}/devague/cli/_commands/__init__.py +0 -0
  69. {devague-0.14.0 → devague-0.14.1}/devague/cli/_commands/capture.py +0 -0
  70. {devague-0.14.0 → devague-0.14.1}/devague/cli/_commands/confirm.py +0 -0
  71. {devague-0.14.0 → devague-0.14.1}/devague/cli/_commands/converge.py +0 -0
  72. {devague-0.14.0 → devague-0.14.1}/devague/cli/_commands/explain.py +0 -0
  73. {devague-0.14.0 → devague-0.14.1}/devague/cli/_commands/export.py +0 -0
  74. {devague-0.14.0 → devague-0.14.1}/devague/cli/_commands/interrogate.py +0 -0
  75. {devague-0.14.0 → devague-0.14.1}/devague/cli/_commands/learn.py +0 -0
  76. {devague-0.14.0 → devague-0.14.1}/devague/cli/_commands/list_frames.py +0 -0
  77. {devague-0.14.0 → devague-0.14.1}/devague/cli/_commands/new.py +0 -0
  78. {devague-0.14.0 → devague-0.14.1}/devague/cli/_commands/park.py +0 -0
  79. {devague-0.14.0 → devague-0.14.1}/devague/cli/_commands/plan.py +0 -0
  80. {devague-0.14.0 → devague-0.14.1}/devague/cli/_commands/question.py +0 -0
  81. {devague-0.14.0 → devague-0.14.1}/devague/cli/_commands/reject.py +0 -0
  82. {devague-0.14.0 → devague-0.14.1}/devague/cli/_commands/review.py +0 -0
  83. {devague-0.14.0 → devague-0.14.1}/devague/cli/_commands/show.py +0 -0
  84. {devague-0.14.0 → devague-0.14.1}/devague/cli/_commands/status.py +0 -0
  85. {devague-0.14.0 → devague-0.14.1}/devague/cli/_errors.py +0 -0
  86. {devague-0.14.0 → devague-0.14.1}/devague/cli/_frames.py +0 -0
  87. {devague-0.14.0 → devague-0.14.1}/devague/cli/_output.py +0 -0
  88. {devague-0.14.0 → devague-0.14.1}/devague/cli/_paths.py +0 -0
  89. {devague-0.14.0 → devague-0.14.1}/devague/cli/_plans.py +0 -0
  90. {devague-0.14.0 → devague-0.14.1}/devague/cli/_status.py +0 -0
  91. {devague-0.14.0 → devague-0.14.1}/devague/convergence.py +0 -0
  92. {devague-0.14.0 → devague-0.14.1}/devague/frame.py +0 -0
  93. {devague-0.14.0 → devague-0.14.1}/devague/plan.py +0 -0
  94. {devague-0.14.0 → devague-0.14.1}/devague/plan_convergence.py +0 -0
  95. {devague-0.14.0 → devague-0.14.1}/devague/plan_store.py +0 -0
  96. {devague-0.14.0 → devague-0.14.1}/devague/questions_io.py +0 -0
  97. {devague-0.14.0 → devague-0.14.1}/devague/render/__init__.py +0 -0
  98. {devague-0.14.0 → devague-0.14.1}/devague/render/frame_md.py +0 -0
  99. {devague-0.14.0 → devague-0.14.1}/devague/render/plan_md.py +0 -0
  100. {devague-0.14.0 → devague-0.14.1}/devague/render/review_md.py +0 -0
  101. {devague-0.14.0 → devague-0.14.1}/devague/render/spec_md.py +0 -0
  102. {devague-0.14.0 → devague-0.14.1}/devague/store.py +0 -0
  103. {devague-0.14.0 → devague-0.14.1}/docs/assign-to-workforce-worked-example.md +0 -0
  104. {devague-0.14.0 → devague-0.14.1}/docs/examples/contract-example.json +0 -0
  105. {devague-0.14.0 → devague-0.14.1}/docs/llm-guidance.md +0 -0
  106. {devague-0.14.0 → devague-0.14.1}/docs/plans/2026-05-23-devague-0-6-0-ships-the-human-review-loop-devague.md +0 -0
  107. {devague-0.14.0 → devague-0.14.1}/docs/plans/2026-05-23-devague-now-ships-a-documented-spec-contract-every.md +0 -0
  108. {devague-0.14.0 → devague-0.14.1}/docs/plans/2026-05-23-devague-turns-a-converged-plan-into-parallel-simpl.md +0 -0
  109. {devague-0.14.0 → devague-0.14.1}/docs/reviews/spec-contract-frame-review.md +0 -0
  110. {devague-0.14.0 → devague-0.14.1}/docs/skill-sources.md +0 -0
  111. {devague-0.14.0 → devague-0.14.1}/docs/skills.md +0 -0
  112. {devague-0.14.0 → devague-0.14.1}/docs/spec-contract.md +0 -0
  113. {devague-0.14.0 → devague-0.14.1}/docs/specs/2026-05-23-devague-0-6-0-ships-the-human-review-loop-devague.md +0 -0
  114. {devague-0.14.0 → devague-0.14.1}/docs/specs/2026-05-23-devague-now-ships-a-documented-spec-contract-every.md +0 -0
  115. {devague-0.14.0 → devague-0.14.1}/docs/specs/2026-05-23-devague-turns-a-converged-plan-into-parallel-simpl.md +0 -0
  116. {devague-0.14.0 → devague-0.14.1}/docs/superpowers/plans/2026-05-22-specifix-onboarding.md +0 -0
  117. {devague-0.14.0 → devague-0.14.1}/docs/superpowers/plans/2026-05-23-devague-rename.md +0 -0
  118. {devague-0.14.0 → devague-0.14.1}/docs/superpowers/plans/2026-05-23-devague-working-backwards-engine.md +0 -0
  119. {devague-0.14.0 → devague-0.14.1}/docs/superpowers/specs/2026-05-22-specifix-onboarding-design.md +0 -0
  120. {devague-0.14.0 → devague-0.14.1}/docs/superpowers/specs/2026-05-23-devague-spec-to-plan-design.md +0 -0
  121. {devague-0.14.0 → devague-0.14.1}/docs/superpowers/specs/2026-05-23-devague-working-backwards-design.md +0 -0
  122. {devague-0.14.0 → devague-0.14.1}/sonar-project.properties +0 -0
  123. {devague-0.14.0 → devague-0.14.1}/tests/__init__.py +0 -0
  124. {devague-0.14.0 → devague-0.14.1}/tests/test_cli_affordances.py +0 -0
  125. {devague-0.14.0 → devague-0.14.1}/tests/test_cli_chassis.py +0 -0
  126. {devague-0.14.0 → devague-0.14.1}/tests/test_cli_converge_export.py +0 -0
  127. {devague-0.14.0 → devague-0.14.1}/tests/test_cli_errors.py +0 -0
  128. {devague-0.14.0 → devague-0.14.1}/tests/test_cli_learn.py +0 -0
  129. {devague-0.14.0 → devague-0.14.1}/tests/test_cli_moves.py +0 -0
  130. {devague-0.14.0 → devague-0.14.1}/tests/test_cli_output.py +0 -0
  131. {devague-0.14.0 → devague-0.14.1}/tests/test_cli_paths.py +0 -0
  132. {devague-0.14.0 → devague-0.14.1}/tests/test_cli_plan.py +0 -0
  133. {devague-0.14.0 → devague-0.14.1}/tests/test_cli_question.py +0 -0
  134. {devague-0.14.0 → devague-0.14.1}/tests/test_cli_review.py +0 -0
  135. {devague-0.14.0 → devague-0.14.1}/tests/test_cli_status.py +0 -0
  136. {devague-0.14.0 → devague-0.14.1}/tests/test_contract.py +0 -0
  137. {devague-0.14.0 → devague-0.14.1}/tests/test_convergence.py +0 -0
  138. {devague-0.14.0 → devague-0.14.1}/tests/test_frame.py +0 -0
  139. {devague-0.14.0 → devague-0.14.1}/tests/test_offline.py +0 -0
  140. {devague-0.14.0 → devague-0.14.1}/tests/test_package.py +0 -0
  141. {devague-0.14.0 → devague-0.14.1}/tests/test_plan.py +0 -0
  142. {devague-0.14.0 → devague-0.14.1}/tests/test_plan_convergence.py +0 -0
  143. {devague-0.14.0 → devague-0.14.1}/tests/test_plan_store.py +0 -0
  144. {devague-0.14.0 → devague-0.14.1}/tests/test_render.py +0 -0
  145. {devague-0.14.0 → devague-0.14.1}/tests/test_render_plan.py +0 -0
  146. {devague-0.14.0 → devague-0.14.1}/tests/test_review_loop_integration.py +0 -0
  147. {devague-0.14.0 → devague-0.14.1}/tests/test_review_loop_invariants.py +0 -0
  148. {devague-0.14.0 → devague-0.14.1}/tests/test_spec_to_plan_skill.py +0 -0
  149. {devague-0.14.0 → devague-0.14.1}/tests/test_store.py +0 -0
  150. {devague-0.14.0 → devague-0.14.1}/tests/test_think_skill.py +0 -0
@@ -0,0 +1 @@
1
+ devague-ships-a-sharper-end-to-end-method-a-guided
@@ -0,0 +1,276 @@
1
+ {
2
+ "slug": "devague-ships-a-sharper-end-to-end-method-a-guided",
3
+ "title": "devague ships a sharper end-to-end method",
4
+ "schema_version": 1,
5
+ "status": "exported",
6
+ "created": "2026-07-01T22:07:23Z",
7
+ "updated": "2026-07-01T22:32:01Z",
8
+ "claims": [
9
+ {
10
+ "id": "c1",
11
+ "kind": "announcement",
12
+ "text": "devague ships a sharper end-to-end method: a guided scope-exploration stage before the announcement frame, per-item instructions on every claim and task, sharper spec and plan exports, and a guided plan-to-fanout leg that carries those instructions to the workforce.",
13
+ "origin": "user",
14
+ "status": "confirmed",
15
+ "honesty_conditions": [
16
+ {
17
+ "id": "h1",
18
+ "text": "an operator can run idea to scope to spec to plan to fanout end-to-end and every handoff carries the per-item instructions without manual re-entry",
19
+ "status": "confirmed"
20
+ }
21
+ ],
22
+ "hard_questions": [
23
+ {
24
+ "id": "q1",
25
+ "text": "does the added scope stage slow the lightweight case \u2014 small ideas that today go announcement to converge in minutes?",
26
+ "resolved": false,
27
+ "blocking": false
28
+ }
29
+ ],
30
+ "links": []
31
+ },
32
+ {
33
+ "id": "c2",
34
+ "kind": "audience",
35
+ "text": "devague operators \u2014 the agent driving /think and /spec-to-plan \u2014 plus the humans who own the three gates, and the per-task workforce subagents who receive the instructions",
36
+ "origin": "llm",
37
+ "status": "confirmed",
38
+ "honesty_conditions": [
39
+ {
40
+ "id": "h7",
41
+ "text": "each named audience actually touches the shipped surface: the operator agent runs the new moves, the gate-owning humans review the sharper artifacts, and workforce subagents receive the instruction payloads",
42
+ "status": "confirmed"
43
+ }
44
+ ],
45
+ "hard_questions": [],
46
+ "links": []
47
+ },
48
+ {
49
+ "id": "c3",
50
+ "kind": "after_state",
51
+ "text": "an idea's scope is explored and mapped before the frame is built; every claim, honesty condition, and plan task can carry its own working instruction; exports read sharp \u2014 every item actionable, no boilerplate; and the plan-to-fanout leg hands the workforce per-task instructions instead of bare summaries",
52
+ "origin": "llm",
53
+ "status": "confirmed",
54
+ "honesty_conditions": [
55
+ {
56
+ "id": "h8",
57
+ "text": "the after-state is observable in one dogfooded run: a real idea goes scope, frame, sharper spec, plan, fanout using only the shipped surface",
58
+ "status": "confirmed"
59
+ }
60
+ ],
61
+ "hard_questions": [],
62
+ "links": []
63
+ },
64
+ {
65
+ "id": "c4",
66
+ "kind": "before_state",
67
+ "text": "today the frame starts cold at the announcement with no scope survey; claims and tasks carry only their summary text; exports leave the reader to re-derive how to act on each item; and plan waves emits task ids whose context assign-to-workforce must reconstruct by hand",
68
+ "origin": "llm",
69
+ "status": "confirmed",
70
+ "honesty_conditions": [
71
+ {
72
+ "id": "h9",
73
+ "text": "the before-state pains are citable gaps in today's code: no scope move exists, neither store has an instruction field, and assign-to-workforce reconstructs task context by hand",
74
+ "status": "confirmed"
75
+ }
76
+ ],
77
+ "hard_questions": [],
78
+ "links": []
79
+ },
80
+ {
81
+ "id": "c5",
82
+ "kind": "why_it_matters",
83
+ "text": "scope grounded up front means convergence measures real coverage instead of vibes, and per-item instructions make every exported artifact executable by a cheaper model without re-deriving the design",
84
+ "origin": "llm",
85
+ "status": "confirmed",
86
+ "honesty_conditions": [
87
+ {
88
+ "id": "h10",
89
+ "text": "coverage reported by the gate maps to scope that was actually explored \u2014 convergence measures explored territory, not just whatever text happened to be captured",
90
+ "status": "confirmed"
91
+ }
92
+ ],
93
+ "hard_questions": [],
94
+ "links": []
95
+ },
96
+ {
97
+ "id": "c6",
98
+ "kind": "boundary",
99
+ "text": "the CLI stays deterministic and non-orchestrating per issue 20: scope exploration is an agent/skill-side stage and fanout guidance lives in the assign-to-workforce skill \u2014 no LLM calls and no orchestration land inside the CLI",
100
+ "origin": "llm",
101
+ "status": "confirmed",
102
+ "honesty_conditions": [
103
+ {
104
+ "id": "h11",
105
+ "text": "the shipped diff contains no LLM calls, no subagent spawning, and no worktree management anywhere inside the devague package",
106
+ "status": "confirmed"
107
+ }
108
+ ],
109
+ "hard_questions": [],
110
+ "links": []
111
+ },
112
+ {
113
+ "id": "c7",
114
+ "kind": "non_goal",
115
+ "text": "not a wizard: scope exploration does not become a mandatory fixed first stage; the move-driven adaptive arc stays intact and small ideas can still skip straight to the announcement",
116
+ "origin": "llm",
117
+ "status": "confirmed",
118
+ "honesty_conditions": [],
119
+ "hard_questions": [],
120
+ "links": []
121
+ },
122
+ {
123
+ "id": "c8",
124
+ "kind": "success_signal",
125
+ "text": "a spec produced with the new process shows scope-exploration provenance on its boundary and non-goal claims; every exported plan task renders an instruction block; and an assign-to-workforce run consumes those instructions as the subagent brief without the operator re-typing context",
126
+ "origin": "llm",
127
+ "status": "confirmed",
128
+ "honesty_conditions": [
129
+ {
130
+ "id": "h12",
131
+ "text": "every success signal is checkable on artifacts alone: the exported spec shows scope provenance, the exported plan renders instruction blocks, and a fanout brief quotes them verbatim",
132
+ "status": "confirmed"
133
+ }
134
+ ],
135
+ "hard_questions": [],
136
+ "links": []
137
+ },
138
+ {
139
+ "id": "c9",
140
+ "kind": "requirement",
141
+ "text": "a scope-exploration stage precedes the frame: before or right after 'new', the operator surveys the repo/context the idea touches and the findings seed boundary, non-goal, and assumption claims that cite what was explored",
142
+ "origin": "llm",
143
+ "status": "confirmed",
144
+ "honesty_conditions": [
145
+ {
146
+ "id": "h2",
147
+ "text": "a frame built with scope exploration contains boundary and non-goal claims that cite the surfaces actually explored \u2014 provenance, not generic disclaimers",
148
+ "status": "confirmed"
149
+ }
150
+ ],
151
+ "hard_questions": [],
152
+ "links": []
153
+ },
154
+ {
155
+ "id": "c10",
156
+ "kind": "requirement",
157
+ "text": "claims and plan tasks accept an optional per-item instruction \u2014 how to verify or implement that item \u2014 stored in frame/plan state and rendered verbatim in exports; an absent instruction renders nothing",
158
+ "origin": "llm",
159
+ "status": "confirmed",
160
+ "honesty_conditions": [
161
+ {
162
+ "id": "h3",
163
+ "text": "instructions round-trip: capture, store, export renders them verbatim; an item without an instruction renders nothing rather than fabricated filler",
164
+ "status": "confirmed"
165
+ }
166
+ ],
167
+ "hard_questions": [
168
+ {
169
+ "id": "q2",
170
+ "text": "LLM-proposed instructions must stay proposed too \u2014 does the user confirm loop scale when every claim and task can carry one?",
171
+ "resolved": false,
172
+ "blocking": false
173
+ }
174
+ ],
175
+ "links": []
176
+ },
177
+ {
178
+ "id": "c11",
179
+ "kind": "requirement",
180
+ "text": "sharper exports: the rendered spec-md and plan-md make every item directly actionable, with the definition of sharper agreed with the user before build",
181
+ "origin": "llm",
182
+ "status": "confirmed",
183
+ "honesty_conditions": [
184
+ {
185
+ "id": "h4",
186
+ "text": "sharper has a written definition the user confirmed before any renderer change lands",
187
+ "status": "confirmed"
188
+ },
189
+ {
190
+ "id": "h6",
191
+ "text": "the tightened gate stays deterministic: it checks structural sharpness signals \u2014 instruction present on spec-affecting items, a measurable success signal, claim text meeting explicit structural rules \u2014 never LLM text judgment inside the CLI",
192
+ "status": "confirmed"
193
+ }
194
+ ],
195
+ "hard_questions": [
196
+ {
197
+ "id": "q3",
198
+ "text": "which structural checks can a deterministic CLI actually run to catch woolly text, and what is the false-positive story when they misfire on legitimate prose?",
199
+ "resolved": false,
200
+ "blocking": false
201
+ }
202
+ ],
203
+ "links": []
204
+ },
205
+ {
206
+ "id": "c12",
207
+ "kind": "requirement",
208
+ "text": "the plan-to-fanout leg is guided end-to-end: plan waves output carries each task's instruction and acceptance criteria, and the assign-to-workforce skill consumes that payload as the per-subagent brief",
209
+ "origin": "llm",
210
+ "status": "confirmed",
211
+ "honesty_conditions": [
212
+ {
213
+ "id": "h5",
214
+ "text": "an assign-to-workforce subagent receives its task's instruction and acceptance criteria in its brief with no operator paraphrasing required",
215
+ "status": "confirmed"
216
+ }
217
+ ],
218
+ "hard_questions": [],
219
+ "links": []
220
+ },
221
+ {
222
+ "id": "c13",
223
+ "kind": "assumption",
224
+ "text": "scope exploration is performed by the operating agent reading the repo and context \u2014 it adds no new CLI dependencies and no LLM calls inside devague",
225
+ "origin": "llm",
226
+ "status": "confirmed",
227
+ "honesty_conditions": [],
228
+ "hard_questions": [],
229
+ "links": []
230
+ },
231
+ {
232
+ "id": "c14",
233
+ "kind": "decision",
234
+ "text": "sharper results means both legs: exports render every item actionable with instruction blocks and no boilerplate, and the convergence gate tightens to flag vague untestable claim text",
235
+ "origin": "user",
236
+ "status": "confirmed",
237
+ "honesty_conditions": [],
238
+ "hard_questions": [],
239
+ "links": []
240
+ },
241
+ {
242
+ "id": "c15",
243
+ "kind": "decision",
244
+ "text": "scope exploration lands as a new deterministic CLI move \u2014 devague scope \u2014 that records explored surfaces and findings as first-class state with provenance; the operating agent performs the actual exploration",
245
+ "origin": "user",
246
+ "status": "confirmed",
247
+ "honesty_conditions": [],
248
+ "hard_questions": [],
249
+ "links": []
250
+ },
251
+ {
252
+ "id": "c16",
253
+ "kind": "decision",
254
+ "text": "per-item instructions attach to both frame claims and plan tasks via an optional instruction field, with a schema_version bump in both stores, flowing spec to plan to fanout",
255
+ "origin": "user",
256
+ "status": "confirmed",
257
+ "honesty_conditions": [],
258
+ "hard_questions": [],
259
+ "links": []
260
+ }
261
+ ],
262
+ "open_vagueness": [
263
+ {
264
+ "id": "v1",
265
+ "text": "the exact stored shape of the scope move's record \u2014 fields, provenance format, how findings link to the claims they seed",
266
+ "kind": "unknown_nonblocking",
267
+ "claim_id": "c15"
268
+ },
269
+ {
270
+ "id": "v2",
271
+ "text": "whether the tightened gate's structural checks land as blockers or as warnings first (a deprecation-style soft rollout)",
272
+ "kind": "unknown_nonblocking",
273
+ "claim_id": "c14"
274
+ }
275
+ ]
276
+ }
@@ -0,0 +1,402 @@
1
+ {
2
+ "slug": "devague-ships-a-sharper-end-to-end-method-a-guided",
3
+ "title": "devague ships a sharper end-to-end method",
4
+ "frame_slug": "devague-ships-a-sharper-end-to-end-method-a-guided",
5
+ "schema_version": 1,
6
+ "status": "exported",
7
+ "created": "2026-07-01T22:22:54Z",
8
+ "updated": "2026-07-01T22:32:31Z",
9
+ "targets": [
10
+ {
11
+ "id": "c1",
12
+ "kind": "announcement",
13
+ "text": "devague ships a sharper end-to-end method: a guided scope-exploration stage before the announcement frame, per-item instructions on every claim and task, sharper spec and plan exports, and a guided plan-to-fanout leg that carries those instructions to the workforce."
14
+ },
15
+ {
16
+ "id": "h1",
17
+ "kind": "honesty",
18
+ "text": "an operator can run idea to scope to spec to plan to fanout end-to-end and every handoff carries the per-item instructions without manual re-entry"
19
+ },
20
+ {
21
+ "id": "c2",
22
+ "kind": "audience",
23
+ "text": "devague operators \u2014 the agent driving /think and /spec-to-plan \u2014 plus the humans who own the three gates, and the per-task workforce subagents who receive the instructions"
24
+ },
25
+ {
26
+ "id": "h7",
27
+ "kind": "honesty",
28
+ "text": "each named audience actually touches the shipped surface: the operator agent runs the new moves, the gate-owning humans review the sharper artifacts, and workforce subagents receive the instruction payloads"
29
+ },
30
+ {
31
+ "id": "c3",
32
+ "kind": "after_state",
33
+ "text": "an idea's scope is explored and mapped before the frame is built; every claim, honesty condition, and plan task can carry its own working instruction; exports read sharp \u2014 every item actionable, no boilerplate; and the plan-to-fanout leg hands the workforce per-task instructions instead of bare summaries"
34
+ },
35
+ {
36
+ "id": "h8",
37
+ "kind": "honesty",
38
+ "text": "the after-state is observable in one dogfooded run: a real idea goes scope, frame, sharper spec, plan, fanout using only the shipped surface"
39
+ },
40
+ {
41
+ "id": "c4",
42
+ "kind": "before_state",
43
+ "text": "today the frame starts cold at the announcement with no scope survey; claims and tasks carry only their summary text; exports leave the reader to re-derive how to act on each item; and plan waves emits task ids whose context assign-to-workforce must reconstruct by hand"
44
+ },
45
+ {
46
+ "id": "h9",
47
+ "kind": "honesty",
48
+ "text": "the before-state pains are citable gaps in today's code: no scope move exists, neither store has an instruction field, and assign-to-workforce reconstructs task context by hand"
49
+ },
50
+ {
51
+ "id": "c5",
52
+ "kind": "why_it_matters",
53
+ "text": "scope grounded up front means convergence measures real coverage instead of vibes, and per-item instructions make every exported artifact executable by a cheaper model without re-deriving the design"
54
+ },
55
+ {
56
+ "id": "h10",
57
+ "kind": "honesty",
58
+ "text": "coverage reported by the gate maps to scope that was actually explored \u2014 convergence measures explored territory, not just whatever text happened to be captured"
59
+ },
60
+ {
61
+ "id": "c6",
62
+ "kind": "boundary",
63
+ "text": "the CLI stays deterministic and non-orchestrating per issue 20: scope exploration is an agent/skill-side stage and fanout guidance lives in the assign-to-workforce skill \u2014 no LLM calls and no orchestration land inside the CLI"
64
+ },
65
+ {
66
+ "id": "h11",
67
+ "kind": "honesty",
68
+ "text": "the shipped diff contains no LLM calls, no subagent spawning, and no worktree management anywhere inside the devague package"
69
+ },
70
+ {
71
+ "id": "c8",
72
+ "kind": "success_signal",
73
+ "text": "a spec produced with the new process shows scope-exploration provenance on its boundary and non-goal claims; every exported plan task renders an instruction block; and an assign-to-workforce run consumes those instructions as the subagent brief without the operator re-typing context"
74
+ },
75
+ {
76
+ "id": "h12",
77
+ "kind": "honesty",
78
+ "text": "every success signal is checkable on artifacts alone: the exported spec shows scope provenance, the exported plan renders instruction blocks, and a fanout brief quotes them verbatim"
79
+ },
80
+ {
81
+ "id": "c9",
82
+ "kind": "requirement",
83
+ "text": "a scope-exploration stage precedes the frame: before or right after 'new', the operator surveys the repo/context the idea touches and the findings seed boundary, non-goal, and assumption claims that cite what was explored"
84
+ },
85
+ {
86
+ "id": "h2",
87
+ "kind": "honesty",
88
+ "text": "a frame built with scope exploration contains boundary and non-goal claims that cite the surfaces actually explored \u2014 provenance, not generic disclaimers"
89
+ },
90
+ {
91
+ "id": "c10",
92
+ "kind": "requirement",
93
+ "text": "claims and plan tasks accept an optional per-item instruction \u2014 how to verify or implement that item \u2014 stored in frame/plan state and rendered verbatim in exports; an absent instruction renders nothing"
94
+ },
95
+ {
96
+ "id": "h3",
97
+ "kind": "honesty",
98
+ "text": "instructions round-trip: capture, store, export renders them verbatim; an item without an instruction renders nothing rather than fabricated filler"
99
+ },
100
+ {
101
+ "id": "c11",
102
+ "kind": "requirement",
103
+ "text": "sharper exports: the rendered spec-md and plan-md make every item directly actionable, with the definition of sharper agreed with the user before build"
104
+ },
105
+ {
106
+ "id": "h4",
107
+ "kind": "honesty",
108
+ "text": "sharper has a written definition the user confirmed before any renderer change lands"
109
+ },
110
+ {
111
+ "id": "h6",
112
+ "kind": "honesty",
113
+ "text": "the tightened gate stays deterministic: it checks structural sharpness signals \u2014 instruction present on spec-affecting items, a measurable success signal, claim text meeting explicit structural rules \u2014 never LLM text judgment inside the CLI"
114
+ },
115
+ {
116
+ "id": "c12",
117
+ "kind": "requirement",
118
+ "text": "the plan-to-fanout leg is guided end-to-end: plan waves output carries each task's instruction and acceptance criteria, and the assign-to-workforce skill consumes that payload as the per-subagent brief"
119
+ },
120
+ {
121
+ "id": "h5",
122
+ "kind": "honesty",
123
+ "text": "an assign-to-workforce subagent receives its task's instruction and acceptance criteria in its brief with no operator paraphrasing required"
124
+ }
125
+ ],
126
+ "tasks": [
127
+ {
128
+ "id": "t1",
129
+ "summary": "Frame schema: scope entries + per-item instruction fields (frame.py, store.py)",
130
+ "origin": "llm",
131
+ "status": "confirmed",
132
+ "acceptance_criteria": [
133
+ "a frame with scope entries and per-item instructions on claims/honesty conditions saves and loads identical (round-trip test)",
134
+ "loading a pre-existing frame without the new fields succeeds with empty defaults; schema_version bumped once, fail-closed"
135
+ ],
136
+ "deps": [],
137
+ "covers": [
138
+ "c10",
139
+ "h3",
140
+ "c4",
141
+ "h9"
142
+ ]
143
+ },
144
+ {
145
+ "id": "t2",
146
+ "summary": "Plan schema: per-task instruction field (plan.py, plan_store.py)",
147
+ "origin": "llm",
148
+ "status": "confirmed",
149
+ "acceptance_criteria": [
150
+ "a plan task with an instruction round-trips verbatim through save/load; schema_version bumped once",
151
+ "pre-existing plans load with no instruction and no error"
152
+ ],
153
+ "deps": [],
154
+ "covers": [
155
+ "c10"
156
+ ]
157
+ },
158
+ {
159
+ "id": "t3",
160
+ "summary": "New CLI move: devague scope (cli/_commands/scope.py + registration)",
161
+ "origin": "llm",
162
+ "status": "confirmed",
163
+ "acceptance_criteria": [
164
+ "devague scope records an explored surface + finding as first-class state with provenance and optional `--seeds <claim-id>` links; unknown claim id refused with a hint",
165
+ "scope --list and --json render the recorded entries; the move is deterministic \u2014 no LLM calls, no subprocess"
166
+ ],
167
+ "deps": [
168
+ "t1"
169
+ ],
170
+ "covers": [
171
+ "c9",
172
+ "h2",
173
+ "c6",
174
+ "c4",
175
+ "h9"
176
+ ]
177
+ },
178
+ {
179
+ "id": "t4",
180
+ "summary": "Instruction flags on frame moves: capture/interrogate --instruction (capture.py, interrogate.py)",
181
+ "origin": "llm",
182
+ "status": "confirmed",
183
+ "acceptance_criteria": [
184
+ "capture --instruction and interrogate --instruction store the instruction verbatim on the item; devague review lists instructions alongside their items",
185
+ "adding or changing an instruction on a confirmed claim/honesty condition flips it back to proposed \u2014 the user re-confirms (user decision, gate-2 review)"
186
+ ],
187
+ "deps": [
188
+ "t1"
189
+ ],
190
+ "covers": [
191
+ "c10"
192
+ ]
193
+ },
194
+ {
195
+ "id": "t5",
196
+ "summary": "Instruction flags on plan moves: plan task --instruction + `instruct <tN>` (cli/_commands/plan.py)",
197
+ "origin": "llm",
198
+ "status": "confirmed",
199
+ "acceptance_criteria": [
200
+ "plan task --instruction stores verbatim; a new instruct move adds/updates an instruction on an existing task; plan show --json includes it",
201
+ "adding or changing an instruction on a confirmed task flips it back to proposed \u2014 the user re-confirms (user decision, gate-2 review)"
202
+ ],
203
+ "deps": [
204
+ "t2"
205
+ ],
206
+ "covers": [
207
+ "c10"
208
+ ]
209
+ },
210
+ {
211
+ "id": "t6",
212
+ "summary": "Sharper frame renderers: instruction blocks + scope provenance (render/spec_md.py, render/frame_md.py)",
213
+ "origin": "llm",
214
+ "status": "confirmed",
215
+ "acceptance_criteria": [
216
+ "exported spec-md renders each item's instruction block verbatim and a scope-provenance section citing explored surfaces; items without instructions render nothing (golden-file test)",
217
+ "renderer change lands against the user-confirmed definition of sharper (decision c14)"
218
+ ],
219
+ "deps": [
220
+ "t1"
221
+ ],
222
+ "covers": [
223
+ "c11",
224
+ "h4",
225
+ "h3",
226
+ "c8",
227
+ "h12",
228
+ "c3",
229
+ "h2"
230
+ ]
231
+ },
232
+ {
233
+ "id": "t7",
234
+ "summary": "Frame gate tightening: deterministic structural sharpness checks (convergence.py)",
235
+ "origin": "llm",
236
+ "status": "confirmed",
237
+ "acceptance_criteria": [
238
+ "gate emits structural warnings \u2014 spec-affecting claim without instruction, missing measurable success signal \u2014 via explicit documented rules, never LLM judgment",
239
+ "existing converged frames still converge: new checks land as warnings first (soft rollout per parked v2)"
240
+ ],
241
+ "deps": [
242
+ "t1"
243
+ ],
244
+ "covers": [
245
+ "c5",
246
+ "h10",
247
+ "h6"
248
+ ]
249
+ },
250
+ {
251
+ "id": "t8",
252
+ "summary": "Plan gate tightening: instruction warnings (plan_convergence.py)",
253
+ "origin": "llm",
254
+ "status": "confirmed",
255
+ "acceptance_criteria": [
256
+ "plan gate warns when a confirmed task lacks an instruction; existing plans converge unchanged"
257
+ ],
258
+ "deps": [
259
+ "t2"
260
+ ],
261
+ "covers": [
262
+ "h6"
263
+ ]
264
+ },
265
+ {
266
+ "id": "t9",
267
+ "summary": "Sharper plan renderer + enriched waves payload (render/plan_md.py, waves output)",
268
+ "origin": "llm",
269
+ "status": "confirmed",
270
+ "acceptance_criteria": [
271
+ "exported plan-md renders a per-task instruction block verbatim; tasks without instructions render nothing (golden-file test)",
272
+ "plan waves --json payload carries each task's summary, instruction, acceptance criteria, and covered targets \u2014 enough for a subagent brief with no external context"
273
+ ],
274
+ "deps": [
275
+ "t2",
276
+ "t5"
277
+ ],
278
+ "covers": [
279
+ "c12",
280
+ "c11",
281
+ "h3",
282
+ "c8",
283
+ "h12"
284
+ ]
285
+ },
286
+ {
287
+ "id": "t10",
288
+ "summary": "Teaching surface: learn/explain/status know the scope stage (learn.py, explain.py, cli/_status.py)",
289
+ "origin": "llm",
290
+ "status": "confirmed",
291
+ "acceptance_criteria": [
292
+ "devague learn presents the scope-exploration stage in the arc as optional-but-recommended (non_goal c7: small ideas may skip it)",
293
+ "devague explain scope and devague explain question both work (question is unknown to explain today)"
294
+ ],
295
+ "deps": [
296
+ "t3",
297
+ "t4",
298
+ "t5"
299
+ ],
300
+ "covers": [
301
+ "c9"
302
+ ]
303
+ },
304
+ {
305
+ "id": "t11",
306
+ "summary": "Operator skills teach the new surface (/think and /spec-to-plan SKILL.md)",
307
+ "origin": "llm",
308
+ "status": "confirmed",
309
+ "acceptance_criteria": [
310
+ "/think documents the scope stage and --instruction flags with a worked example; /spec-to-plan documents task instructions and the enriched waves payload"
311
+ ],
312
+ "deps": [
313
+ "t3",
314
+ "t4",
315
+ "t5"
316
+ ],
317
+ "covers": [
318
+ "c9"
319
+ ]
320
+ },
321
+ {
322
+ "id": "t12",
323
+ "summary": "Docs: spec-contract, llm-guidance, skills.md cover scope entity + instruction fields",
324
+ "origin": "llm",
325
+ "status": "confirmed",
326
+ "acceptance_criteria": [
327
+ "docs/spec-contract.md documents the scope entity, instruction fields, both schema bumps, and the new gate rules; docs/llm-guidance.md and docs/skills.md updated to match"
328
+ ],
329
+ "deps": [
330
+ "t1",
331
+ "t2"
332
+ ],
333
+ "covers": [
334
+ "c9"
335
+ ]
336
+ },
337
+ {
338
+ "id": "t13",
339
+ "summary": "assign-to-workforce consumes the enriched waves payload as the subagent brief",
340
+ "origin": "llm",
341
+ "status": "confirmed",
342
+ "acceptance_criteria": [
343
+ "the skill's per-subagent brief quotes the task's instruction and acceptance criteria verbatim from waves --json \u2014 the operator-paraphrase step is gone from the skill text"
344
+ ],
345
+ "deps": [
346
+ "t9"
347
+ ],
348
+ "covers": [
349
+ "c12",
350
+ "h5",
351
+ "c8",
352
+ "h12",
353
+ "h7",
354
+ "c6",
355
+ "c4",
356
+ "h9"
357
+ ]
358
+ },
359
+ {
360
+ "id": "t14",
361
+ "summary": "Dogfooded end-to-end run + boundary audit",
362
+ "origin": "llm",
363
+ "status": "confirmed",
364
+ "acceptance_criteria": [
365
+ "one real idea runs scope -> frame -> sharper spec -> plan -> fanout brief using only the shipped surface, committed as an e2e test or worked example",
366
+ "audit shows no LLM calls, no subagent spawning, no worktree management anywhere in the devague package (grep/bandit evidence)"
367
+ ],
368
+ "deps": [
369
+ "t6",
370
+ "t7",
371
+ "t8",
372
+ "t9",
373
+ "t10",
374
+ "t11",
375
+ "t13"
376
+ ],
377
+ "covers": [
378
+ "c1",
379
+ "h1",
380
+ "c2",
381
+ "h7",
382
+ "c3",
383
+ "h8",
384
+ "h11"
385
+ ]
386
+ }
387
+ ],
388
+ "risks": [
389
+ {
390
+ "id": "r1",
391
+ "text": "which exact deterministic structural-sharpness rules land first, and the false-positive story when they misfire on legitimate prose (soft rollout as warnings mitigates)",
392
+ "kind": "unknown_nonblocking",
393
+ "task_id": "t7"
394
+ },
395
+ {
396
+ "id": "r2",
397
+ "text": "confirm-loop ergonomics when every claim and task can carry an LLM-proposed instruction \u2014 batch-confirm UX may be needed as a follow-up",
398
+ "kind": "follow_up",
399
+ "task_id": "t4"
400
+ }
401
+ ]
402
+ }