Reopen Task
Fix a bug in a completed task through the legal transition loop, so hooks keep attributing session time to the task and the telemetry snapshot re-reports on re-complete.
- The user names a task-id → use it verbatim.
- Otherwise match the bug against
.superharness/tasks/*/task.json(completed only) by touched files, task title, and item commits. A single strong match → state the match in one sentence and proceed. - Multiple candidates or weak evidence → list the candidates and ask the user to pick.
This is the bounded exception to the "never scan for a likely task" rule; it never applies outside completed-task bug fixes.
Reopen
superharness task transition {task-id} qa --anchor-cwd
superharness task transition {task-id} implement
--anchor-cwd pins worktree_path to the current repo so hook attribution stays exact even while other tasks are active. The qa → implement edge counts one rework — correct semantics for a post-delivery fix.
Fix
Follow superharness:test-driven-development: failing test → fix → green. Completed items accept no further transitions, so append a new fix item to task.json.tasks. Full plans validate every item against the DAG schema, so the fix item needs the full shape — a bare id/name/status entry fails FULL_DAG_METADATA_REQUIRED:
{"id": N, "name": "fix: ...", "status": "pending", "depends_on": [], "focused_verification": ["command that proves the fix"]}
Lite tasks keep their serial item schema (id/name/status only). Then record against the new item:
superharness task item {task-id} {item-id} start
superharness task item {task-id} {item-id} complete --commit {sha}
Close
superharness task transition {task-id} check
# fresh verification per superharness:verification-before-completion
superharness task transition {task-id} complete
Update verification.md with the new Verified Implementation HEAD and evidence — the snapshot reads HEAD from it first, so a stale file freezes commit/line stats at the pre-fix state.
Known Accounting Effects
- Time between the first bug report and the reopen transition is not attributed (minute-scale, accepted).
- Server upsert overwrites all non-key fields on re-report: reporter follows whoever re-completes; optional fields absent this run (e.g. coverage) overwrite stored values with null.
first_passkeeps its original verdict; the rework counter carries the regression signal.