Skip to content

feat(skills): measure how far the bug-pattern digest has fallen behind - #355

Merged
ako merged 2 commits into
mainfrom
feat/digest-trigger
Sep 1, 2026
Merged

feat(skills): measure how far the bug-pattern digest has fallen behind#355
ako merged 2 commits into
mainfrom
feat/digest-trigger

Conversation

@ako

@ako ako commented Sep 1, 2026

Copy link
Copy Markdown
Owner

Step 3a of the fix-issue restructure — the trigger. (#345 repointed diagnosis at the digest; #354 made the findings consumable; this makes the gap visible so the digest stops decaying.)

The number

digest: 607 of 631 findings added since the last bug-pattern sync (2026-05-24, 3 pages)

96%. The three docs-wiki/bug-patterns/ pages were written from the ~24 findings that existed in May. Nothing has re-synced since, because the digest is on demand and no step demands it: the After-Every-Fix checklist feeds the input and nothing consumes it.

Three parts

Findings gain a date, backfilled by git blame over the table they came from — 630 of 631 matched, the last being the one appended after the extraction. It is last touched, not first written: a row later corrected carries the correction's date, and the README says so rather than letting the field imply more than it knows.

scripts/digest-status.sh reports the gap — pages, last sync, findings, how many arrived since, and a per-area breakdown:

  area                    findings     since   in a page
  mdl/executor                 248       238   NO
  cmd/mxcli                     95        95   NO
  mdl/backend                   83        82   NO
  mdl/grammar                   53        51   NO
  mdl/visitor                   28        27   yes
  sdk/mpr                       22        16   yes

The "in a page" check is a substring heuristic on purpose. The alternative is a covers: list in every page's frontmatter, which is one more thing to keep true and would rot silently the first time someone forgot it. It's skipped for a bare first segment like model, which matches almost any prose and would answer a confident yes.

check-findings prints the one-line form on every run. That placement is the actual mechanism, not a convenience: it's the command the checklist already runs, so the number lands in front of whoever just appended a finding. A report nobody invokes is precisely how this went three months without a sync.

Advisory, deliberately

Everything here exits 0. A stale digest must not block an unrelated fix, and neither number is a target to drive to zero — they exist so the decision to sync is made deliberately rather than by default. make digest-status for the breakdown; the checklist line in CLAUDE.md and fix-issue.md says to sync when a class of failure keeps recurring, not when a counter crosses a threshold.

/mxcli-dev:wiki-sync now points at digest-status as the scope question for the bug-patterns/ category.

Next

Step 3b: actually writing the pattern pages. 607 undigested findings, and the areas with the largest gaps (mdl/executor 238, cmd/mxcli 95, mdl/backend 82) have no page mentioning them at all.

🤖 Generated with Claude Code

docs-wiki/bug-patterns/ digests the findings into failure classes, and
is the layer a diagnosis is supposed to start at. It has three pages,
all synthesised on 2026-05-24. Nothing has re-synced since, because the
digest is on demand and no step demands it: the After-Every-Fix
checklist feeds the input and nothing consumes it.

Now measured rather than asserted:

  digest: 607 of 631 findings added since the last bug-pattern sync
  (2026-05-24, 3 pages)

96%. The three pages were written from the ~24 findings that existed in
May.

Three parts.

Findings gain a `date`, backfilled by git blame over the table they came
from (630 of 631 matched; the last is the one appended after the
extraction). It is LAST TOUCHED, not first written — a row later
corrected carries the correction's date — and the README says so.

scripts/digest-status.sh reports the gap: pages, last sync, findings,
how many arrived since, and a per-area breakdown with whether any page
even mentions that area. The mention check is a substring heuristic on
purpose; a covers: list in every page's frontmatter would be one more
thing to keep true, and it would rot silently. It is skipped for a bare
first segment like "model", which matches almost any prose.

check-findings prints the one-line form on every run. That placement is
the actual mechanism: it is the command the checklist already runs, so
the number lands in front of whoever just appended a finding. A report
nobody invokes is how this went three months without a sync.

Advisory throughout — always exits 0. A stale digest must not block an
unrelated fix, and neither number is a target to drive to zero; they
exist so the decision to sync is made deliberately rather than by
default.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@ako
ako merged commit 45fb436 into main Sep 1, 2026
12 of 13 checks passed
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