Skip to content

fix(telemetry): a backlog declaration the report can actually read - #780

Merged
blafourcade merged 1 commit into
nextfrom
fix/a-backlog-link-nothing-can-read
Sep 6, 2026
Merged

fix(telemetry): a backlog declaration the report can actually read#780
blafourcade merged 1 commit into
nextfrom
fix/a-backlog-link-nothing-can-read

Conversation

@blafourcade

Copy link
Copy Markdown
Contributor

What

The by_backlog axis rests on one file per task folder — backlog-link.json — and nothing checked that the file was readable. Of the three this repository held, two carried writtenAt / writtenBy while cli/src/infrastructure/adapters/task-backlog-adapter.ts:30 reads written_at / written_by. Those two parsed as nothing.

Measured on the real sink, 30 days

Before:

{"backlog":"ai-driven-dev/framework#694"}    4
{"declaration":"unreadable"}               130
{"declaration":"none"}                    2918

After, same window, same records:

{"backlog":"ai-driven-dev/framework#746"}  133
{"backlog":"ai-driven-dev/framework#694"}    4
{"declaration":"none"}                    2918

The axis was never broken

It reported unreadable truthfully, on its own row, exactly as TaskBacklogDeclaration requires of a file it cannot parse — never folded into "declared nothing". What was missing is anything that reads that row before a person does.

Both wrong files were written by aidd-orchestrator:01-sdlc. Its own 01-frame.md tells it to carry the resolved ticket so that "whichever of Spec or Plan first creates the delivery folder can declare it there". It wrote the file itself instead, and took the field names from the TypeScript interface rather than from what either skill teaches.

The guard is the durable answer rather than a fourth copy of the JSON block in the orchestrator's own reference: a third skill inventing a fourth spelling now fails here, not in a report nobody reads.

The guard

Two cases. The first asserts every tracked backlog-link.json carries the three fields the reader looks for, in the spelling it looks for them. The second asserts those same three names are what aidd-pm:04-spec and aidd-dev:01-plan actually teach — because the reader is a cli/ module and this is a repository script test, so the rule is restated here, and a restatement drifting from the lesson is exactly what produced the two bad files.

Mutations run, both killed:

Mutation Red
a declaration put back in camelCase 1
a skill stops teaching one of the three fields 1

373 repository script tests pass, 0 broken links in 798 files.

🤖 Generated with Claude Code

https://claude.ai/code/session_01VWNxk63AGKkqE8HRqHLjGp

The `by_backlog` axis rests on one file per task folder, `backlog-link.json`, and
nothing checked that the file was readable. Of the three this repository held, two
carried `writtenAt` and `writtenBy` while `task-backlog-adapter.ts` reads
`written_at` and `written_by`, so those two parsed as nothing at all.

Measured on the real sink before the fix, 30 days:

  {"backlog":"#694"}   4
  {"declaration":"unreadable"}              130
  {"declaration":"none"}                   2918

and after it, the same window and the same records:

  {"backlog":"#746"} 133
  {"backlog":"#694"}   4
  {"declaration":"none"}                   2918

The axis was never broken — it reported `unreadable` truthfully, on its own row,
exactly as `TaskBacklogDeclaration` requires of a file it cannot parse. What was
missing is anything that reads that row before a person does.

Both wrong files were written by `aidd-orchestrator:01-sdlc`, which
`01-frame.md` tells to carry the resolved ticket so that "whichever of Spec or
Plan first creates the delivery folder can declare it there". It wrote the file
itself instead, and took the field names from the TypeScript interface rather
than from what either skill teaches. The guard, not a fourth copy of the JSON
block, is the durable answer: a third skill inventing a fourth spelling now fails
here rather than in a report nobody reads.

The guard restates the reader's rule, because the reader is a `cli/` module and
this is a repository script test; the second case is what keeps that restatement
honest, asserting the same three names are the ones `aidd-pm:04-spec` and
`aidd-dev:01-plan` actually teach.

Mutations run, both killed: a declaration put back in camelCase, and a skill that
stops teaching one of the three fields.

373 repository script tests pass, 0 broken links in 798 files.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VWNxk63AGKkqE8HRqHLjGp
@blafourcade
blafourcade requested a review from a team as a code owner September 5, 2026 17:06
@blafourcade
blafourcade enabled auto-merge (squash) September 6, 2026 02:41
@blafourcade
blafourcade merged commit da524ca into next Sep 6, 2026
17 checks passed
@blafourcade
blafourcade deleted the fix/a-backlog-link-nothing-can-read branch September 6, 2026 06:22
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