Skip to content

v0.149.0

Latest

Choose a tag to compare

@github-actions github-actions released this 06 Sep 19:16
· 12 commits to main since this release
250bf9d

Added

  • The /concept decision panel never hides its call-to-action below the fold again. The panel was one scrolling column — iteration chips, a flat table of contents, the connection pill, then the two submit buttons — so a concept with eight rounds and twenty-odd sections pushed "Zur nächsten Iteration" off the screen, and the user scrolled the menu to find the decision. The status area was noise at rest ("Claude verbunden") and silent about the one thing the reviewer wanted to know: is my work saved, and did it go through? The panel is now a flex column with three regions: a pinned "Hier bist du" header (round + section under the reading line), a scrolling middle, and a pinned foot that is hard-capped at 120 px in the smallest and the largest case alike. The foot holds one status line with six mutually exclusive states — saved, saving, connecting, not delivered (a warning background, categorically different from the rest), submitted with progress dots, and read-only round — driven by the draft mirror and the heartbeat, and a split-button: the primary "Zur nächsten Iteration" plus a caret that opens "Mit Feedback implementieren" one level deeper, so the misclick barrier is a menu rather than a 2rem gap. The hint paragraphs moved into tooltips; the cache hint, #panel-frozen and the progress list stay real DOM. In design mode the foot keeps a gutter for the 💬 FAB; on mobile the panel caps at 60vh so the split still holds.

    Iterations and table of contents merged into one tree ("Kompass"). Every round is a node; exactly the round on screen is open and its body is that round's section list — there is no code path that closes it, switching tabs moves it. Older rounds cost one line each ("Iteration 3 · 14 Einträge · 2 verworfen") and fold into an archive only from four previous rounds, which auto-opens whenever a frozen round is viewed. Sections group into Kontext / Varianten only when at least two kinds meet more than twelve entries — kinds are inferred from the existing eval-{id} radios with a data-nav-group override, never from an attribute the author has to remember — and one-open applies inside the TOC only. The scroll spy may open the group that holds the active entry and never closes one; a manual close is honoured for four seconds. Every collapsible element is absent from the DOM below its threshold, so a one-round, three-section concept renders exactly as before, minus nothing. The tab bar keeps its contract — one .iteration-tab per round, appended by string edit — so the append checklist is unchanged. Decided on a two-round concept page (three directions, then three foot variants of the chosen one), red-teamed against the scroll-spy, tab-switch, persistence and wizard contracts before implementation, and pinned by 42 new jsdom tests plus validation-gate entries 56–61.

Fixed

  • The concept port registry had silted up to 1159 entries with no bridge alive. 1131 of them came from the test suites, which spawn real bridge servers and tear them down with SIGKILL — skipping /shutdown, the watchdog, atexit and any signal handler — so every npm test run left dozens of entries in the user's real registry; the rest were bridges lost to hard kills and power cuts. pick now sweeps first: an entry is deleted when its port no longer accepts a TCP connect (or the file is not JSON), and a bound port is never touched, so a live foreign bridge stays protected. The recorded pid is deliberately not a keep criterion — Windows reuses pids within days, and 35 weeks-old entries survived a pid-based sweep for exactly that reason. Server and picker honour CONCEPT_BRIDGE_REGISTRY_DIR, which the three server-spawning suites point at a temp directory; the server also drops its entry on SIGINT/SIGTERM/SIGBREAK, where the default SIGTERM action used to skip atexit.

  • The bridge launch procedure resolved the plugin scripts from the oldest cached version. ls -d ~/.claude/plugins/cache/dotclaude/devops/*/scripts/… | head -1 returns the lexically first version directory, and several coexist after updates — so a session ran a 0.145.1 bridge server and watcher beside hooks already on 0.148.0, and the resume hook generated the same stale prefix into the cron. Every occurrence now version-sorts and takes the highest (sort -V | tail -1), preferring $CLAUDE_PLUGIN_ROOT when the shell has it; CONVENTIONS.md carries the rule.


Install: /plugin marketplace add Jerry0022/dotclaude