From fc3741c7ff630d47b03cf1a8829955359a7d22cc Mon Sep 17 00:00:00 2001 From: theBlanketBaron Date: Mon, 9 Nov 2026 17:16:16 -0500 Subject: [PATCH 1/2] docs(roadmap): bring Rally's roadmap up to date for RAL-0's clearance From the watchman's send-back of RAL-0 at 000f32b: - the intro says Rally tracks itself and the board is archived, instead of pointing at Muster's retired docs/board.md; - "Depends on Muster" says which items still matter with Muster frozen, and where each now lives; - "What a first deployment needs" is kept as history, marked done; - RAL-9 says muster#194 (a120efc) did it, and it's submitted for a read; - RAL-136 and RAL-137 are ticked (#216 aaabbe2, #218 72b8f10), and RAL-140's entry is added, as silken-beetle wrote it. RAL-139's comes with #219. Co-Authored-By: Claude Opus 5.5 --- docs/roadmap.md | 59 ++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 46 insertions(+), 13 deletions(-) diff --git a/docs/roadmap.md b/docs/roadmap.md index 86b3b3f..d8a4629 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -7,22 +7,43 @@ information and the environment runs through all of it. A visually appealing web ledger and past ones. IDs are permanent. Don't reuse or renumber them, so they aren't in numeric order below. A story without -a "done when" line isn't ready to claim. Until Rally can track itself, stories follow the process in -Muster's `docs/board.md`. +a "done when" line isn't ready to claim. + +Rally tracks itself. Its ledger is the source of truth for every project in `web/projects.json`, Rally's own +included (the operator, 2026-11-06; RAL-24, RAL-9). The hand-kept board is archived in Muster's +`docs/board-archive-2026-11-06.md`, and Muster is frozen while the muster moves to Marshal. So stories follow +the way of working in this repository's CLAUDE.md: claim, submit at a commit, a reader other than the author +verifies at that commit (the watchman, while one is designated), then merge. The roadmap itself is cleared the +same way, as story RAL-0 ([clearance.md](clearance.md)), and a tick means the story is verified and merged. The operator agreed the design and threat model on 2026-11-02. Later phases' "done when" lines can still be refined as each story is taken. -## Depends on Muster +## Depends on Muster and Marshal + +Muster is frozen (the Muster to Marshal cutover, hold 1859), and Marshal is the line that's moving. Rally +reads and tells through either daemon (RAL-120, RAL-126). What Rally needed from Muster, and where it lives now: + +- **MUS-3: Stable identity across restarts.** Done in Muster, and carried into Marshal as MAR-9's stable + nickname. Rally ties a restarted session to its old nickname with `rally rally-session --succeeds` (RAL-110). +- **MUS-4: Show dead watchers.** Rally reads wake and activity from whichever roster gives them (RAL-7, + RAL-120, RAL-124), and says when a roster couldn't be read. Rally doesn't wait on Muster for more. +- **MUS-44: Let other programs read the observed roster.** Done. Rally now reads the union of every roster + source it's given, Muster's and Marshal's (RAL-126), so this no longer depends on Muster alone. +- **MUS-43: Give muster messages a deterministic structure.** Rally doesn't wait on it: RAL-8's digest + format, approved by the operator on 2026-11-05, is in [digest.md](digest.md), and it's sent through either + shim (RAL-120). +- **MUS-12: Give the watchman a read-only GitHub token.** Done for the service (RAL-18). It's still a token + that can't see private repositories such as RootyRoopsDAW, which Rally says rather than guesses (RAL-128). +- **MUS-39: Show that a terminal message came from the operator.** Not in Rally's hands, and whether Marshal + carries it isn't recorded here. Until something does, it limits what RAL-6 can prove: a relayed approval + is only as good as its relay, so Rally records how each answer came (`--direct` or `--relayed-by`). -- **MUS-3: Stable identity across restarts.** Claims shouldn't go stale when a session restarts. -- **MUS-4: Show dead watchers.** Needed to tell a gone agent from a quiet one. -- **MUS-44: Let other programs read the observed roster.** Rally's way to read session facts. -- **MUS-43: Give muster messages a deterministic structure.** May shape Rally's notifications. RAL-8's digest format, approved by the operator on 2026-11-05, is in [digest.md](digest.md). -- **MUS-12: Give the watchman a read-only GitHub token.** Relevant to RAL-18. -- **MUS-39: Show that a terminal message came from the operator.** Limits what RAL-6 can prove today. +## History: what the first deployment needed -## What a first deployment needs +Done. Rally's first record on Murph is from 2026-11-04, the operator retired the hand-kept board on +2026-11-06 (RAL-24, RAL-9), and every project in `web/projects.json` has been tracked by the ledger since. Kept +as written then: Rally can run on Murph, as the ledger of record for Rally's own stories first, once these are done: @@ -257,7 +278,10 @@ The bones. Everything later reads from this. 2026-11-06, relayed by the watchman: archive the old table, don't import it): the table is archived unchanged in Muster's `docs/board-archive-2026-11-06.md`, with Version 0's table section from `docs/board.md`; the watchman no longer needs it; and Muster's `docs/board.md` says Rally's ledger is the - board, read in the viewer or with `rally show` and `rally brief`. Muster's part is Castor-o7/muster#194. + board, read in the viewer or with `rally show` and `rally brief`. Muster's part is Castor-o7/muster#194. Done + there: #194 merged on 2026-11-07 as a120efc, with `docs/board-archive-2026-11-06.md` and `docs/board.md` + saying Rally is the source of truth; submitted to the watchman for its read on 2026-11-09, and ticked once + it's verified. ## Phase 4: The web app @@ -924,14 +948,14 @@ principles named were durable, accurate and reactive. Found in rally 0x7 by plus `project_changes`, through its close; the viewer's rally panel lists the changes, declared; docs/service.md's rollback table names it; with ledger, service and headless Chrome tests. Along with it, docs/service.md's table gains RAL-129's re-claim and RAL-130's `assign`, which it was missing. -- [ ] **RAL-136: The viewer shows the holds, conditions and grants in force.** From the watchman on 2026-11-09, +- [x] **RAL-136: The viewer shows the holds, conditions and grants in force.** Merged in #216 (aaabbe2). From the watchman on 2026-11-09, during the Marshal soak: the viewer had no sign of a standing record, so MAR-77's deploy hold and the cutover hold (1859) were only in `rally brief`. Done when: the service serves `/v1/standings`, a light read of the holds, conditions and grants not ended, each as declared with who declared it; the viewer reads it on every refresh and shows "Standing in force" beside the rally, holds first, each with what it's on, what releases it or its scope, its record and age, labelled declared, and says so when the service is older; an ended one isn't shown; with a unit test and a headless Chrome test, and docs/web.md. -- [ ] **RAL-137: Viewer: a solid black page background, panels keep their colours.** From Josh directly +- [x] **RAL-137: Viewer: a solid black page background, panels keep their colours.** Merged in #218 (72b8f10). From Josh directly (2026-11-09): the page's background is solid black, and the panels and other visual content keep their current colour scheme. Done when: in both schemes the page behind the panels is `#000` with no aurora or grid, the panels, bars and state colours are unchanged (RAL-91's colours), and text set straight on the @@ -945,3 +969,12 @@ principles named were durable, accurate and reactive. Found in rally 0x7 by plus gives the research and why each cue was chosen; the cues are in the viewer with a browser test that a change triggers its cue and an unchanged poll triggers none; and the PR shows them, in screenshots or a short recording. +- [ ] **RAL-140: Viewer: an Activity strip shows who's working now and what just changed.** From Josh directly + (2026-11-09), following RAL-138's research: presence and attribution are the clearest agentic cues. Done when: + at the top of the rally's status, "Now" lists the rally's sessions whose activity is busy, each with its + nickname, how long it's been busy (declared; "since unknown" when `activity_at` is missing) and its + `current_task` drawn as text, never markup, since it's agent-written; "Just now" lists the 6 latest story + changes from the ledger, newest first, each with its state, team, record and age; both are drawn only from + `/api/status`; RAL-138's cues light a changed story or session in the strip, and nothing animates while nothing + changes; with a browser test of the busy list, text-only tasks, "since unknown", newest-first order and the + cue on a redraw. From c097e18d3c97ff8e29b60b215671a100ef8429f5 Mon Sep 17 00:00:00 2001 From: theBlanketBaron Date: Mon, 9 Nov 2026 17:18:30 -0500 Subject: [PATCH 2/2] docs(roadmap): tick RAL-9, verified (2200) Co-Authored-By: Claude Opus 5.5 --- docs/roadmap.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/roadmap.md b/docs/roadmap.md index d8a4629..6524f4b 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -273,15 +273,14 @@ The bones. Everything later reads from this. Decided by the operator on 2026-11-06: Rally is the source of truth for every project in `web/projects.json`, and the hand-kept board retires (design, open question 4). The ledger already tracks MUS, MAR, CAT and DSM stories. -- [ ] **RAL-9: Replace the hand-kept table.** Depends on RAL-24. The current table is +- [x] **RAL-9: Replace the hand-kept table.** Done in Castor-o7/muster#194 (a120efc), verified 2026-11-09 (2200). Depends on RAL-24. The current table is `~/Documents/Caster/muster-board.md` on the operator's Mac. Done when (changed by the operator on 2026-11-06, relayed by the watchman: archive the old table, don't import it): the table is archived unchanged in Muster's `docs/board-archive-2026-11-06.md`, with Version 0's table section from `docs/board.md`; the watchman no longer needs it; and Muster's `docs/board.md` says Rally's ledger is the board, read in the viewer or with `rally show` and `rally brief`. Muster's part is Castor-o7/muster#194. Done there: #194 merged on 2026-11-07 as a120efc, with `docs/board-archive-2026-11-06.md` and `docs/board.md` - saying Rally is the source of truth; submitted to the watchman for its read on 2026-11-09, and ticked once - it's verified. + saying Rally is the source of truth; submitted to the watchman for its read on 2026-11-09 and verified (2200). ## Phase 4: The web app