3.6 KiB
Brief: the ledger counts only stack issue numbers
Follow-up to row 7 (weekly ledger run, #1508), Vikunja P19 372, Gitea #1665. Sage found it in the 2026-10-11 to 10-17 run (#1508 comments 29070 and 29089).
Owner Sage, reviewer Dewey, gate owner Sage. Ledger only. Nothing live reads the ledger, and the change needs no window.
The defect
issueNumbers (packages/ledger/src/ledger.mjs:29) takes every #N it finds. It has three
callers: commit subjects in readCommits (:42), user messages in pi sessions (:165) and T3
messages (packages/ledger/src/t3.mjs:116). Commit subjects and messages also cite other
trackers, and the ledger reads those numbers as mosaicstack/stack issues. Old v1 issues still
hold the numbers below #1495 in this repo, so the foreign refs land on them and inflate the
table.
In the 10-11 week, 34 of 131 table rows were #19 to #287. The forms in the refactor log since 2026-09-07:
- a tracker name then the number:
Vikunja #259,P19 #252,Vikunja P19 #232,SetSpark #35,Launchpad #36 - a range after a tracker name:
P19 #219-#222(the second number has no name before it) - a bare foreign number:
#237 proxy,#225,Q61a #19 - a stack issue after a name that stays counted:
Gitea #1578,#1603, Vikunja #259
Every stack issue cited since the conversion is #1495 (the conversion issue) or above.
The fix
- A tracker-name skip, in
issueNumbersso all three callers get it. It drops a#Nwhen the word right before it isVikunja,P19,SetSparkorLaunchpad, case-insensitive, with one space between. This covers a Vikunja task id that someday reaches 1495.Gitea #Nandissue #Nstay counted. The existing test atpackages/ledger/tests/ledger.test.mjs:235keeps passing unchanged. - A floor, applied once in
cli.mjsmainafter the reads and beforesummarize: one helper inledger.mjsdrops numbers below the floor from each commit's issues (a commit left with none drops out of the commit total, as an untagged commit does) and from the session mentions. Issues Gitea lists as closed in range are Gitea's own data and are not filtered. This handles the bare and range forms. - The floor is a new option,
--first-issue N, a positive integer, default 1495, with a comment that cites #1495. Most CLI fixtures use#1and#2, so their runs pass--first-issue 1and keep testing what they test now. The weekly routine command doesn't change. packages/ledger/README.mdreplaces the "no attempt to remap" sentence in Counting rules with which numbers the ledger counts, and the usage line lists the option.
Amended 2026-10-19 by Sage before the build started: the first version put the floor inside
issueNumbers, which would have broken every fixture that uses a small number.
Acceptance
- One test per form listed above, each asserting the exact array
issueNumbersreturns. A CLI run on the fixture repo with the default floor shows only stack issues in the table, the commit total and the seat mentions.--first-issuewith a missing, zero or non-integer value refuses. - Two mutants, each failing at least one new test: remove the floor, and remove the tracker-name skip.
- The ledger suite and every
scripts/test-*.shgreen on Sage's gate. Dewey approves the candidate manifest. - After landing, Sage reruns the 10-11 week and posts the corrected totals on #1508. They must match the read-only recompute in 29089 (97 rows, 557 commits, 5.3 follow-ups per issue).
- The diff touches only
packages/ledger/src/ledger.mjs,packages/ledger/src/cli.mjs,packages/ledger/tests/ledger.test.mjsand the ledger README.