Repository navigation
Session overview with a page for every work item; questions only in Approvals (greenfield 0.0.51) - #206
Merged
Conversation
tbrownio
force-pushed
the
session-item-pages
branch
from
November 12, 2026 00:29
a669a2d to
d60c365
Compare
…ls (0.0.51) The status-page renderer now writes the overview and items/<id>.html for every item in one run, from the same status JSON. The overview leads with a summary, the next step, one Approvals pointer (count and Q-ids, no question wording) and tiles with a progress bar counted from the items; each card opens its item page through a stretched link, with no script. Item pages show Asked for, What changes, Where it stands, the card and rail, a fixed Everything table, siblings and prev/next. Bad item ids stop the renderer before it writes anything. Folds in Pane's hardening (script-src 'none' CSP, every link through href(), numeric counts, allow-listed item state) so Pane's next refresh is a copy. The orchestrator's instructions describe the new contract; findings, post-mortem and trace go on the item page, not the brief (D-34). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… test The baseline/--diff test read the machine's own /Library/Preferences/com.apple.SoftwareUpdate.plist. On GitHub's macOS runners Software Update rewrites it mid-test (a pending 26.7.3 update and a 27.2 -> 27.2.1 notice appeared between scans), so the second scan reported a new FAIL and the test failed. check.sh now honours MSC_SUPDATE_PLIST, a test hook like MSC_STATE_DIR, and the test points it at a fixed plist. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
tbrownio
force-pushed
the
session-item-pages
branch
from
November 12, 2026 00:36
d60c365 to
9a98790
Compare
This was referenced Nov 12, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Today the orchestrator's status page shows every Session item as a card. A card links to a brief for planned work, or to a hub the orchestrator was supposed to write by hand for anything else, and those hubs were often missing or stale. The page also repeats each open question's full wording, which the person already sees in Pane's Approvals. This PR makes the renderer write the overview and one page per work item in the same run, from the same status JSON. Every card opens its item's page and every item page links back up. Questions show only as a count and their Q-ids.
Builds on #200 (merged, greenfield 0.0.49) and follows #201 (merged, 0.0.50); this branch is rebased onto
mainafter them. The work is commit0a3488e, at greenfield 0.0.51. A second commit,9a98790, fixes a CI test that started failing on macOS runners regardless of this change (see the last row of the table below).Visual Overview
This PR's own page (diagram, screenshots, the rendered example and this Session's pages): PR #206 walkthrough
Plan: cover sheet, revision 2, approved as D-33. The design follows the approved mock-ups (D-31). The rule that findings, post-mortem and trace go on the item page only is D-34. D-n ids are entries in the plan's decision log; J1–J8 (journeys) and C1–C7 (checks) are the plan's validation criteria, each restated where it is used below.
Why this change exists
The person running a Session wants to see the whole Session at a glance, click any work item to see everything about it, and come back up. Before this PR, the status page could not do that:
item-hub.md), which often didn't exist.session.counts).The person asked to try this in greenfield first, before any of it moves into Pane (D-34). So the status JSON stays the single source the pages render from.
Concepts
<Session folder>/.agent/status.json, describing the Session and each work item. The renderer turns it into HTML; nobody writes the HTML by hand.session/index.html, which Pane shows in the Session's Overview tab.session/items/<id>.html, one per work item, named by the item's stableid.::afterwithinset: 0) to cover the whole card, so a click anywhere on the card opens the item page without any script. The PR and "open ↗" links sit above it and still work.What changed
session.countsis no longer read.needs[]keeps onlyid,item(the item's id) andlink; anyq,optionsorwhyis ignored and never printed. Outside Pane (no links) the pointer says the questions wait "in the orchestrator's chat". A Notify question without a Q-n yet shows as "a new question".items/<id>.html, plus a Details → link.decisions[].item), Depends on and Evidence appear when present. An item a question blocks gets a Waiting row first: "Q-7 waits in Approvals", linked, never the wording.id(lower-case letters, digits, hyphens), unique acrossitemsanddone. A missing, repeated or unsafe id stops the renderer with a message naming the item, before anything is written.refsare written relative to the overview. On item pages, one folder down, the renderer prefixes relative links with../.link.script-src 'none'CSP on every page, every link throughhref()(unsafe schemes become#), numeric counts, item state allow-listed. Pane's next refresh can be a straight copy.status-board.mddocuments the contract above.item-hub.mdnow describes the generated item page ("never hand-write it").SKILL.mdsays every item's front page is its generated page, the overview and item pages render together, findings, post-mortem and trace go on the item page and not the brief (D-34), and questions appear only in Approvals or the chat.ledger.mdaddspage_id.relay.md,page/references/bundle.md,customer-insights-loop/references/handoff.mdand the plugin README drop their "Needs you row", hand-written hub and brief-backfill wording.tests/machine-security.test.mjsfailed ontest (macos-latest), both on the first run and on a rerun: its baseline test scans twice and expects no change, but it read the runner's own Software Update cache (/Library/Preferences/com.apple.SoftwareUpdate.plist), which Software Update rewrote between the two scans (a pending macOS 26.7.3 appeared).check.shnow honoursMSC_SUPDATE_PLIST, a test hook likeMSC_STATE_DIR, and the test points it at a fixed plist. Nothing changes for people running the check.example-status.jsonnow shows every item kind (planned, quick fix, tweak, picked-up PR, an item waiting on a question, a finished item with a page, and a legacy done entry). Tests cover C2–C5 and C7. Older renderer tests now give their items ids.Example: an item in the status JSON, and what the renderer writes for it.
{ "id": "env-vars", "group": "Env vars", "kind": "planned", "short": "#1014", "name": "Per-project env vars (keychain)", "state": "need", "stateLabel": "Waits on Q-7", "asked": "“Let each project keep its own env vars, stored in the keychain.”", "refs": { "plan": { "label": "Cover sheet, revision 2", "link": "per-project-env-vars/cover-sheet.html" }, "review": { "note": "not yet: at the plan's end" } } }Upgrade path. A status JSON written before this PR has no ids, so its first render fails with a message naming each item. The orchestrator rewrites the JSON from its ledger on its next turn (no migration, as the plan says). Existing Session pages aren't regenerated by this PR; each refreshes on its orchestrator's next change.
Validation and limitations
Validation level: full. No agent review: this PR changes only instructions, the renderer, its example and tests (D-30). The plan asks for human review.
pnpm typecheckandpnpm testpass on9a98790(347 pass, 9 skipped, 0 fail), and every GitHub check is green on that head (ubuntu, macOS, Windows, windows-link-fallback, check).node scripts/sync-bigbrain-from-greenfield.mjs --checkreports no new problems.tests/greenfield.test.mjs, passing. The example's overview is 140 KB (limit 200 KB); each item page is about 90 KB (limit 120 KB).qa-and-verify, onb598d0b, the same feature commit before the rebase ontomain): J1–J6 and C1–C6 pass, with real browser clicks. A click on a card body opens its item page, Details → does too, the PR link still opens the PR, and breadcrumb, Back and prev/next work on all 22 item pages. Ten bad-id cases exit 1 and leave earlier files untouched. No defects. J7 and J8 remain undetermined. Noted, not a defect: aneeds[].itemthat names no item renders without a warning.Not in this PR: Pane's bundled copy of the renderer and skill (refreshed separately once this merges), a grid layout for long Sessions, and bigbrain's orchestrator (a separate Agent Farm plugin that keeps its own status map and copies none of these files).
🤖 Generated with Claude Code