Skip to content

add task-auditor smell 8 for one-off criteria on recurring tasks - #146

Merged
bborbe merged 2 commits into
masterfrom
fix/recurring-kind-smell
Sep 8, 2026
Merged

add task-auditor smell 8 for one-off criteria on recurring tasks#146
bborbe merged 2 commits into
masterfrom
fix/recurring-kind-smell

Conversation

@bborbe

@bborbe bborbe commented Sep 8, 2026

Copy link
Copy Markdown
Owner

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 W36 passed four gate runs at 8/10 with 0/7 smells while carrying three one-off decision criteria (a TDR amendment draft, a Status: 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

  1. Smell 8 fires on its own, exempt from the 3+ smells threshold, 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.

  2. 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-sat stamp would have missed its own regression fixture.

Verification

  • make precommit green.
  • Local /coding:pr-review loop converged: 0 mechanical findings across 79 ast-grep rules; one real judgment finding (missing conventional changelog prefixes) found and fixed.
  • End-to-end regression test against both fixtures is pending the release + plugin install, per the task's Definition of Done — the auditor must flag W35 and must not flag the scope-corrected W36.

@bborbe
bborbe marked this pull request as ready for review September 8, 2026 07:06

@ben-s-pull-request-reviewer ben-s-pull-request-reviewer Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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."
    }
  ]
}

@bborbe
bborbe merged commit 49b7c4a into master Sep 8, 2026
3 checks passed
@bborbe
bborbe deleted the fix/recurring-kind-smell branch September 8, 2026 07:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant