Commit graph

3 commits

Author SHA1 Message Date
305f1687b7 fix(board): one spec for next-cost, and it is the rubric's
The board line's cost field had two specifications and one of them was this
script. `--help` prescribed a versionless `sonnet/xhigh`; the global model
rubric it points at spells the model `Sonnet 5 / xhigh`. A session following
either was correct by its own source, so the field drifted with nobody making
a mistake. Measured across a real 44-repo tree: 14 board lines carrying eight
distinct strings, and not one of them the form documented here - the only
spelling nobody used was ours.

The help now prescribes the rubric's, which is also what most lines already
carry. The parser is untouched and stays lenient: it reads to `;` or `-->` so
the rubric's spacing survives, and the fixtures still vary the spelling on
purpose to pin that. Read-side leniency was never the defect; it is what makes
a documentation-only fix sufficient.

No normalization at read, deliberately. Board lines are rewritten every session
by convention, so an unambiguous spec self-heals the existing lines in about one
session per active repo - mapping variants would be permanent code migrating
data that migrates itself. Nothing compares the field mechanically today either:
KOST is a display column and the board sorts on a numeric bucket key, so the
defect was real but latent. Two checks (28 -> 30) pin the documented form,
red first, because cleaning the data cannot fix a spec that regenerates the
divergence every session. Validation at write has no write path to attach to:
nothing in this repo emits a board line outside the fixtures.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U6EixQo6hpoRCVtiAXdnFs
2026-07-28 22:06:45 +02:00
f7ad4741a3 docs(board): keep the axis rationale, drop the private referents
The v0.9.0 comments explained the attention-vs-topic axis by pointing at the
operator's private cross-repo register by path, naming an internal incident
code, and quoting a measured count of the operator's own repo population.
This repo mirrors to a public remote, so operational metadata about a private
machine does not belong in it - the reasoning does, the referents do not.

Rewritten self-contained: the topic-axis contrast now stands on its own terms
without citing a file a public reader cannot see, the defect class is named
rather than coded, and the worktree rationale keeps WHY .git is tested with
-e (a worktree or submodule has .git as a FILE) while dropping the census
that motivated measuring it. Illustrative paths stay; they carry no fact.

Comments only, no behavior change: 136 + 28 selftest checks and 6/6 node
tests unchanged. No version bump, so the v0.9.0 tag and the catalog ref stay
where they are - and with them the pre-scrub text, which history and that tag
still carry. Un-publishing that is a history rewrite and the operator's call,
not a side effect of a comment edit.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U6EixQo6hpoRCVtiAXdnFs
2026-07-28 21:35:42 +02:00
61e224ccc3 feat(board): cross-repo attention board as script + skill (0.9.0)
The mailbox answers "who wrote to me"; it never answered "which repo
deserves the next session". board.sh scans every discovered repo and reads
three sources each: the STATE.md next-step block with its optional board
line, git status, and that repo's pending mailbox count. Read-only by
construction, pinned by board-selftest.sh (28 checks).

It ships here rather than as a personal script because the mailbox is one
of its three inputs and the two carry the same axis distinction: a pending
count means others are waiting on that repo, while who a repo waits ON comes
only from its board line, since the message format has no reply-to field.
Splitting the board from the mailbox would put that distinction in two
places. It also lets the skill resolve the engine through CLAUDE_PLUGIN_ROOT
like every other script here, instead of depending on a file that exists
only in ~/.claude/scripts (a directory with no remote and no backup).

The skill is a ranking, not a report: re-runs the board every invocation
because counts drift, ranks by what unblocks the most and what is cheapest
to move, then names one repo, the rule that fired, and the real next action
read from that repo's STATE.md. Never the table. Not wired into session
start, which would spend context on repos the session is not in.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MubwdTi88yu4hVLAFG1LbM
2026-07-28 21:15:03 +02:00