You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Fixed
The prompt and answer modal renders a fence inside a fence and a link with parentheses in its URL (#274). A fenced block now closes only on a line of backticks at least as long as the one that opened it, so a shorter fence quoted inside a longer one stays text and the block renders as one. A link URL holding one level of balanced parentheses, such as https://en.wikipedia.org/wiki/A_(b), now links the whole address instead of stopping at the first ). Only http(s) and mailto links open, as before.
The cost-per-minute sparkline follows the Admin's model prices (#270). It was drawn from Claude Code's ledger samples, so after a price change it disagreed with the cards, the facts bar and "Est. cost today". Each sample now keeps the session's per-model usage (migration 16; in full only when it changes or at a minute's first sample, so a quiet session adds one character per second), and the series is priced from it like the other figures, so a price change moves the sparkline at once. Samples from a reporter older than 0.12.0, or from before this release, keep the ledger's figures, and the step where the two kinds meet counts as zero. Existing samples have no usage, so the sparkline's last hour mixes both for an hour after the upgrade.
A cost that is not known reads as a dash, and priced spend stays visible next to unpriced spend (#276). Checked against the code after #117: a loop that has not reported a model yet and has spent nothing showed $0.00 (hook-only agents always did); it now shows a dash. The "not counting N unpriced sessions" note counted every session on a non-Claude model, even after the Admin priced it; it now counts only sessions whose cost is still unknown. The note replaced the cost-per-minute sparkline on the Est. cost today tile; the sparkline now stays beside it. A session first heard of after midnight, whose start the server believed from just before it, counted $0 today; it now counts what it spent since its first sample. Already right and left alone: a session that switches from Claude to a local model keeps its Claude spend on its card and in the total when it started today (#117). Still open, noted in DECISIONS 23: a session that started before midnight and now reports no ledger cost counts nothing today.
A fleet card, a rail item and the wall now say "delegating" when the orchestrator page does. A session whose orchestrator is running while an agent it launched runs used to read "Running" on its card and show the green dot in the left rail, while its page said "Delegating to 1 agent." The card's band now reads "Delegating to N agents." in the blue style (hover for the agents), the rail item shows the blue hollow dot and reads "delegating" to screen readers, and all three take the state from the same function as the page, so they cannot disagree. They return to Running when the last agent finishes. It is still display-only: the session counts as running in the status filter, the sort and the counts. UI only. (#287)
Changed
A documentation-only or chore PR is no longer a release.CLAUDE.md and CONTRIBUTING.md now say that from 1.0.0 on only a PR that changes code or behavior carries a release. A PR that changes only documentation, comments, CI or chores bumps no version, adds its entry under [Unreleased] and gets no tag. The bump is chosen by what the PR changes, not by its issue's label, and the maintainer may bundle several issues into one release: each PR adds its entry under [Unreleased], and a final release PR cuts the version once they have all merged. This replaces the 1.0.0 rule that made documentation-only PRs patch releases.
The fleet store no longer keeps lastMessageAt (#278). Nothing read it since #184 removed the "synced" counter. The field, its test assertion and the argument that fed it are gone; no behavior changes.
The plan panel's empty state uses the shared sentence (#278). It read "No plan reported. Agents were launched ad hoc, so only the agent tree is available."; it now reads "No plan reported. Agents were launched ad hoc.", as the card and the focus header do and as SPEC 7.x says. The user guide is updated.
CLAUDE.md describes a second, opt-in branching workflow. A new "Branching Model" section says that when the repo's GitHub default branch is development, feature PRs are squash-merged into it, main moves only on a release PR from development (merged with a merge commit), the version bump belongs to that release PR, and hotfixes branch from main. With the default branch on main, nothing changes. The Do Not list, "Always Branch First", the workflow table (a new hotfix row) and the Working row name development where they name main. The Releases section still describes per-PR releases and would need adapting if this repo opts in. Documentation only; no behavior changes.
Dependencies. CI uses actions/checkout 7 and actions/setup-node 7 (#8, #9). The dev group moves supertest to 7.3.1, @types/supertest to 7.2.1, tsx to 4.23.15 and @testing-library/react to 16.3.3 (#10). dotenv moves from 16.6.1 to 18.0.7 (#11); since dotenv 17 prints an "injected env" line at startup, which the logger's text output does not expect, the server now loads .env with quiet: true. React 19 (#12) and TypeScript 7 (#13) are not taken: each needs its own migration.