| name | recursive-spine-digest |
| description | Use when sweeping all recursive-spine-conforming repos for tracking health — aging deferrals (oldest first), stalled milestones, in-flight by lane, assigned-but-untouched issues, and debts named in closing comments but never filed, plus seedling pollen that never transplanted (hive repos). Reports honest denominators; includes the recursive-spine repo itself in every sweep. |
recursive-spine: digest
The board is the live view; this digest is the push signal.
Repo set
Read the board owner and number from the invoking context (or the invoking
repo's dialect note — docs/tracking-dialect.md or equivalent), then read
the repo list from the Spine board (gh project item-list <N> --owner <BOARD_OWNER>), falling back to the repo set recorded in the dialect note
of the repo you were invoked from; the author's founding set
(recursive-spine, plumb-line, tokenomics) is the documented default for
this installation, with private repos read from the private hive's
dialect note rather than named here. recursive-spine ITSELF is always in the
sweep — a digest that exempts its own repo is lying about its coverage.
The sweep (per repo, via gh)
- Aging deferrals: open issues with the repo's deferral label
(
deferred or its alias — read the repo's dialect note / tracking
section), sorted oldest-first, each with age in days.
- Stalled milestones: open milestones with open issues and no issue
activity in 21+ days.
- In-flight by lane: open assigned issues grouped by
lane:* label
(omit section if the repo has no lane module).
- Assigned-but-untouched: assigned open issues with no events in 14+ days.
- Unfiled debts (best effort): recently closed issues whose closing
comment contains "debt", "deferred", "follow-up", or "left behind" with no
issue reference (#N) in the same comment. Flag for human eyes; do not
auto-file.
- Seedling pollen (hive repos only): open
pollen-labeled issues whose
record still says stage: seedling, sorted oldest-first with age in
days — pollen that never transplanted is a signal, same as an aging
deferral. Omit the section for repos that are not a configured hive.
- Stale constraints pins (repos with a constraints file): docs whose
constraints-copy: provenance line pins a sha older than the current
head of docs/constraints.md, where the doc belongs to a still-open
issue — aged like deferrals. (Merged/closed docs stay green by design;
recursive-spine-handover pins the constraints sha in each closing
record, which is what makes staleness measurable.) Omit for repos
without the connective-tissue part.
Spine health (repos that carry the scripts)
If the swept repo has scripts/spine-audit.sh (convention adherence:
closed units without handover records, merged PRs citing no issue,
branches off the naming convention) and/or scripts/spine-doctor.sh
(installation integrity: labels vs the dialect note's record, board
membership staleness, stamped parts still present and wired), run them
from the repo root and fold their WARN/NOTE lines into that repo's
section. Both are report-only and always exit 0 — findings are digest
material, never CI failures. If the scripts are absent, say so:
"installation predates the health scripts" is a line in the report, not
a silent skip.
Depth (macro/micro parents)
When a swept issue has sub-issues (parent/subIssues — mechanics in
${CLAUDE_PLUGIN_ROOT}/reference/sub-issues.md, Read a tree), roll it
up and leak by age:
- A parent reports as one line with progress and head:
#249 Phase 1 — 3/6 children closed, head: #242.
- Healthy children stay folded — they do not appear as separate lines.
- Any child that individually crosses an aging or stall threshold
leaks: it surfaces as its own indented line directly under its
parent's, so folding never hides rot.
- A child issue encountered in the sweep folds under its parent rather
than appearing twice.
- If the tree cannot be read, degrade loudly per the reference: report
the issues flat and say why.
The report — briefing voice
The report reads like a briefing a colleague wrote: plain language first,
evidence after. The data, formats, and honest denominators are unchanged —
only the framing is specified here.
Open with "The week at a glance": two to four declarative sentences,
in this order — deltas first (newly aging since the last digest, resolved
since, crossed a threshold), then the single most attention-worthy item
if any, then end with the swept/failed denominator — name the failures if any. A quiet week
says so plainly ("Quiet week; nothing newly aging.").
Delta rule: before writing, read the previous digest comment on the
tracking issue (one read, no other state). If none exists or it cannot be
read as a digest, open with "No previous digest to compare" — never fake
a delta.
Every repo section leads with a status from exactly this vocabulary —
healthy, aging, needs eyes, sweep failed — in the heading, plus
one sentence saying why. A reader who reads only the leads has an
accurate picture. The full tables follow each lead as evidence, format
unchanged. Then the cross-repo "oldest five deferrals anywhere" table,
and the closing honest denominator: repos swept / repos failed (auth,
missing label, API error) — a failed repo is a line in the report, never
a silent omission. Note that 21/14-day thresholds are defaults, not
doctrine. A child issue rolled up under its parent per the Depth section appears
only there — never duplicated as a standalone line in the raw lists.
The digest never asks. Question-shaped sentences are the nudge
skill's monopoly; every briefing sentence is declarative. Informing is
not nudging.
Worked example — delta week:
The week at a glance: #38 aged past a week as a deferral, and #57 resolved since the last digest. One thing needs eyes:
Veska_Index_App's Phase-1 milestone has been silent 21 days. Swept 4/4.
plumb-line — healthy
Nothing aging; v0.8.0 has fresh activity.
(full deferral/milestone tables follow)
Veska_Index_App — needs eyes
Milestone Phase-1 stalled 21d; #242 assigned but untouched 14d.
(tables follow)
Worked example — first run:
The week at a glance: No previous digest to compare. The oldest
deferral anywhere is rs#21 (5d); nothing has crossed a stall threshold.
Swept 4/4.
Delivery
Channel is configuration, not doctrine: post as an issue comment on a
designated tracking issue, write to a file, or send to Slack — whatever the
user (or the scheduled runner's config) specifies. Never hardcode.