Skip to content

Task Completeness

Investigate whether a task was already completed (fully/partially/differently), judge the spirit not the letter, then optionally mark it complete with the correct prior date.

Workflow name: task-completeness

Execution: main

Slash command: /wb-task-completeness

Override not allowed

Steps

# ID Name Type Depends on
1 gather-evidence Gather completion evidence code
2 investigate Investigate completeness reasoning gather-evidence
3 resolve Confirm and apply reasoning investigate

Step instructions

investigate

You are judging whether this task was ALREADY completed — and if so, WHEN, BY WHOM, and HOW WELL.

Start from step_results['gather-evidence']: - task — text + linked note_content = the original intent (and any prescribed how-to). - provenance — created_by / assigned / developed_by / intent_attribution. developed_by names the sessions that structurally shipped work (a commit referencing the task id), each with rung, note-read awareness, and informed/convergent classification. This is your starting point — no git archaeology from scratch. - session_evidence — per session (across created/assigned/developed/note_reader roles): commits, writes, summary. Heed each note and the top-level cache_note. A note_reader role means the session demonstrably READ the task note (native Read of the note file, or a task_read/task_assign call) — the Rung-3 surface for "read it, did the work, never referenced the task id in a commit." Pure-triage reads (read, but no commits/writes) are pruned; the ones that survive carry work.

Step 0 — restate the INTENT (do this FIRST). From task.note_content, name (a) what the task actually asked for and (b) any prescribed how-to (a "Suggested Approach"/design in the note, possibly with a v1-vs-follow-up split). Judge the implementation against THIS intent — NOT the commit subject, which may bundle unrelated work or mis-state scope. The prescribed how-to is what makes the divergence judgment possible: did the impl follow it, improve on it, or cut a corner? Skipping Step 0 is how a shallow "looks done" pass slips through.

Then investigate ADAPTIVELY, cheapest first, stopping when confident: 1. The provenance block + session_evidence. 1.5. Inspect session_evidence for note_reader-role entries that ALSO carry commits or writes — the strongest Rung-3 developer candidates (read the note + made changes but never referenced the task id in a commit, i.e. the classic "forgot to toggle"). When developed_by is empty, these are your best leads; session_search into them for rationale before judging. 2. session_search into a developer's session id to recover the design reasoning (WHY they built it that way). Plus git log --grep/-S and gh PR/commit search for anything provenance missed. 3. Read the ACTUAL code/tests to confirm the behavior is present now and matches (or diverges from) the prescribed how-to. 4. Run the targeted test(s) only if presence is still ambiguous.

Judge the SPIRIT, not the letter. Pick exactly one disposition: done | done-differently | partial | consciously-descoped | not-done. If the note scoped a v1 and blessed a follow-up, shipping the v1 is done — but surface the unbuilt follow-up explicitly (it is a scope boundary, not a gap).

If done-differently AND the note prescribed a how-to: set divergence to better | lateral | worse and justify it — does the shipped design beat what was proposed, match it, or cut a corner? Use the developer's rationale (from session_search) + the code. Frame with awareness: informed divergence = deliberate; convergent match = independent corroboration. When developed_by is empty, that's the Rung-3 intent-only case — judge by reading code/tests, not by the missing link.

Return ONLY your delta: - disposition (one of the five) - evidence (non-empty list of concrete citations: commit SHAs, PR URLs, path:line, test names, session-id+turn for rationale, note excerpts — each tied to what it proves) - completion_date (ISO YYYY-MM-DD of the LANDING COMMIT, or null; cite its SHA in evidence) - divergence (better | lateral | worse | na — na unless done-differently with a prescribed how-to) - confidence (high | medium | low, with a one-clause justification keyed to signal strength) - recommended_action (one sentence: mark done backdated / finish remainder / spin off residual / leave open)

resolve

