feat(skills): summarize-delivery — the delivery-side closure leg (0.17.0)#63
Conversation
Converged Announcement Frame + exported spec for the fifth origin skill: the delivery-side closure leg (planned vs actual, mid-work decisions, drift, evidence-backed delivery claims, remaining work). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Converged build plan for the fifth origin skill: t1 SKILL.md + template, t2 skill-sources registration, t3 flow docs + workforce handoff, t4 dogfood delivery summary for the sharper-method run, t5 release hygiene. Waves: [t1 t2 t3] -> [t4] -> [t5]. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Add summarize-delivery row to the origin-skills table and update all surrounding prose enumerations (intro, think/scope note, vendoring-policy bullet) to include the new skill alongside scope, think, spec-to-plan, and assign-to-workforce.
…wn run The skill's second use and first self-application: the run that shipped summarize-delivery, reported by summarize-delivery. 5/5 plan tasks accounted for; 5 classified drift entries (2 model reassignments after colleague's silent failures, 1 scope-limit overrun, this unplanned artifact, and the branch-namespace deviation); 3 claims held at unverified/low rather than asserted. Unplanned deliverable — recorded as drift (acceptable) in the artifact. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
PR Summary by Qodofeat(skills): add summarize-delivery closure skill (0.17.0)
AI Description
Diagram
High-Level Assessment
Files changed (15)
|
Code Review by Qodo
1.
|
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013gVnMHmeZiw2EcjSnJDGZq
Qodo (PR #63) surfaced a real data-loss bug in store.py/plan_store.py. Fixing it makes 0.17.0 "skills + one correctness fix", not skills-only — CHANGELOG gains a Fixed section, and the delivery summary gains the release-scope drift entry, the corrected claims (420 tests; CLI gains no verb but does change), and the retraction of the operator's wrong "Qodo found no bugs" reading. Addresses review comment 3553078018. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Re: finding 2 —
|



What
Adds
summarize-delivery— the fifth origin skill and the delivery-sideclosure leg of the devague method. The flow now runs end to end:
think,spec-to-plan, andassign-to-workforcemove from vague intent towardexecutable work. This skill closes the loop from executable work back to
accountable reality: it records where execution obeyed the plan, where it
changed, and what is actually safe to claim as delivered. The plan becomes a
contract, not a fiction.
It is not a polite progress report. A delivery claim without evidence is
marked
unverified, never asserted as done; partial and failed runs are validinputs, reported faithfully.
Contents
.claude/skills/summarize-delivery/SKILL.md— method-only (no script, noCLI verb, mirroring
/scopeat birth). Eight-section template: Intent,Planned Work, Actual Delivery, Mid-work Decisions, Drift From Plan, Evidence,
Delivery Claims, Remaining Work / Follow-up. Delivery-claim rows require a
confidence level plus a resolvable evidence pointer; drift entries require
exactly one of
acceptable/risky/needs-follow-up.docs/skill-sources.md— registered as the fifth origin skill.CLAUDE.md,README.md,docs/skills.md, plus an"after the final PR" handoff section in
assign-to-workforce.docs/deliveries/— two real artifacts, not examples:2026-07-09-sharper-end-to-end-method.md— the#53run. All 14 tasksaccounted for; 3 classified drift entries; one claim marked
unverifiedbecause task
t10's summary namedcli/_status.pybut its bindingacceptance criteria never required it, and it was never implemented.
2026-07-09-summarize-delivery-skill.md— this run, reported by the skillit ships.
The devague CLI gains no new verbs, no LLM calls, and no orchestration
(#20). Release
0.17.0. It is not purely skills-only: PR review surfaced areal data-loss bug in the frame/plan stores, fixed here — see below.
Method
Built with devague itself:
/thinkconverged a 21-claim, 15-honesty-conditionframe (
c41800b);/spec-to-planconverged a 5-task plan covering all 30targets (
9166f73);/assign-to-workforcefanned it out across 3 waves to amixed-backend workforce in isolated worktrees, TDD-gated on every merge
(tests + lint before and after).
Review round — one real bug fixed, one pushback
Qodo found two things. I was initially wrong about this: I hand-rolled a
regex over its comment, scraped only
<summary>tags, and reported "no bugs."Both findings live in the collapsed
<details>bodies.agex pr readsurfacedthem on the first call.
1.
Frame schema_version wrong— FIX (833ab78). Real, and the root causewas in the CLI, not the artifact.
store.py::save()andplan_store.py::save()re-emitted the
schema_versionloaded from disk instead of the one the runningbinary writes. This frame was created via
think.sh, which resolves aninstalled
devague(then 0.14.1,SCHEMA_VERSION = 1) ahead of the checkout;every later move ran on 0.16.0 and added v2-only payload while
save()keptre-stamping
1. An old binary passes the1 > 1guard, loads the file, silentlydrops all 5
scope_entriesand 15instructionfields, and rewrites — data loss.Fixed with upgrade-on-write in both stores plus a regression test each; I verified
both tests fail against the pre-fix source before accepting them. An old
binary now correctly refuses the file. Suite 418 → 420.
2.
LLM tasks stored as confirmed— PUSHBACK.plan.py:109isstatus = "proposed" if origin == "llm" else "confirmed". LLM tasks landproposedand were confirmed by the user at the review gate;confirmflipsstatusand leavesoriginas immutable provenance.origin=llm, status=confirmedis the expected terminal state after a human gate. Qodo ratesit ⭐ Low and notes the same suggestion was rejected in #15. The legitimate
residue — the state records no who/when of confirmation, so a static reader
can't distinguish user- from auto-confirmed — is recorded as follow-up.
Honest notes for the reviewer
Both delivery artifacts record their own drift. The ones that matter here:
were assigned to the
colleagueCLI (local vLLM Qwen3.6-27B). It deliveredt2correctly. It failedt3,t5, and the post-review schema fix — twiceeach — by emitting malformed tool calls as prose at step 0, changing zero
files, and exiting
0every time: 6 silent failures in 7 attempts.Silent failure is indistinguishable from success to any caller checking
$?.The operator reassigned each to
opusafter two failures; task contracts andbriefs were unchanged. Recorded as drift (
acceptable).assign-to-workforce's worked example is known-wrong. It prescribesagent/<task-id>branches, but plan-local task ids collide in therepo-global namespace — unmerged
agent/t1–t5from#53were stillpresent. This run used
agent/sd-*. Recorded as drift(
needs-follow-up); the example should be fixed upstream.t5exceeded its stated scope limit by committinguv.lock(a one-lineversion self-pin). It flagged this rather than hiding it. Recorded as drift
(
acceptable).touches
devague/.CHANGELOG.mdgained a### Fixedsection and thedelivery summary gained a release-scope drift entry, rather than letting the
"skills-only" claim quietly go stale.
called for the
#53artifact (t4). Recorded as drift (acceptable).(
unverified— it is this PR), guildmaster's re-broadcast (unverified,outside this repo), and the skill's generality (
low— one successfulapplication of it to a run it did not execute is weak evidence).
Verification
uv run pytest -n auto— 420 passed (418 + 2 regression tests), runbefore and after each of the five task merges and the fix merge.
devague/touched by this branch arestore.pyandplan_store.py, by the schema fix. No CLI verb is added or changed.#53artifact's evidence rather than trustingit: every cited file and test exists;
frame.py:15andplan.py:30readSCHEMA_VERSION = 2; PRs spec+plan: sharper end-to-end method — scope move, per-item instructions, sharper exports, guided fanout #53/feat(skills): carry the sharper method into the operator kit; add /scope (0.15.0) #54/feat: the sharper end-to-end method — scope move, instructions, sharper exports, guided fanout (0.16.0, #53 t1-t14) #58 are MERGED with merge commits67a3eca/51669f7/92c60ca; the sharper-method subset is exactly 135 tests;and
grep -ci scope devague/cli/_status.pyreturns0, confirming itsunverifiedmarker is factually correct rather than defensive hedging.Closes the open end of the method described in the issue.