Draft: Add a BookDialog tree view, opened from a button beside BlueprintInfoButton - #227
Conversation
Adds a standalone BookButton (top-left corner) that opens a scrollable tree dialog listing every entry of a loaded Blueprint Book, recursively indented for nested books, with planner entries shown disabled. Clicking a blueprint row selects it via the same flattened-index path the settings pane's "BP Book Index" field already used. QuickActions gains getCurrentBook/selectBookEntry so the editor package can reach the book state packages/website owns, and Editor.init now takes a single options object (quickActions + optional logger) rather than positional params, so a required option doesn't have to precede an optional one. This is independent of any other in-flight change - the button's position only echoes a similar corner-button layout by convention, not by shared code.
e21ec00 to
ebe28b3
Compare
|
Still a draft, so this is orientation rather than a review. Two things will bite at merge and are much cheaper to know now than after more work goes on top. The button coordinate collides with #222
|
|
Still a draft, and unchanged since my orientation comment, so this is not a merge review. I read it properly this time while reviewing #221 and #222 together, and four things are worth having before more work goes on top. Two of them are structural and cheap to fix now. Everything in my earlier comment still stands: the The scroll viewport's hit area scrolls with the contentThis is the one to fix first, because it makes the list stop working rather than look wrong.
There is a smaller version of the same thing even at rest. The rectangle starts at local x = 0 while every row spans x 12 to 308, so 12 pixels of padding are live and the right-hand 12 pixels of every row are not. Splitting it back into a fixed outer container and a scrolling inner one is the whole fix, and it is what the file it was copied from already does. The active-row highlight never shows
The part that makes this worth a second look is that The depth guard makes later rows point at the wrong blueprintWhen Given entries Walking the subtree for its count even when not drawing it is the fix. Worth noting that the mutable
|
… notes (#263) * Skip the Claude review workflow on pull requests from forks GitHub withholds repository secrets from a `pull_request` event raised by a fork, so `secrets.CLAUDE_CODE_OAUTH_TOKEN` resolves to an empty string and the action fails every time. Measured across the open backlog: `claude-review` failed on all five fork PRs (#227, #242, #243, #258, and #249 before it merged) and passed on both in-repo ones (#257, #260). That is the whole pattern - it is not a misconfiguration the workflow can fix, it is what the event is for. The failure blocks nothing, which is the problem. Every fork PR opens with a red X, and a check that is always red is a check nobody reads - so a real failure in it would be missed. A job-level `if` turns it grey instead. The alternative is `pull_request_target`, which does get fork PRs reviewed but hands base-repo secrets to a fork's code. Every outside contribution here arrives from a fork, so that trade is not available. The comment at the guard says so, since the next person to notice the skipped runs will reach for it. In-repo branches, Renovate's included, still run. Also corrects a stale note in CLAUDE.md: the `ajv` entry still described `ModdedBlueprintError` and `TrainBlueprintError` as declared-but-never-thrown, and #262 deleted both. The point it was making survives - ajv is ~100 kB and nothing branches on its result - so the entry keeps that and records what went. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018N3pm7fQQDv6HTVz1TEpmE * Correct CLAUDE.md's vite-plus entries against what the repo actually pins Three corrections, each measured rather than read off the file. The documented local-install command did not set the version at all. It read `VP_VERSION=0.2.8 VP_NODE_MANAGER=yes curl -fsSL https://vite.plus | bash`, and an assignment ahead of a command applies to that command alone - `curl` got the variables and the `bash` on the far side of the pipe read an empty string. Measured against a stub script, which printed `VP_VERSION=[]`. The installer then falls back to `VP_VERSION="${VP_VERSION:-latest}"`, read off the script itself, so anyone following that line installed `latest` rather than the pin. That is the "green, and wrong" split the same file warns about one section down, with a local toolchain silently different from the lockfile's and CI's. The command now downloads the script and runs it with the variables ahead of `bash`, matching setup-vp/action.yml, and sets VP_HOME for the layout reason #260 established. Syntax-checked with `fish -n`, since it is a fish block. The pin is 0.2.9 everywhere in the repo - root, editor and website package.json, the root overrides alias, and VP_VERSION in setup-vp/action.yml - while the file still said 0.2.8 in three places. It also claimed 0.2.8 was `latest` as of 2026-08-11; `npm view vite-plus dist-tags` gives 0.3.0 today. That entry has now gone stale twice, which is its own best argument, so it says so and points at the command to re-measure with. And the installer-checksum note said the hash did not move across 0.2.6 -> 0.2.8, so a bump usually leaves it alone. True when written, and it is the reassurance that made 2026-08-24 expensive: the script rotated with VP_VERSION untouched and every job on every branch failed at `Set up Vite+`. The note now records that a hash can move with no bump at all. Re-fetched today and the current sha256 still matches the pin, so nothing in CI needs changing. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018N3pm7fQQDv6HTVz1TEpmE --------- Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
The only way to switch entries in a loaded blueprint book was a bare "BP Book Index" number field in the settings pane, with no names, icons, or indication of nesting.
BookDialog walks the book's raw entries directly (not the flattened index space
Book.selectBlueprintreads) and renders them as an always-expanded tree — nested books get a header row and indented children, planners get a dimmed placeholder row, and a depth guard of 10 stops runaway recursion on a malformed book. Rows scroll with the same mask+wheel+thumb patternInventoryDialogalready uses.BookButtonopens it, sitting one slot pitch right ofBlueprintInfoButtonand visible only while a book is loaded, rather than living in ToolsPanel (#221).Stacked on #222 — future base is
wormeyman-space-age-support, not the default branch.--