feat: workbench chrome: header project chip, one band with attached tabs, view-keyed Tree - #426
Open
Yona-Appletree wants to merge 16 commits into
Open
feat: workbench chrome: header project chip, one band with attached tabs, view-keyed Tree#426Yona-Appletree wants to merge 16 commits into
Yona-Appletree wants to merge 16 commits into
Conversation
…iew tabs) Per vision dir 2026-08-14-0826-workbench-bar-chrome: promote the sm summon strip to the universal chrome bar. §1 reproduces the shipped #413 chrome as the baseline; §2 is the live bar (project chip w/ popover, radio toggles, draggable dome -> dirty); §3 Q1 underline-vs-segmented + Q2 chip content; §4 md/sm folds w/ Props summonable; §5 gate questions R4-1..R4-4. Co-Authored-By: Claude Fable 5 <[email protected]>
…one band (B) Round-4 lg bar rejected (toggles read disconnected from panels); md/sm kept. A = GitHub object band: chip+name / view tabs / Save-when-dirty + Share + corner region toggles, docks with attached y-compact tab rows + Finder-style footers. B = today's one-band structure with the attached treatment in place, tab rows persist on collapse. Gate questions R5-1..R5-5. Co-Authored-By: Claude Fable 5 <[email protected]>
…ode segment deleted Yona's ruling: Map and Patch are siblings (matches shipped /patch route + R5 authored-vs-effective grain split). View tabs = Nodes/Mapping/Patching everywhere; toolbar is per-view (patch verbs on the Patching view); Patching dock defaults = Fixtures + Outputs; sm seg compressed to fit three. Co-Authored-By: Claude Fable 5 <[email protected]>
Round-5 rulings applied: B chosen; project chip + share move UP to the site header (Google-Docs pattern, supersedes vision D3 — deliberate reversal); Nodes+Fixtures panels MERGE into one view-keyed Tree (assembly/authored/ effective per view — the enabler the R5 patching plan needs); Map·Patch over gerunds. Chip-home comparison strip + tree-grain strip; A and the round-4 bar to the rejected list. Gate questions R6-1..R6-4. Co-Authored-By: Claude Fable 5 <[email protected]>
The workbench model becomes data-driven and N-view-ready with zero visual change: a VIEWS table (label + route slot) drives the view tabs and the summon strip's view segment; PanelId::strip becomes the free roster(view, side) table; the ratified dock defaults move to defaults(view); PanelMemory becomes a view-keyed map seeded lazily from those defaults; the hard-coded (workspace, mapping) href tuple becomes the per-view WorkbenchHrefs collection threaded through StudioShell. Unit tests pin the roster/defaults tables, the per-view memory seeding/radio-toggle semantics, and the view<->route round trip. Plan: lp2025/2026-08-14-0826-workbench-bar-chrome Signed-off-by: Yona Appletree <[email protected]>
One left panel named Tree replaces the Nodes and Fixtures panels: a panel is a ROLE and the view supplies its body — the project's node tree (embedded ProjectPane) on the Nodes view, today's fixture tree (mixed grain, deliberate until R5) on the Mapping view. Defaults become Nodes→(Tree, Device), Mapping→(Tree, Props). The Fixtures panel's top summary line moves to a dock-bottom footer owned by the dock composition (panel_footer declares per (panel, view)), and the SummonStrip now renders its buttons from roster(), which makes Props summonable below the fold for free. Plan: lp2025/2026-08-14-0826-workbench-bar-chrome Signed-off-by: Yona Appletree <[email protected]>
…, Map label (P3) Dock tab rows, view tabs, and edge strips merge into ONE band across the workbench top (D7): each dock's tab segment is sized by the shared dock-width constants so tabs sit exactly over their docks, with the view tabs centered between them. Panel tabs wear the ATTACHED treatment — the active tab shares the dock fill and breaks the band's bottom hairline — and pressing it collapses the side, whose tab row persists inactive as the reopen affordance (D11). EdgeStrip, DockTab, and the «» hide chevrons are deleted; PanelDock is body + footer only. View tab label Mapping → Map (D9; route strings unchanged). Plan: lp2025/2026-08-14-0826-workbench-bar-chrome Signed-off-by: Yona Appletree <[email protected]>
…ires (P4) The site header carries the project chip (D8, Google-Docs pattern): state glyph from the affordance vocabulary + project name + amber unsaved count, opening the existing ProjectDetailSections popup (Save/Revert/per-entry revert/Share/stats) as a DetailPopover custom trigger. Mounted UNGATED so it is present at every header width — one mount, no top-layer/container-query workaround (Q10). Presentation only: web_app builds ChromeProjectChip from the editor pane's own view and status; zero new state. The workspace root card's [i] project mount retires (D5/Q11): NodePane and NodeDetailPopover lose the project slot, ProjectNodeWorkspace no longer threads it, and the workbench_root_card_project_popup story documenting that mount is deleted. The non-workbench ProjectPane header mount stays — other routes still use it. Plan: lp2025/2026-08-14-0826-workbench-bar-chrome Signed-off-by: Yona Appletree <[email protected]>
Captured in the pinned CI environment by run: https://github.com/PhotomancerArt/lightplayer/actions/runs/31843948555
Contributor
CI refreshed the story baselines on this branchThe Review every PNG in the PR's Files changed view (swipe / onion-skin). |
A measurement rAF queued while a popover is open can fire after the
closed render and imperatively re-pin the in-flow trigger's inline
width/height (trigger_rect_by_id restores what it removes). The closed
VDOM style string carries no pin, so the stale pin was never rewritten —
the trigger froze at its open-state size forever, truncating any
trigger whose content grows while closed. Surfaced by the header
project chip: open the popup once while clean, and the pencil+count
that appears on the first edit had to squeeze into the clean-state
width ('Min…' instead of 'Mini Dome 1').
Queue a clear behind the stale rAF at close time; a reopen re-pins via
the placeholder class, which the clear respects.
Plan: lp2025/2026-08-14-0826-workbench-bar-chrome
Signed-off-by: Yona Appletree <[email protected]>
…into claude/gracious-mclaren-6938a9
G1 answers 3a/3b: the Save/Revert actions and the debug chip move from the Nodes view's embedded ProjectPane into TreePanelActions — one row rendered by the Tree panel composition on EVERY view's Tree body, so the Map view offers the same save affordances and the two can never drift. The header chip's button now wears the affordance's status tone itself (quiet / working / yellow unsaved / hazard debug / red error, open variants included) via affordance_chip_class — the state is the chip, not just its glyph. Plan: lp2025/2026-08-14-0826-workbench-bar-chrome Signed-off-by: Yona Appletree <[email protected]>
… (G1 fix) G1 answer 1: at ~925px the workbench was already below the 960 fold, so opening any panel summoned it over the WHOLE view (the #413 phone model) where a dock taking a portion was expected. The fold moves to 820px: mid widths keep the band + fixed-width docks (center stays usable at the md dock tier), and the full-view summon model is reserved for genuinely narrow screens. Plan: lp2025/2026-08-14-0826-workbench-bar-chrome Signed-off-by: Yona Appletree <[email protected]>
…(P5) Workbench story descriptions catch up with the band model (attached tabs, persistent-on-collapse rows, the view-keyed Tree, the 820px fold); site-chrome grows the project chip stories — the four states (clean / unsaved / failed / narrow) and the popover-open capture, which needs no narrow-frame caveat because the chip is one ungated mount (ChromeProjectChip grows a stories-only initially_open). The #413 PanelDock ADR gains its Amended 2026-08-14 section: one band (D7), persistent collapse (D11), the Tree merge and 'one panel, one ROLE' roster model (D10/D12/D13), the D3 reversal re-housing the project identity onto the header chip (D8), Nodes-Map labels (D9), and the 820px fold ruling from G1 — plus the recorded follow-up on the project-chip/session-chip grouping. README chrome paragraph updated. Plan: lp2025/2026-08-14-0826-workbench-bar-chrome Signed-off-by: Yona Appletree <[email protected]>
Yona-Appletree
marked this pull request as ready for review
August 15, 2026 02:01
Captured in the pinned CI environment by run: https://github.com/PhotomancerArt/lightplayer/actions/runs/31858105371
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.






Plan: lp2025/2026-08-14-0826-workbench-bar-chrome
Path: ~/.photomancer/planning/lp2025/2026-08-14-0826-workbench-bar-chrome/plan.md
Implements the converged round-6 chrome direction (vision D7–D13; spike =
spikes/studio-chrome/index.html, rounds 1–6 in this branch's history — the design record rides this PR).Three bands = three ownership levels:
[Tree] · Nodes Map · [right panel tabs]— one band, attached tabs, persistent-on-collapse tab rowsPhases (all complete):
4dfa89489) — byte-identical oracle held (no baseline drift on its push)1a9f51374)Maplabel (0d7ab2b9d)b78754a88)0ab428c8d), shared Tree Save/Revert row + state-toned chip (bc809a811), fold moved 960→820 so md keeps real docks (21bf52e6d)313b4e707)Follow-up (chipped, per G1): group the device + project header cluster (task started separately).
Coordination: the parallel R5 patching-view plan consumes this model. This PR does NOT touch
/patch,PatchSurfacePage,PatchToggle, route parsing, or the authored/effective tree grain (all R5).🤖 Generated with Claude Code