devague 0.22.0__tar.gz → 0.23.0__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 (267) hide show
  1. devague-0.23.0/.claude/skills/validate-delivery/SKILL.md +215 -0
  2. devague-0.23.0/.devague/current_plan +1 -0
  3. devague-0.23.0/.devague/deliveries/behavior-validation-and-today-spec.json +108 -0
  4. devague-0.23.0/.devague/frames/behavior-validation-and-today-spec.json +937 -0
  5. devague-0.23.0/.devague/plans/behavior-validation-and-today-spec.json +715 -0
  6. {devague-0.22.0 → devague-0.23.0}/CHANGELOG.md +19 -0
  7. {devague-0.22.0 → devague-0.23.0}/CLAUDE.md +48 -9
  8. {devague-0.22.0 → devague-0.23.0}/PKG-INFO +14 -11
  9. {devague-0.22.0 → devague-0.23.0}/README.md +12 -9
  10. {devague-0.22.0 → devague-0.23.0}/devague/cli/__init__.py +8 -0
  11. {devague-0.22.0 → devague-0.23.0}/devague/cli/_commands/converge.py +10 -2
  12. devague-0.23.0/devague/cli/_commands/delta.py +379 -0
  13. {devague-0.22.0 → devague-0.23.0}/devague/cli/_commands/deviate.py +11 -28
  14. devague-0.23.0/devague/cli/_commands/evidence.py +297 -0
  15. {devague-0.22.0 → devague-0.23.0}/devague/cli/_commands/learn.py +453 -16
  16. devague-0.23.0/devague/cli/_commands/oblige.py +208 -0
  17. {devague-0.22.0 → devague-0.23.0}/devague/cli/_commands/plan.py +218 -5
  18. {devague-0.22.0 → devague-0.23.0}/devague/cli/_commands/show.py +21 -2
  19. {devague-0.22.0 → devague-0.23.0}/devague/cli/_commands/status.py +17 -1
  20. {devague-0.22.0 → devague-0.23.0}/devague/cli/_commands/summary.py +20 -3
  21. devague-0.23.0/devague/cli/_commands/today.py +59 -0
  22. devague-0.23.0/devague/cli/_refs.py +55 -0
  23. {devague-0.22.0 → devague-0.23.0}/devague/cli/_status.py +37 -1
  24. {devague-0.22.0 → devague-0.23.0}/devague/contested.py +29 -12
  25. {devague-0.22.0 → devague-0.23.0}/devague/convergence.py +57 -2
  26. devague-0.23.0/devague/delivery.py +605 -0
  27. {devague-0.22.0 → devague-0.23.0}/devague/delivery_store.py +15 -6
  28. {devague-0.22.0 → devague-0.23.0}/devague/frame.py +157 -0
  29. devague-0.23.0/devague/obligation_evidence.py +119 -0
  30. {devague-0.22.0 → devague-0.23.0}/devague/plan.py +180 -1
  31. {devague-0.22.0 → devague-0.23.0}/devague/plan_convergence.py +47 -3
  32. {devague-0.22.0 → devague-0.23.0}/devague/render/frame_md.py +20 -3
  33. {devague-0.22.0 → devague-0.23.0}/devague/render/plan_md.py +23 -3
  34. {devague-0.22.0 → devague-0.23.0}/devague/render/summary_md.py +353 -10
  35. devague-0.23.0/devague/render/today_md.py +217 -0
  36. devague-0.23.0/devague/staleness.py +332 -0
  37. devague-0.23.0/devague/today.py +792 -0
  38. devague-0.23.0/docs/current-spec.md +28 -0
  39. devague-0.23.0/docs/deliveries/2026-08-31-behavior-validation-and-today-spec.md +134 -0
  40. devague-0.23.0/docs/plans/2026-08-31-behavior-validation-and-today-spec-split.md +217 -0
  41. devague-0.23.0/docs/plans/2026-08-31-behavior-validation-and-today-spec.md +160 -0
  42. {devague-0.22.0 → devague-0.23.0}/docs/skill-sources.md +16 -13
  43. {devague-0.22.0 → devague-0.23.0}/docs/skills.md +35 -4
  44. {devague-0.22.0 → devague-0.23.0}/docs/spec-contract.md +10 -0
  45. devague-0.23.0/docs/specs/2026-08-31-behavior-validation-and-today-spec.md +139 -0
  46. {devague-0.22.0 → devague-0.23.0}/pyproject.toml +1 -1
  47. devague-0.23.0/tests/test_cli_delta.py +626 -0
  48. devague-0.23.0/tests/test_cli_evidence.py +498 -0
  49. devague-0.23.0/tests/test_cli_learn.py +639 -0
  50. devague-0.23.0/tests/test_cli_oblige.py +440 -0
  51. {devague-0.22.0 → devague-0.23.0}/tests/test_cli_plan.py +245 -10
  52. {devague-0.22.0 → devague-0.23.0}/tests/test_convergence.py +65 -1
  53. devague-0.23.0/tests/test_delivery_evidence.py +582 -0
  54. devague-0.23.0/tests/test_end_to_end_validation.py +239 -0
  55. {devague-0.22.0 → devague-0.23.0}/tests/test_frame.py +20 -11
  56. {devague-0.22.0 → devague-0.23.0}/tests/test_frame_lapse.py +9 -5
  57. devague-0.23.0/tests/test_frame_obligation.py +295 -0
  58. {devague-0.22.0 → devague-0.23.0}/tests/test_frame_schema_v2.py +4 -3
  59. devague-0.23.0/tests/test_obligation_warnings.py +432 -0
  60. {devague-0.22.0 → devague-0.23.0}/tests/test_plan.py +9 -5
  61. {devague-0.22.0 → devague-0.23.0}/tests/test_plan_convergence.py +61 -0
  62. devague-0.23.0/tests/test_plan_obligation.py +293 -0
  63. devague-0.23.0/tests/test_render_obligations.py +132 -0
  64. devague-0.23.0/tests/test_staleness.py +571 -0
  65. devague-0.23.0/tests/test_summary_delivery_claims.py +410 -0
  66. {devague-0.22.0 → devague-0.23.0}/tests/test_teaching_surface_sweep.py +5 -3
  67. devague-0.23.0/tests/test_today.py +619 -0
  68. devague-0.23.0/tests/test_today_cli.py +131 -0
  69. devague-0.23.0/tests/test_today_md.py +210 -0
  70. {devague-0.22.0 → devague-0.23.0}/uv.lock +1 -1
  71. devague-0.22.0/.devague/current_plan +0 -1
  72. devague-0.22.0/devague/delivery.py +0 -149
  73. devague-0.22.0/tests/test_cli_learn.py +0 -273
  74. {devague-0.22.0 → devague-0.23.0}/.claude/skills/agent-config/SKILL.md +0 -0
  75. {devague-0.22.0 → devague-0.23.0}/.claude/skills/agent-config/data/backend-fingerprints.yaml +0 -0
  76. {devague-0.22.0 → devague-0.23.0}/.claude/skills/agent-config/scripts/show.sh +0 -0
  77. {devague-0.22.0 → devague-0.23.0}/.claude/skills/assign-to-workforce/SKILL.md +0 -0
  78. {devague-0.22.0 → devague-0.23.0}/.claude/skills/assign-to-workforce/scripts/assign-to-workforce.sh +0 -0
  79. {devague-0.22.0 → devague-0.23.0}/.claude/skills/challenge/SKILL.md +0 -0
  80. {devague-0.22.0 → devague-0.23.0}/.claude/skills/cicd/SKILL.md +0 -0
  81. {devague-0.22.0 → devague-0.23.0}/.claude/skills/cicd/scripts/_resolve-nick.sh +0 -0
  82. {devague-0.22.0 → devague-0.23.0}/.claude/skills/cicd/scripts/portability-lint.sh +0 -0
  83. {devague-0.22.0 → devague-0.23.0}/.claude/skills/cicd/scripts/pr-reply.sh +0 -0
  84. {devague-0.22.0 → devague-0.23.0}/.claude/skills/cicd/scripts/pr-status.sh +0 -0
  85. {devague-0.22.0 → devague-0.23.0}/.claude/skills/cicd/scripts/workflow.sh +0 -0
  86. {devague-0.22.0 → devague-0.23.0}/.claude/skills/communicate/SKILL.md +0 -0
  87. {devague-0.22.0 → devague-0.23.0}/.claude/skills/communicate/scripts/fetch-issues.sh +0 -0
  88. {devague-0.22.0 → devague-0.23.0}/.claude/skills/communicate/scripts/mesh-message.sh +0 -0
  89. {devague-0.22.0 → devague-0.23.0}/.claude/skills/communicate/scripts/post-comment.sh +0 -0
  90. {devague-0.22.0 → devague-0.23.0}/.claude/skills/communicate/scripts/post-issue.sh +0 -0
  91. {devague-0.22.0 → devague-0.23.0}/.claude/skills/communicate/scripts/templates/skill-new-brief.md +0 -0
  92. {devague-0.22.0 → devague-0.23.0}/.claude/skills/communicate/scripts/templates/skill-update-brief.md +0 -0
  93. {devague-0.22.0 → devague-0.23.0}/.claude/skills/deviate/SKILL.md +0 -0
  94. {devague-0.22.0 → devague-0.23.0}/.claude/skills/doc-test-alignment/SKILL.md +0 -0
  95. {devague-0.22.0 → devague-0.23.0}/.claude/skills/doc-test-alignment/scripts/check.sh +0 -0
  96. {devague-0.22.0 → devague-0.23.0}/.claude/skills/pypi-maintainer/SKILL.md +0 -0
  97. {devague-0.22.0 → devague-0.23.0}/.claude/skills/pypi-maintainer/scripts/switch-source.sh +0 -0
  98. {devague-0.22.0 → devague-0.23.0}/.claude/skills/recall/SKILL.md +0 -0
  99. {devague-0.22.0 → devague-0.23.0}/.claude/skills/recall/scripts/recall.sh +0 -0
  100. {devague-0.22.0 → devague-0.23.0}/.claude/skills/remember/SKILL.md +0 -0
  101. {devague-0.22.0 → devague-0.23.0}/.claude/skills/remember/scripts/remember.sh +0 -0
  102. {devague-0.22.0 → devague-0.23.0}/.claude/skills/run-tests/SKILL.md +0 -0
  103. {devague-0.22.0 → devague-0.23.0}/.claude/skills/run-tests/scripts/test.sh +0 -0
  104. {devague-0.22.0 → devague-0.23.0}/.claude/skills/scope/SKILL.md +0 -0
  105. {devague-0.22.0 → devague-0.23.0}/.claude/skills/sonarclaude/SKILL.md +0 -0
  106. {devague-0.22.0 → devague-0.23.0}/.claude/skills/sonarclaude/scripts/sonar.sh +0 -0
  107. {devague-0.22.0 → devague-0.23.0}/.claude/skills/spec-to-plan/SKILL.md +0 -0
  108. {devague-0.22.0 → devague-0.23.0}/.claude/skills/spec-to-plan/scripts/spec-to-plan.sh +0 -0
  109. {devague-0.22.0 → devague-0.23.0}/.claude/skills/summarize-delivery/SKILL.md +0 -0
  110. {devague-0.22.0 → devague-0.23.0}/.claude/skills/think/SKILL.md +0 -0
  111. {devague-0.22.0 → devague-0.23.0}/.claude/skills/think/scripts/think.sh +0 -0
  112. {devague-0.22.0 → devague-0.23.0}/.claude/skills/version-bump/SKILL.md +0 -0
  113. {devague-0.22.0 → devague-0.23.0}/.claude/skills/version-bump/scripts/bump.py +0 -0
  114. {devague-0.22.0 → devague-0.23.0}/.claude/skills.local.yaml.example +0 -0
  115. {devague-0.22.0 → devague-0.23.0}/.devague/deliveries/challenge-skill.json +0 -0
  116. {devague-0.22.0 → devague-0.23.0}/.devague/deliveries/execution-seam-and-deviate.json +0 -0
  117. {devague-0.22.0 → devague-0.23.0}/.devague/deliveries/issue-backlog-sweep.json +0 -0
  118. {devague-0.22.0 → devague-0.23.0}/.devague/deliveries/reasoning-degradation-ledger.json +0 -0
  119. {devague-0.22.0 → devague-0.23.0}/.devague/frames/challenge-skill.json +0 -0
  120. {devague-0.22.0 → devague-0.23.0}/.devague/frames/devague-0-6-0-ships-the-human-review-loop-devague.json +0 -0
  121. {devague-0.22.0 → devague-0.23.0}/.devague/frames/devague-now-ships-a-documented-spec-contract-every.json +0 -0
  122. {devague-0.22.0 → devague-0.23.0}/.devague/frames/devague-ships-a-sharper-end-to-end-method-a-guided.json +0 -0
  123. {devague-0.22.0 → devague-0.23.0}/.devague/frames/devague-turns-a-converged-plan-into-parallel-simpl.json +0 -0
  124. {devague-0.22.0 → devague-0.23.0}/.devague/frames/execution-seam-and-deviate.json +0 -0
  125. {devague-0.22.0 → devague-0.23.0}/.devague/frames/issue-backlog-sweep.json +0 -0
  126. {devague-0.22.0 → devague-0.23.0}/.devague/frames/reasoning-degradation-ledger.json +0 -0
  127. {devague-0.22.0 → devague-0.23.0}/.devague/frames/resolve-parked-vagueness.json +0 -0
  128. {devague-0.22.0 → devague-0.23.0}/.devague/frames/summarize-delivery-skill.json +0 -0
  129. {devague-0.22.0 → devague-0.23.0}/.devague/plans/challenge-skill.json +0 -0
  130. {devague-0.22.0 → devague-0.23.0}/.devague/plans/devague-0-6-0-ships-the-human-review-loop-devague.json +0 -0
  131. {devague-0.22.0 → devague-0.23.0}/.devague/plans/devague-now-ships-a-documented-spec-contract-every.json +0 -0
  132. {devague-0.22.0 → devague-0.23.0}/.devague/plans/devague-ships-a-sharper-end-to-end-method-a-guided.json +0 -0
  133. {devague-0.22.0 → devague-0.23.0}/.devague/plans/devague-turns-a-converged-plan-into-parallel-simpl.json +0 -0
  134. {devague-0.22.0 → devague-0.23.0}/.devague/plans/execution-seam-and-deviate.json +0 -0
  135. {devague-0.22.0 → devague-0.23.0}/.devague/plans/issue-backlog-sweep.json +0 -0
  136. {devague-0.22.0 → devague-0.23.0}/.devague/plans/reasoning-degradation-ledger.json +0 -0
  137. {devague-0.22.0 → devague-0.23.0}/.devague/plans/resolve-parked-vagueness.json +0 -0
  138. {devague-0.22.0 → devague-0.23.0}/.devague/plans/summarize-delivery-skill.json +0 -0
  139. {devague-0.22.0 → devague-0.23.0}/.flake8 +0 -0
  140. {devague-0.22.0 → devague-0.23.0}/.github/workflows/publish.yml +0 -0
  141. {devague-0.22.0 → devague-0.23.0}/.github/workflows/security-checks.yml +0 -0
  142. {devague-0.22.0 → devague-0.23.0}/.github/workflows/tests.yml +0 -0
  143. {devague-0.22.0 → devague-0.23.0}/.gitignore +0 -0
  144. {devague-0.22.0 → devague-0.23.0}/.markdownlint-cli2.yaml +0 -0
  145. {devague-0.22.0 → devague-0.23.0}/.pre-commit-config.yaml +0 -0
  146. {devague-0.22.0 → devague-0.23.0}/LICENSE +0 -0
  147. {devague-0.22.0 → devague-0.23.0}/LICENSES/MIT-guildmaster-skills.txt +0 -0
  148. {devague-0.22.0 → devague-0.23.0}/culture.yaml +0 -0
  149. {devague-0.22.0 → devague-0.23.0}/devague/__init__.py +0 -0
  150. {devague-0.22.0 → devague-0.23.0}/devague/__main__.py +0 -0
  151. {devague-0.22.0 → devague-0.23.0}/devague/cli/_commands/__init__.py +0 -0
  152. {devague-0.22.0 → devague-0.23.0}/devague/cli/_commands/amend.py +0 -0
  153. {devague-0.22.0 → devague-0.23.0}/devague/cli/_commands/capture.py +0 -0
  154. {devague-0.22.0 → devague-0.23.0}/devague/cli/_commands/confirm.py +0 -0
  155. {devague-0.22.0 → devague-0.23.0}/devague/cli/_commands/explain.py +0 -0
  156. {devague-0.22.0 → devague-0.23.0}/devague/cli/_commands/export.py +0 -0
  157. {devague-0.22.0 → devague-0.23.0}/devague/cli/_commands/interrogate.py +0 -0
  158. {devague-0.22.0 → devague-0.23.0}/devague/cli/_commands/lapse.py +0 -0
  159. {devague-0.22.0 → devague-0.23.0}/devague/cli/_commands/list_frames.py +0 -0
  160. {devague-0.22.0 → devague-0.23.0}/devague/cli/_commands/new.py +0 -0
  161. {devague-0.22.0 → devague-0.23.0}/devague/cli/_commands/park.py +0 -0
  162. {devague-0.22.0 → devague-0.23.0}/devague/cli/_commands/question.py +0 -0
  163. {devague-0.22.0 → devague-0.23.0}/devague/cli/_commands/reject.py +0 -0
  164. {devague-0.22.0 → devague-0.23.0}/devague/cli/_commands/review.py +0 -0
  165. {devague-0.22.0 → devague-0.23.0}/devague/cli/_commands/scope.py +0 -0
  166. {devague-0.22.0 → devague-0.23.0}/devague/cli/_deliveries.py +0 -0
  167. {devague-0.22.0 → devague-0.23.0}/devague/cli/_errors.py +0 -0
  168. {devague-0.22.0 → devague-0.23.0}/devague/cli/_frames.py +0 -0
  169. {devague-0.22.0 → devague-0.23.0}/devague/cli/_output.py +0 -0
  170. {devague-0.22.0 → devague-0.23.0}/devague/cli/_paths.py +0 -0
  171. {devague-0.22.0 → devague-0.23.0}/devague/cli/_plans.py +0 -0
  172. {devague-0.22.0 → devague-0.23.0}/devague/plan_store.py +0 -0
  173. {devague-0.22.0 → devague-0.23.0}/devague/questions_io.py +0 -0
  174. {devague-0.22.0 → devague-0.23.0}/devague/render/__init__.py +0 -0
  175. {devague-0.22.0 → devague-0.23.0}/devague/render/_md_safety.py +0 -0
  176. {devague-0.22.0 → devague-0.23.0}/devague/render/deliverables_md.py +0 -0
  177. {devague-0.22.0 → devague-0.23.0}/devague/render/review_md.py +0 -0
  178. {devague-0.22.0 → devague-0.23.0}/devague/render/spec_md.py +0 -0
  179. {devague-0.22.0 → devague-0.23.0}/devague/store.py +0 -0
  180. {devague-0.22.0 → devague-0.23.0}/docs/assign-to-workforce-worked-example.md +0 -0
  181. {devague-0.22.0 → devague-0.23.0}/docs/deliveries/2026-07-09-sharper-end-to-end-method.md +0 -0
  182. {devague-0.22.0 → devague-0.23.0}/docs/deliveries/2026-07-09-summarize-delivery-skill.md +0 -0
  183. {devague-0.22.0 → devague-0.23.0}/docs/deliveries/2026-07-14-execution-seam-and-deviate.md +0 -0
  184. {devague-0.22.0 → devague-0.23.0}/docs/deliveries/2026-07-15-challenge-skill.md +0 -0
  185. {devague-0.22.0 → devague-0.23.0}/docs/deliveries/2026-07-17-resolve-parked-vagueness.md +0 -0
  186. {devague-0.22.0 → devague-0.23.0}/docs/deliveries/2026-07-28-issue-backlog-sweep-closure-map.md +0 -0
  187. {devague-0.22.0 → devague-0.23.0}/docs/deliveries/2026-07-28-issue-backlog-sweep.md +0 -0
  188. {devague-0.22.0 → devague-0.23.0}/docs/deliveries/2026-07-29-reasoning-degradation-ledger.md +0 -0
  189. {devague-0.22.0 → devague-0.23.0}/docs/examples/contract-example.json +0 -0
  190. {devague-0.22.0 → devague-0.23.0}/docs/llm-guidance.md +0 -0
  191. {devague-0.22.0 → devague-0.23.0}/docs/plans/2026-05-23-devague-0-6-0-ships-the-human-review-loop-devague.md +0 -0
  192. {devague-0.22.0 → devague-0.23.0}/docs/plans/2026-05-23-devague-now-ships-a-documented-spec-contract-every.md +0 -0
  193. {devague-0.22.0 → devague-0.23.0}/docs/plans/2026-05-23-devague-turns-a-converged-plan-into-parallel-simpl.md +0 -0
  194. {devague-0.22.0 → devague-0.23.0}/docs/plans/2026-07-01-devague-ships-a-sharper-end-to-end-method-a-guided.md +0 -0
  195. {devague-0.22.0 → devague-0.23.0}/docs/plans/2026-07-09-summarize-delivery-skill.md +0 -0
  196. {devague-0.22.0 → devague-0.23.0}/docs/plans/2026-07-14-execution-seam-and-deviate.md +0 -0
  197. {devague-0.22.0 → devague-0.23.0}/docs/plans/2026-07-15-challenge-skill.md +0 -0
  198. {devague-0.22.0 → devague-0.23.0}/docs/plans/2026-07-17-resolve-parked-vagueness.md +0 -0
  199. {devague-0.22.0 → devague-0.23.0}/docs/plans/2026-07-28-issue-backlog-sweep-split.md +0 -0
  200. {devague-0.22.0 → devague-0.23.0}/docs/plans/2026-07-28-issue-backlog-sweep.md +0 -0
  201. {devague-0.22.0 → devague-0.23.0}/docs/plans/2026-07-29-reasoning-degradation-ledger-split.md +0 -0
  202. {devague-0.22.0 → devague-0.23.0}/docs/plans/2026-07-29-reasoning-degradation-ledger.md +0 -0
  203. {devague-0.22.0 → devague-0.23.0}/docs/reviews/spec-contract-frame-review.md +0 -0
  204. {devague-0.22.0 → devague-0.23.0}/docs/specs/2026-05-23-devague-0-6-0-ships-the-human-review-loop-devague.md +0 -0
  205. {devague-0.22.0 → devague-0.23.0}/docs/specs/2026-05-23-devague-now-ships-a-documented-spec-contract-every.md +0 -0
  206. {devague-0.22.0 → devague-0.23.0}/docs/specs/2026-05-23-devague-turns-a-converged-plan-into-parallel-simpl.md +0 -0
  207. {devague-0.22.0 → devague-0.23.0}/docs/specs/2026-07-01-devague-ships-a-sharper-end-to-end-method-a-guided.md +0 -0
  208. {devague-0.22.0 → devague-0.23.0}/docs/specs/2026-07-09-summarize-delivery-skill.md +0 -0
  209. {devague-0.22.0 → devague-0.23.0}/docs/specs/2026-07-14-execution-seam-and-deviate.md +0 -0
  210. {devague-0.22.0 → devague-0.23.0}/docs/specs/2026-07-15-challenge-skill.md +0 -0
  211. {devague-0.22.0 → devague-0.23.0}/docs/specs/2026-07-17-resolve-parked-vagueness.md +0 -0
  212. {devague-0.22.0 → devague-0.23.0}/docs/specs/2026-07-28-issue-backlog-sweep.md +0 -0
  213. {devague-0.22.0 → devague-0.23.0}/docs/specs/2026-07-29-reasoning-degradation-ledger.md +0 -0
  214. {devague-0.22.0 → devague-0.23.0}/docs/superpowers/plans/2026-05-22-specifix-onboarding.md +0 -0
  215. {devague-0.22.0 → devague-0.23.0}/docs/superpowers/plans/2026-05-23-devague-rename.md +0 -0
  216. {devague-0.22.0 → devague-0.23.0}/docs/superpowers/plans/2026-05-23-devague-working-backwards-engine.md +0 -0
  217. {devague-0.22.0 → devague-0.23.0}/docs/superpowers/specs/2026-05-22-specifix-onboarding-design.md +0 -0
  218. {devague-0.22.0 → devague-0.23.0}/docs/superpowers/specs/2026-05-23-devague-spec-to-plan-design.md +0 -0
  219. {devague-0.22.0 → devague-0.23.0}/docs/superpowers/specs/2026-05-23-devague-working-backwards-design.md +0 -0
  220. {devague-0.22.0 → devague-0.23.0}/sonar-project.properties +0 -0
  221. {devague-0.22.0 → devague-0.23.0}/tests/__init__.py +0 -0
  222. {devague-0.22.0 → devague-0.23.0}/tests/goldens/resolved_vagueness_frame.md +0 -0
  223. {devague-0.22.0 → devague-0.23.0}/tests/goldens/resolved_vagueness_spec.md +0 -0
  224. {devague-0.22.0 → devague-0.23.0}/tests/goldens/sharper_frame.md +0 -0
  225. {devague-0.22.0 → devague-0.23.0}/tests/goldens/sharper_plan.md +0 -0
  226. {devague-0.22.0 → devague-0.23.0}/tests/goldens/sharper_spec.md +0 -0
  227. {devague-0.22.0 → devague-0.23.0}/tests/test_assign_to_workforce_script.py +0 -0
  228. {devague-0.22.0 → devague-0.23.0}/tests/test_boundary_audit.py +0 -0
  229. {devague-0.22.0 → devague-0.23.0}/tests/test_cli_affordances.py +0 -0
  230. {devague-0.22.0 → devague-0.23.0}/tests/test_cli_chassis.py +0 -0
  231. {devague-0.22.0 → devague-0.23.0}/tests/test_cli_converge_export.py +0 -0
  232. {devague-0.22.0 → devague-0.23.0}/tests/test_cli_errors.py +0 -0
  233. {devague-0.22.0 → devague-0.23.0}/tests/test_cli_instructions.py +0 -0
  234. {devague-0.22.0 → devague-0.23.0}/tests/test_cli_lapse.py +0 -0
  235. {devague-0.22.0 → devague-0.23.0}/tests/test_cli_moves.py +0 -0
  236. {devague-0.22.0 → devague-0.23.0}/tests/test_cli_output.py +0 -0
  237. {devague-0.22.0 → devague-0.23.0}/tests/test_cli_paths.py +0 -0
  238. {devague-0.22.0 → devague-0.23.0}/tests/test_cli_question.py +0 -0
  239. {devague-0.22.0 → devague-0.23.0}/tests/test_cli_review.py +0 -0
  240. {devague-0.22.0 → devague-0.23.0}/tests/test_cli_scope.py +0 -0
  241. {devague-0.22.0 → devague-0.23.0}/tests/test_cli_status.py +0 -0
  242. {devague-0.22.0 → devague-0.23.0}/tests/test_contested.py +0 -0
  243. {devague-0.22.0 → devague-0.23.0}/tests/test_contract.py +0 -0
  244. {devague-0.22.0 → devague-0.23.0}/tests/test_convergence_sharper.py +0 -0
  245. {devague-0.22.0 → devague-0.23.0}/tests/test_deviate.py +0 -0
  246. {devague-0.22.0 → devague-0.23.0}/tests/test_e2e_resolve.py +0 -0
  247. {devague-0.22.0 → devague-0.23.0}/tests/test_e2e_sharper_method.py +0 -0
  248. {devague-0.22.0 → devague-0.23.0}/tests/test_export_markdownlint_integration.py +0 -0
  249. {devague-0.22.0 → devague-0.23.0}/tests/test_md_safety.py +0 -0
  250. {devague-0.22.0 → devague-0.23.0}/tests/test_offline.py +0 -0
  251. {devague-0.22.0 → devague-0.23.0}/tests/test_package.py +0 -0
  252. {devague-0.22.0 → devague-0.23.0}/tests/test_plan_cli_instructions.py +0 -0
  253. {devague-0.22.0 → devague-0.23.0}/tests/test_plan_convergence_sharper.py +0 -0
  254. {devague-0.22.0 → devague-0.23.0}/tests/test_plan_deliverables.py +0 -0
  255. {devague-0.22.0 → devague-0.23.0}/tests/test_plan_escape_hatches.py +0 -0
  256. {devague-0.22.0 → devague-0.23.0}/tests/test_plan_render_sharper.py +0 -0
  257. {devague-0.22.0 → devague-0.23.0}/tests/test_plan_store.py +0 -0
  258. {devague-0.22.0 → devague-0.23.0}/tests/test_render.py +0 -0
  259. {devague-0.22.0 → devague-0.23.0}/tests/test_render_plan.py +0 -0
  260. {devague-0.22.0 → devague-0.23.0}/tests/test_render_sharper.py +0 -0
  261. {devague-0.22.0 → devague-0.23.0}/tests/test_review_loop_integration.py +0 -0
  262. {devague-0.22.0 → devague-0.23.0}/tests/test_review_loop_invariants.py +0 -0
  263. {devague-0.22.0 → devague-0.23.0}/tests/test_spec_to_plan_skill.py +0 -0
  264. {devague-0.22.0 → devague-0.23.0}/tests/test_store.py +0 -0
  265. {devague-0.22.0 → devague-0.23.0}/tests/test_summary.py +0 -0
  266. {devague-0.22.0 → devague-0.23.0}/tests/test_teaching_scope.py +0 -0
  267. {devague-0.22.0 → devague-0.23.0}/tests/test_think_skill.py +0 -0