Open with a plain-language recap BEFORE any verdict fields — enough that the user can judge without reading the evidence list: 1. What the task asked for — its intent + any prescribed how-to (from the note), including any v1-vs-follow-up scoping. 2. The situation found — who developed it (informed vs convergent), when, and how the implementation compares to what was prescribed (followed it / improved on it / diverged / partial), plus any deliberately-deferred follow-up.

THEN give the verdict fields: disposition + confidence + divergence + completion_date + a one-line provenance summary. Act ONLY on explicit user confirmation — never mutate first.

Recommend by disposition: - done / done-differently: offer to mark complete BACKDATED via wb_run('task_toggle', {'task_id': '<id>', 'done': true, 'done_date': '<completion_date>'}). For done-differently, state the divergence verdict (better/lateral/worse) plainly so the user signs off on 'done a different way', not 'done as written'. If a follow-up was deferred, offer to spin it off via task_create. - consciously-descoped: same backdated toggle; state plainly the dropped part was a deliberate descope. - partial: use developed_by to delineate what SHIPPED vs the remainder. Offer BOTH (a) finishing the remainder now and/or (b) spinning the remainder off as a handoff via wb_run('task_create', {...}); optionally backdate-complete the shipped portion if separable. - not-done: recommend leaving it open; optionally offer to narrow the task text to the true remainder.

If the task is ALREADY state=done, say so up front — no toggle needed; the value of the run is the contextualized confirmation (and surfacing any deferred follow-up), not a mutation.

Context

Investigate whether a task the user is unsure about was ALREADY completed — fully, partially, or differently — and if so, mark it complete with the correct PRIOR date.

Core principle — judge the SPIRIT, not the letter. Tasks are written before the work; designs change, get improved, or a sub-part is deliberately dropped. Decide whether what is PRESENT in the codebase/notes satisfies the task's INTENT.

Lead with intent. Before you judge OR present, restate what the task actually asked for — read task.note_content for its INTENT and any prescribed how-to (a "Suggested Approach"/design in the note). Judge the implementation against THAT, never against the commit subject: a commit can bundle unrelated work, and its subject can under- or over-state the task's scope. Mistaking the commit subject for the intent is the classic shallow pass.

Provenance-first. The gather-evidence bundle carries a provenance block (created_by / assigned / developed_by). developed_by is the structural answer to "who shipped this" — sessions whose commits reference the task id — each tagged with note-read awareness and an informed/convergent classification. Start there; it replaces hand git-archaeology. session_search into a developer's session recovers the design reasoning before you judge.

Disposition rubric (pick one): done / done-differently / partial / consciously-descoped / not-done.

done-differently is a QUALITY judgment, not just intent-coverage. When the task prescribed a how-to (an approach/design in the note) and the implementation diverged, classify the divergence — better / lateral / worse — and justify it from the developer's rationale + the code. "Intent met by a different, better-reasoned design" and "intent met by a worse shortcut" are both done-differently but very different verdicts; say which.

Informed vs convergent. Use awareness: informed development (read the note / assigned) that diverged is a deliberate design choice; convergent development (no signal) that hits the same intent is independent corroboration, not a footnote. developed_by empty + no structural link is the Rung-3 (intent-only) case — judge by reading the code/tests, never by absence of a link.

Verification ladder — cheapest first, stop when confident: (1) the provenance block + per-session commits/writes, (2) session_search into the developing session for rationale, plus git log --grep/-S and gh PR/commit search for anything provenance missed, (3) read the actual code and tests, (4) run the targeted test. Inactivity is NOT completion.

Dating: completion date = the date the LANDING COMMIT merged, not today. Cite the SHA.

Confidence. Every verdict states a confidence (high/medium/low) justified by signal strength — a structural developed_by plus read code is high; an intent-only Rung-3 inference is medium-at-best. Be authoritative where the evidence is, honest where it isn't.

Always confirm before mutating. investigate produces the judgment; resolve acts only on explicit user approval. Backdating uses task_toggle's done_date (ISO YYYY-MM-DD).