Repository navigation
feat: add coverage mode to task-manager-agent and goal-manager-agent - #293
Conversation
There was a problem hiding this comment.
Now I have all the information needed for classification. Let me do the in-session classify and adjudicate:
Classification (Step 4c-sel):
agent-cmd/agent-frontmatter→ applicable (agents/*.md changed)agent-cmd/command-frontmatter→ applicable (commands/*.md changed)agent-cmd/command-thin→ applicable (agents/.md + commands/.md changed)agent-cmd/gap-driven-feedback→ applicable (agents/.md + commands/.md changed)agent-cmd/no-user-prompts→ applicable (agents/.md + commands/.md changed)agent-cmd/scripts-in-claude-dir→ applicable (agents/.md + commands/.md changed)agent-cmd/single-source-of-truth→ applicable (agents/.md + commands/.md changed)changelog/conventional-prefix-required→ applicable (CHANGELOG.md changed)git-commit/feature-branch-no-tag→ skipped —@commitstrigger, not a diff rulegit-commit/imperative-mood→ skipped —@commitstrigger, not a diff rulegit-workflow/never-direct-commit-to-master→ skipped —@commitstrigger, not a diff rulego-security/resource-ownership→ skipped —@commitstrigger, not a diff rulego-security/tenant-isolation→ skipped —@commitstrigger, not a diff rulemarkdown-todo/lowercase-x-for-complete→ applicable (**/*.md changed)
Adjudication (Step 4d-sel):
All 8 applicable rules were reviewed against the diff. All agents have valid frontmatter (name, description, tools, model), all commands have valid frontmatter (description, argument-hint, allowed-tools), CHANGELOG uses feat: prefix. No violations found. No mechanical findings from Step 4a.
Traceability: 15 candidates, 8 applicable, 6 skipped (all @commits-triggered), 1 skipped (not a code change)
PR Review: feat: add coverage mode to task-manager-agent and goal-manager-agent
Reviewer: selector mode, no sub-agents spawned
Files changed: 5 (CHANGELOG.md, agents/goal-manager-agent.md, agents/task-manager-agent.md, commands/goal-status.md, commands/task-status.md)
+134 lines, −6 lines
Selector Mode Traceability
- Candidates: 15 rules matched by Step 4b-i glob filter
- Applicable: 8 rules selected by Step 4c-sel (8 ≤ 15)
- Skipped:
git-commit/feature-branch-no-tag→@commitstrigger not applicable to diff reviewgit-commit/imperative-mood→@commitstrigger not applicable to diff reviewgit-workflow/never-direct-commit-to-master→@commitstrigger not applicable to diff reviewgo-security/resource-ownership→@commitstrigger not applicable to diff reviewgo-security/tenant-isolation→@commitstrigger not applicable to diff review
- Mechanical funnel: 0 findings from 79 YAMLs run
Must Fix (Critical)
None.
Should Fix (Important)
None.
Nice to Have (Optional)
None.
Notes
- The feature is well-scoped: a new
coverageaction added to both agents, gated behind a--coverageflag on the two slash commands. The specification correctly identifies the inverse-map gap (forward necessity checking already existed; reverse coverage hadn't been answered). - The
goal-manager-agentcoverage action correctly handles the goal/topic distinction for subject resolution and for closure-box identification (topic has no# Definition of Done— uses# Completion Gateinstead). - The
task-manager-agentcoverage action correctly excludesparse_checkboxesfor box collection (it greps the whole file including# Taskswhich are drivers, not boxes), requiring section-bounded parsing instead. - Both actions correctly enforce:
measuredrequires an external named source;—proposal againstnonedriving cell is an omission; reconciliation line has two independent partitions; evidence shape is exactly one row per box. - The commands correctly delegate to the agents without re-deriving the rating, per spec.
selector clean — no adjudication needed
{
"verdict": "approve",
"summary": "Feature adds a well-specified coverage action to both agents and commands. The reverse-map specification correctly handles the goal/topic subject distinction, box vs driver separation, evidence rating rules, reconciliation line partitions, and read-only constraint. No violations found in applicable rule set (agent/command frontmatter, changelog prefix, thin-command, gap-driven-feedback, no-user-prompts, scripts-in-claude-dir, single-source-of-truth, markdown-todo).",
"comments": [],
"concerns_addressed": [
{
"concern": "correctness: coverage action specification must accurately describe forward+reverse mapping logic",
"disposition": "addressed",
"detail": "Both agents' coverage actions correctly implement the reverse map (box→driver), distinct from the existing forward necessity check (driver→box). goal-manager-agent properly distinguishes goal vs topic subjects and their different closure boxes; task-manager-agent correctly uses section-bounded parsing to exclude # Tasks from box collection."
},
{
"concern": "correctness: --coverage flag behavior must correctly render the coverage table per specification",
"disposition": "addressed",
"detail": "Both commands (goal-status.md, task-status.md) delegate to their respective agents with the coverage action, render the table verbatim below the anchor pair, suppress the status body, and explicitly do not re-derive the rating — matching the spec's requirements."
}
]
}
Adds the reverse map both manager agents were missing.
task-manager-agentandgoal-manager-agenteach checked necessity in the forward direction only — a task → the goal box it serves, and a goal's tasks → the box each serves. Nothing answered the inverse: for each open box, what drives it, and what evidence exists for it.What ships
A new
coverageaction on both agents, emitting one row per closure box:# Success Criteria+# Definition of Done; drivers: the tasks linked in# Tasks# Success Criteria+# Completion Gate(a topic carries no# Definition of Done); drivers: the member goals under# GoalsThe subject kind is resolved goal-first and reported, because the two kinds differ in both halves of the map.
/vault-cli:task-status --coverageand/vault-cli:goal-status --coveragerender the table below the anchor pair.Why
measuredmust name a sourceA rating that scans a box's own text for a quoted result reads nothing, and is indistinguishable from a real reading unless the row names where the result came from. So
measured(<source>)names the Progress entry or artifact —measured(progress 2026-10-10),measured(PR #240),measured(tag v0.126.0)— and ameasuredrow carrying no source is a defect rather than a pass.Likewise a
nonedriving cell must carry a proposal naming the missing prerequisite;—againstnoneis an omission, not a pass. Each run ends with a reconciliation line whose parts must sum to the box count.Both actions are read-only — they never modify, create, re-link or tick anything, on the subject or on any driver.
Verification
make precommit— passes (8 Go packages, 10 rule suites, golangci-lint,go vet, osv-scanner, trivy fs, CHANGELOG structure, addlicense).make check-versions— all four version strings equal at0.168.7; the new## Unreleasedheading does not disturb the alignment check.agents/andcommands/are executable surface, not docs.