@@ -0,0 +1,215 @@
1
+ ---
2
+ name: validate-delivery
3
+ description: >
4
+ Run the confirmed plan's behavioral tests agent-side after
5
+ assign-to-workforce merges its waves and before summarize-delivery closes
6
+ the loop, then file what was found — evidence for what passed, behavioral
7
+ deltas for what the run added, amended, or removed — as first-class,
8
+ record-only entries via the devague CLI. Never runs the tests inside the
9
+ CLI (issue #20); never suppresses a failing or partial outcome. Use when
10
+ the user says "validate delivery", "run behavioral tests", "check what
11
+ actually behaves", "file evidence", "record a behavioral delta", or after
12
+ assign-to-workforce merges (or fails to merge) a plan's waves and before
13
+ summarize-delivery runs. Authored and maintained in agentculture/devague
14
+ (origin = devague); guildmaster pulls this skill from here and broadcasts
15
+ it to the AgentCulture mesh — it is NOT vendored from guildmaster like the
16
+ inbound skills here.
17
+ type: command
18
+ ---
19
+
20
+ # validate-delivery — run behavioral tests, file evidence and deltas
21
+
22
+ The skill is named **`validate-delivery`**; it is the **execution-to-evidence
23
+ leg** of the devague method — the *seventh* leg in flow order (the *eighth*
24
+ origin skill, chronologically), sitting between the two closing execution
25
+ skills:
26
+
27
+ ```text
28
+ scope -> think -> challenge -> spec-to-plan -> assign-to-workforce ->
29
+ deviate -> validate-delivery -> summarize-delivery
30
+ ```
31
+
32
+ Where `/assign-to-workforce` fans out a converged plan's waves and
33
+ `/summarize-delivery` closes the loop afterward, `/validate-delivery` runs
34
+ **after waves merge and before the delivery summary is written**. It is the
35
+ gap that used to be filled by memory: the confirmed plan's claims are
36
+ obligations, and until this skill existed nothing forced the run to check
37
+ whether the merged code actually behaves as claimed before the summary
38
+ asserted it did.
39
+
40
+ ## When to invoke
41
+
42
+ Run this skill once a wave (or the whole plan) has merged and there is
43
+ behavior to check against a claim or an approved deviation — always before
44
+ `/summarize-delivery`, never as a substitute for it. It is not gated on a
45
+ complete run: a partial or failed fan-out is still worth validating for
46
+ whatever did merge.
47
+
48
+ ## The method
49
+
50
+ 1. **Identify the obligations.** Read the plan's confirmed claims (via the
51
+ frame) and any approved `/deviate` records to see what the run promised —
52
+ an announcement, an after-state, a success signal, an acceptance
53
+ criterion. Each one that has a behavioral test backing it is an
54
+ obligation this leg checks.
55
+ 2. **Locate the behavioral tests.** Consuming repos identify behavioral
56
+ tests one of two ways (either is valid; pick whichever the repo already
57
+ uses, and say which one in the filed evidence):
58
+ - a **pytest marker**, e.g. `@pytest.mark.behavioral` — run with
59
+ `pytest -m behavioral`;
60
+ - a **dedicated folder**, e.g. `tests/behavioral/` or
61
+ `behavioral-tests/` — run that path directly.
62
+ 3. **Run the tests agent-side.** The agent (not the devague CLI) executes
63
+ the behavioral test suite, or the specific tests relevant to the
64
+ obligations in scope. This is read-only against the codebase — it does
65
+ not modify code to make a test pass.
66
+ 4. **File evidence for every obligation checked.** For each obligation, file
67
+ an evidence record naming the obligation met, the test that asserted the
68
+ behavior, and the outcome — `pass` or `fail`. A failing outcome is filed
69
+ exactly like a passing one; it is never omitted or reworded into
70
+ something softer.
71
+ 5. **File behavioral deltas for what changed.** When the run's actual
72
+ behavior added, amended, or removed a behavior relative to the plan, file
73
+ a delta record — `added` / `amended` / `removed` — with provenance back
74
+ to the claim or approved deviation that motivated it, and forward to the
75
+ evidence record(s) that back it.
76
+ 6. **Report faithfully.** Summarize what was validated, what passed, what
77
+ failed, and what could not be checked at all (no behavioral test exists
78
+ for that obligation yet). An unmet obligation is unmet — it is reported
79
+ as such, not folded into a passing tally or left out of the report.
80
+ 7. **Hand off to `/summarize-delivery`.** The filed evidence and deltas feed
81
+ directly into `devague summary`'s Delivery Claims table: evidence
82
+ strength (coverage / fidelity / execution / sensitivity) is the
83
+ confidence vocabulary there, and any approved lapse on a claim caps its
84
+ confidence the same way it always has.
85
+
86
+ ## The CLI surface this skill drives
87
+
88
+ **Record-only.** The devague CLI never runs a test itself (issue
89
+ [#20](https://github.com/agentculture/devague/issues/20)) — it only records
90
+ what the agent already ran and found. The exact verb shapes below are
91
+ minimal placeholders while the underlying schema lands in a parallel task;
92
+ treat the verb names as stable and the flags as illustrative, and reconcile
93
+ against `devague explain <move>` once that task merges.
94
+
95
+ | Move | What it records |
96
+ |------|------------------|
97
+ | `devague oblige <cN> --seam "<seam>" --behavior "<behavior>"` | Files a behavioral obligation against a claim, naming the seam to test and the behavior to assert (snapshots the claim text at filing). |
98
+ | `devague evidence --obligation <oN> --test "<ref>" --behavior "<asserted>" --contract "<claim text>" --type <type> --strength <level> --basis "<basis>" --outcome pass\|fail [--run-commit <sha> --run-timestamp <ts>]` | Files an evidence record: obligation met by this test, asserting this behavior, outcome pass or fail (a run reference is required at execution strength and above). `llm`-origin filings land `proposed`; the human adjudicates. |
99
+ | `devague delta --kind added\|amended\|removed --behavior "<what changed>" --caused-by <cN\|dN> [--evidence <eN> ...]` | Files a behavioral delta: provenance back to the claim/deviation it diverges from (`--caused-by`), forward to the evidence that backs it. |
100
+ | `devague summary [--pr] [--json]` | Reads the filed evidence and deltas back into the Delivery Claims table (`/summarize-delivery`'s starting point). |
101
+
102
+ `--origin llm` on `oblige` / `evidence` / `delta` lands the record `proposed`
103
+ — exactly the same anti-fabrication contract as `deviate` and `lapse`: an
104
+ agent's own filing never self-confirms, and only the human's `--confirm` /
105
+ `--reject` moves a proposed record forward. A `user`-origin filing
106
+ auto-approves, mirroring `deviate` and `lapse`.
107
+
108
+ ## Hard rules (do not violate)
109
+
110
+ - **The CLI never runs tests.** `devague oblige` / `evidence` / `delta` are
111
+ record-only moves — they take the agent's already-obtained result and
112
+ file it. Running the suite is the agent's job, agent-side, exactly like
113
+ `/summarize-delivery`'s read-only verification step (issue #20).
114
+ - **Unmet is unmet.** A failing or unchecked obligation is filed and
115
+ reported as failing or unchecked — never smoothed into "mostly passing" or
116
+ silently dropped from the report. This is the direct fix for the
117
+ motivating failure below: findings discovered only by reading data after
118
+ the fact, never by a test failing loudly in the record.
119
+ - **A partial or failed run is still a valid input.** There is no
120
+ completion precondition — validate whatever merged, report the rest as
121
+ not yet checkable.
122
+ - **`llm`-origin filings stay proposed until the user confirms.** Same
123
+ anti-fabrication contract as every other origin vocabulary in this
124
+ method — an agent's own proposal never self-confirms.
125
+ - **Provenance both ways.** Every evidence record ties back to an obligation
126
+ (a claim or an approved deviation); every delta ties back to what it
127
+ diverges from and forward to the evidence that backs it. An untraceable
128
+ evidence or delta record is not filed.
129
+ - **This is not a new gate.** Like `/deviate`, `/validate-delivery` does not
130
+ add a fourth standing human gate — it produces the record `/summarize-
131
+ delivery` and the final PR review consume; the three gates (spec,
132
+ implementation split plan, final PR) are unchanged.
133
+
134
+ ## Worked example
135
+
136
+ Wave 2 of a plan merged the `export --format widget-md` verb. The plan's
137
+ confirmed `success_signal` claim `c9` said "round-tripping a widget through
138
+ `export` and back loses no fields." A behavioral test exists for it,
139
+ marked `@pytest.mark.behavioral`, plus two more behavioral tests for
140
+ adjacent claims — one of which fails.
141
+
142
+ ```bash
143
+ # 1. Identify the obligation (echoes its id, e.g. o1)
144
+ devague oblige c9 --seam "widget export round-trip" \
145
+ --behavior "round-tripping a widget loses no fields"
146
+
147
+ # 2. Locate and run the behavioral tests agent-side (read-only)
148
+ pytest -m behavioral -q
149
+ # -> tests/behavioral/test_widget_export.py::test_round_trip PASSED
150
+ # -> tests/behavioral/test_widget_export.py::test_empty_field_rendering FAILED
151
+
152
+ # 3. File evidence for each outcome — the failure included, not smoothed over
153
+ devague evidence --obligation o1 \
154
+ --test tests/behavioral/test_widget_export.py::test_round_trip \
155
+ --behavior "asserts an exported-then-reimported widget compares equal field by field" \
156
+ --contract "round-tripping a widget loses no fields" \
157
+ --type automated --strength execution \
158
+ --basis "behavioral test ran green at the named commit" \
159
+ --outcome pass --run-commit abc1234 --run-timestamp 2026-08-31T12:00:00
160
+ devague evidence --obligation o2 \
161
+ --test tests/behavioral/test_widget_export.py::test_empty_field_rendering \
162
+ --behavior "asserts an absent widget field renders as an empty line" \
163
+ --contract "an absent field renders honestly, never as filler" \
164
+ --type automated --strength execution \
165
+ --basis "behavioral test ran red at the named commit" \
166
+ --outcome fail --run-commit abc1234 --run-timestamp 2026-08-31T12:00:00
167
+
168
+ # 4. File a delta if the failure reveals a real behavioral divergence
169
+ devague delta --kind amended \
170
+ --behavior "empty widget fields render as garbled text, not an empty line" \
171
+ --caused-by c11 --evidence e2
172
+
173
+ # 5. Report faithfully: c9 is validated; c11's claimed behavior is unmet —
174
+ # say so plainly, hand it to /summarize-delivery as Remaining Work, not
175
+ # as a passing claim.
176
+ ```
177
+
178
+ `/summarize-delivery` then reads these back — `c9`'s Delivery Claims row
179
+ cites evidence `e1` at `high` confidence (a passing behavioral test); `c11`'s
180
+ row is `unverified` or explicitly failing, never rounded up.
181
+
182
+ ## The motivating record
183
+
184
+ The Reasoning Degradation Ledger (`devague lapse`, issue
185
+ [`agentculture/devague#97`](https://github.com/agentculture/devague/issues/97))
186
+ exists because of this, cited verbatim: "Four graders failed in that
187
+ cycle... Every one was found by reading data afterwards; none by a test
188
+ failing." That gap — a corrections record reconstructed only at the end,
189
+ from memory, because nothing forced a behavioral check to run and be filed
190
+ along the way — is exactly what `/validate-delivery` closes for the
191
+ *execution* side, the same way `/challenge` closes it for the *spec* side.
192
+
193
+ The design itself traces to issue
194
+ [`agentculture/devague#107`](https://github.com/agentculture/devague/issues/107),
195
+ "Suggestion: behavioral validation and a derived current spec," which
196
+ proposed behavior as the primary contract, four evidence types, a strength
197
+ ladder, and the current spec as a projection of a behavior ledger rather
198
+ than a hand-maintained document. This skill is the method-only front door to
199
+ that idea: it does not implement the full ledger or the derived-spec
200
+ projection — it establishes where in the flow behavioral checking happens,
201
+ what gets filed, and how the failure mode #97 documented gets closed instead
202
+ of rediscovered.
203
+
204
+ ## Provenance
205
+
206
+ This is a **first-party** skill — its origin is `agentculture/devague`, the
207
+ *eighth* in the outbound family after `/scope`, `/think`, `/challenge`,
208
+ `/spec-to-plan`, `/assign-to-workforce`, `/deviate`, and
209
+ `/summarize-delivery`, covering the execution-to-evidence leg that runs
210
+ after a plan's waves merge and before the delivery summary is written.
211
+ guildmaster pulls it from here and broadcasts it to the AgentCulture mesh;
212
+ because devague is upstream, it is **never re-vendored back** from
213
+ guildmaster's re-broadcast copy. The `cite, don't import` policy still
214
+ holds: downstream repos copy it, they don't symlink or depend on it. See
215
+ `docs/skill-sources.md`.
@@ -0,0 +1 @@
1
+ behavior-validation-and-today-spec
@@ -0,0 +1,108 @@
1
+ {
2
+ "plan_slug": "behavior-validation-and-today-spec",
3
+ "schema_version": 2,
4
+ "created": "2026-08-31T18:27:51Z",
5
+ "updated": "2026-08-31T18:41:30Z",
6
+ "deviations": [],
7
+ "evidence": [
8
+ {
9
+ "id": "e1",
10
+ "obligation_ref": "o1",
11
+ "test_ref": "tests/test_obligation_warnings.py",
12
+ "behavior_text": "asserts converge and plan converge emit a warning naming the obligation id and seam when no approved evidence exists, that proposed or superseded evidence does not discharge it, and that ready flags and lapse exclusions are untouched",
13
+ "contract_text": "an obligation with no approved evidence emits a visibly-untested warning naming the obligation and its seam, and ready_for_spec / ready_for_plan stay untouched",
14
+ "evidence_type": "automated",
15
+ "strength": "execution",
16
+ "strength_basis": "29-test behavioral file ran green at the named commit in the run just recorded; assertions read and matched against the obligation text",
17
+ "outcome": "pass",
18
+ "run": {
19
+ "timestamp": "2026-08-31T21:27:40+03:00",
20
+ "commit": "3945fb7"
21
+ },
22
+ "origin": "llm",
23
+ "status": "approved",
24
+ "superseded": false
25
+ },
26
+ {
27
+ "id": "e2",
28
+ "obligation_ref": "o2",
29
+ "test_ref": "tests/test_today.py + tests/test_today_cli.py",
30
+ "behavior_text": "asserts the projection loads every frame, plan, and delivery fail-open with diagnostics, that devague today writes docs/current-spec.md and every other file hashes byte-identical before and after, and that the same stores project to the same bytes",
31
+ "contract_text": "the projection walks every frame, plan, and delivery fail-open, writes only docs/current-spec.md, and leaves every store file byte-identical",
32
+ "evidence_type": "automated",
33
+ "strength": "execution",
34
+ "strength_basis": "52 behavioral tests ran green at the named commit, including the hash-everything-before-and-after pin and two determinism pins",
35
+ "outcome": "pass",
36
+ "run": {
37
+ "timestamp": "2026-08-31T21:27:40+03:00",
38
+ "commit": "3945fb7"
39
+ },
40
+ "origin": "llm",
41
+ "status": "approved",
42
+ "superseded": false
43
+ },
44
+ {
45
+ "id": "e3",
46
+ "obligation_ref": "o3",
47
+ "test_ref": "tests/test_summary_delivery_claims.py",
48
+ "behavior_text": "asserts one Delivery Claims row per obligation-bearing claim with ladder strength from best approved passing evidence, failing evidence rendered as FAILING, proposed as pending, and approved lapses capping rendered strength with most-restrictive-wins",
49
+ "contract_text": "one row per obligation-bearing claim renders ladder strength from approved passing evidence, with approved lapses capping renderable strength",
50
+ "evidence_type": "automated",
51
+ "strength": "execution",
52
+ "strength_basis": "25-test behavioral file ran green at the named commit; cap mapping and row-state assertions read directly",
53
+ "outcome": "pass",
54
+ "run": {
55
+ "timestamp": "2026-08-31T21:27:40+03:00",
56
+ "commit": "3945fb7"
57
+ },
58
+ "origin": "llm",
59
+ "status": "approved",
60
+ "superseded": false
61
+ }
62
+ ],
63
+ "deltas": [
64
+ {
65
+ "id": "b1",
66
+ "kind": "added",
67
+ "behavior_text": "converge and plan converge warn on behavioral obligations with no approved evidence \u2014 visibly untested, never gating",
68
+ "caused_by": [
69
+ "c6"
70
+ ],
71
+ "evidence_refs": [
72
+ "e1"
73
+ ],
74
+ "origin": "llm",
75
+ "status": "approved",
76
+ "superseded": false
77
+ },
78
+ {
79
+ "id": "b2",
80
+ "kind": "added",
81
+ "behavior_text": "devague today projects the behavior ledger across all frames, plans, and deliveries into the committed docs/current-spec.md, fail-open and read-only over stores",
82
+ "caused_by": [
83
+ "c7"
84
+ ],
85
+ "evidence_refs": [
86
+ "e2"
87
+ ],
88
+ "origin": "llm",
89
+ "status": "approved",
90
+ "superseded": false
91
+ },
92
+ {
93
+ "id": "b3",
94
+ "kind": "added",
95
+ "behavior_text": "devague summary's Delivery Claims table renders per-claim evidence strength on the coverage/fidelity/execution/sensitivity ladder, capped by approved lapses",
96
+ "caused_by": [
97
+ "c20"
98
+ ],
99
+ "evidence_refs": [
100
+ "e3"
101
+ ],
102
+ "origin": "llm",
103
+ "status": "approved",
104
+ "superseded": false
105
+ }
106
+ ],
107
+ "supersessions": []
108
+ }