You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
tri: stranded-work finder and cron tick resume card #5786
Two things a cron loop needs at the top of every tick are read by hand today:
Stranded work. On 2026-10-04 a tick found by accident that trinity's feat/queen-browser-embedded held 2 owner-approved commits, pushed 2026-09-29, merging clean into main, with no pull request -- four days with nothing reporting it. No command lists remote branches that have unique commits, are older than N hours, and have no open PR.
Resuming a tick. A tick starts cold from cron_tracking/<id>/tick-state.json and ledger.md (LOOP-RULES R0) plus the worktrees the state names. The fact that matters most -- did the previous tick die mid-work? -- is a join of claim age and a dirty tree, and nobody does that join by eye.
Proposal
Two read-only helpers under scripts/tri_loop/, stdlib only, --json, exit codes stated, each printing what it does NOT establish:
tri stranded [PATH...] [--repo-path PATH] [--hours 24] -- no fetch (refs as of the last fetch, said so); default from refs/remotes/origin/HEAD; open PR heads from gh pr list (if gh fails: "PR state unknown", nothing called stranded); skips dependabot/*, patch-equivalent branches (git cherry) and branches whose content is already on the default (squash merges); reports ahead/behind, last commit, and whether git merge-tree --write-tree merges clean -- with merge-tree pointed at a throwaway object directory so nothing is written.
tri tick [--id ID] -- the resume card: topic, tick, claim and its age, last ledger ## section, per-worktree exists / branch / dirty / ahead-behind vs base / last commit age, and anomalies with a one-line fix each (stale claim + dirty tree, worktree missing, branch mismatch, base unknown, state unparseable, ledger tick != state tick). Exit 0/1/2. Never writes; git runs with GIT_OPTIONAL_LOCKS=0.
Each gets a self-test in scripts/ci/ run by loop-tools-gate, with a negative control.
Activity
tri census: re-bless fetches 4->5 and shell 283->285 for tri stranded…
fix(tri): tri harness gives the browser a private TMPDIR -- Chrome on…
feat(tri census explain): name the file behind a moved census number (#…
feat(tri pr ready): ask a check's own workflow when the commit window…
fix(tri tick): a released claim is not held, and the dead-tick fix na…
tri pr-state: a loop's pull requests with tri pr ready's verdict, not…
feat(tri pr ready): --why compares what a pre-existing failure printed (
feat(tri): tri harness -- a page measured at 375px and 1024px, every …
merge master into feat/tri-stranded-tick: #5828 landed as 4499e27
merge master into feat/tri-stranded-tick: #5951 removed the NOW gate
feat(queen): BROWSER says what it does before sign-in, and names the …
Deploy d047a86
merge master into feat/tri-stranded-tick: catch up to e52d1ea
tri: stranded-work finder and cron tick resume card (#5787)
gHashTag commentedon Oct 4, 2026
Delivered by #5787, squash-merged as c107cd2 (tri stranded + tri tick). The PR body said Refs, so GitHub did not close this one on its own.
fix(t27c): refuse a Rust match block the parser kept as text; rewrite…
fix(t27c): refuse macro calls and typeless fields; rewrite eight Mark…