add task-auditor smell 8 for one-off criteria on recurring tasks - #146
Merged
Conversation
bborbe
marked this pull request as ready for review
September 8, 2026 07:06
There was a problem hiding this comment.
All four version strings are aligned. The CHANGELOG has conventional prefixes. The mechanical funnel had 0 findings. The diff is entirely documentation (markdown only — no Go source, no test files, no Makefile changes). The precommit step is not required for docs-only changes per CLAUDE.md.
Now let me produce the final verdict:
{
"verdict": "approve",
"summary": "PR adds smell 8 (one-off criterion on recurring task) to task-auditor with correct self-firing behavior, includes both recurring-detection signals (frontmatter + cadence-marked title, trailing or embedded), the per-criterion 'would this be true again next firing?' test, and a successor-check clause. The matching authoring rule is added to task-writing.md § Scope Check. All four version strings remain aligned at v0.126.3. No code changes — no Go files, no tests, no Makefile touched.",
"comments": [],
"concerns_addressed": [
{
"concern": "correctness: smell 8 is exempt from the 3+ smell threshold and fires on its own — verify the widened include-condition is intentional and not a regression",
"disposition": "addressed",
"detail": "Explicit exemption documented at agents/task-auditor.md:109 with rationale: 'a recurring task carrying one one-off criterion and nothing else wrong scores clean under a count rule while shipping the exact defect the smell exists to catch.' The scope-fit section template at :370 is updated to match. This is clearly intentional."
},
{
"concern": "correctness: recurring detection accepts embedded period tokens not just trailing stamps — confirm the regex/heuristic does not false-positive on non-recurring tasks",
"disposition": "addressed",
"detail": "agents/task-auditor.md:122 explicitly names the embedded form 'ORB DE40 W35 … to W36' as the example. The smell only applies when recurring is already established via frontmatter OR cadence-marked title; a non-recurring task that happens to mention a week number in prose would not be caught unless it also has a cadence-marked title. The embedded form is explicitly allowed because 'instances scaffolded by hand routinely carry the period inline and no recurring: key, and those are exactly the instances that drift.'"
},
{
"concern": "correctness: successor-check clause for scaffolded next instance — verify the logic correctly identifies and flags the pre-copied one-off criteria in the next firing",
"disposition": "addressed",
"detail": "agents/task-auditor.md:126 specifies the clause in full: 'always check the next instance too, not just this one. When the smell fires, look for the successor instance (same title stem, next period stamp) and say whether it inherited the criterion, so the fix covers both rather than leaving the clone to re-seed it.' The task-writing.md mirror at :310 is consistent."
},
{
"concern": "tests: W35 fixture should trigger smell 8; scope-corrected W36 fixture should not — confirm both regression fixtures are present and correctly calibrated",
"disposition": "not-an-issue",
"detail": "This is a documentation-only change (agents/task-auditor.md, docs/task-writing.md, CHANGELOG.md). No test files exist in the diff. The concern references fixtures that do not exist in this repo — task-auditor is an agent definition (markdown), not a program with unit tests; audits run against real vault task files. No regression fixtures are expected or missing."
}
]
}
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
task-auditor's Task Scope Fit section has seven smells, and all seven measure size or vagueness. None asks whether a criterion belongs on a task that fires every week. Cadence and kind of work are two different axes, and only the first was checked.Observed miss:
ORB DE40 W35 Sunday Review and Extend Closing to W36passed four gate runs at 8/10 with 0/7 smells while carrying three one-off decision criteria (a TDR amendment draft, aStatus:line correction, and a keep-or-retire decision on the parent goal). Because recurring instances are scaffolded from their predecessor, the creep had already been copied into W36 before anyone noticed.Change
agents/task-auditor.md— new smell 8: a recurring task carrying a one-off criterion. Includes the test ("would this criterion be true again next firing?"), both recurring-detection signals, and a successor-check clause so the scaffolded next instance is fixed too.docs/task-writing.md— matching authoring rule in § Scope Check, so the constraint is stated where tasks are written, not only where they are audited.Two design calls worth reviewing
Smell 8 fires on its own, exempt from the
3+ smellsthreshold, and § Task Scope Fit's include-condition was widened to match. Without this the change is inert: the W35 fixture scores 1/8, stays under the threshold, and still reports clean — the exact false-green this is meant to kill. The justification is that smell 8 is a per-criterion correctness defect, not a size signal, so counting it toward a size threshold buries it.Recurring detection accepts embedded period tokens, not just trailing stamps. The W35 fixture has no
recurring:frontmatter key and carries its period inline (W35 … to W36), so a detector requiring a trailing- 2026W35-satstamp would have missed its own regression fixture.Verification
make precommitgreen./coding:pr-reviewloop converged: 0 mechanical findings across 79 ast-grep rules; one real judgment finding (missing conventional changelog prefixes) found and fixed.