Conversation
Draft for user confirmation (2026-09-25): the fork becomes the user's single working surface, stays a thin rebasable layer on upstream, runs Model Router jobs as T3 threads and hosts OpenBot as a UI mode. Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Confirmed by the user on 2026-09-25. Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Name the stable desktop build Chromeria with its own bundle id (md.toolbox.chromeria), Electron userData directory and icon set, so it installs and runs beside upstream T3 Code. Threads stay in the shared T3 home (~/.t3 or T3CODE_HOME). Desktop builds no longer embed a GitHub update feed, so the updater can never replace Chromeria with an upstream T3 Code release. Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The #12 branding points production web favicons at assets/chromeria/, but two brand-assets tests still expected the upstream production icons. Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…MCP toolkit (#8) (#10) * spike(server): threads MCP toolkit that spawns and messages child threads (#3) Adds a threads toolkit (spawn_thread, message_thread, read_thread, list_child_threads) next to device, preview and pullRequests. A bridge mirrors each child thread's lifecycle into its parent's activities as the task.* rows the Agents panel already folds, and can send each finished turn back to the parent. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * spike(web): group child threads in a collapsible Subagents sidebar shelf (#3) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * spike(server): report steer for every provider and refuse messages to a starting child (#3) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * spike(web): hide child threads from the sidebar and open them from the Agents panel (#3) Replaces the Subagents shelf: child threads are filtered out of the sidebar, and their Agents panel rows link to the child thread. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * feat(threads): production child threads with Agents panel listing and toolkit guards (#8) Child threads spawned through the threads MCP toolkit are real T3 threads whose sub.<parent>.<suffix> id carries the parent link, hidden from both sidebars and listed with status in the parent's Agents panel. Production hardening over spike/3-threads-toolkit: documented the id-convention tradeoff against a real parentThreadId (contract, projector, persistence migration too invasive for this fork), extracted the steer/new-turn delivery rule, pinned per-driver effort options, and refused messages to still-starting children with a retryable error. Built with OpenCode (Muse Spark). * fix(desktop): run bundle self-check probe under plain Node (#8) verifyPackagedBundleIsSelfContained spread ambient process.env into the probe, so a shell with ELECTRON_RUN_AS_NODE=1 leaked the flag into the validation command and broke the no-Electron-probe invariant the Windows payload test asserts. Scrub the flag like the neighboring fff probe curates its own env. Built with OpenCode (Muse Spark). * fix(tests): make failing gates hermetic without weakening assertions (#8) - desktop: run the bundle self-check probe without ELECTRON_RUN_AS_NODE so validation does not depend on the orchestrator's ambient runtime flag. - server: resolve the entrypoint fixture dir, matching the fully-resolved module URLs Node reports (macOS symlinks TMPDIR through /private/var). Built with OpenCode (Muse Spark). * fix(threads): consume the hot domain-event stream in the threads toolkit (#8) The toolkit handlers layer builds with the HTTP routes. Acquiring subscribeDomainEvents at build time failed every route-layer test whose engine does not implement it (193 server.test.ts cases). Use streamDomainEvents, as the upstream reactors do. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * style: format GLOSSARY.md so vp fmt --check passes (#8) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The sidebar wordmark, setup screen, assistant author heading, link-target and theme labels, splash screen and boot error still said "T3 Code". They now read APP_BASE_NAME, whose browser fallback is "Chromeria", and the T3 glyph renders the Chromeria obelisk icon. Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Decided upstream overlap report, part 1 of 2 (from Upstream overlap reportBase: b2b43be Target: de251fc Scanned 128 upstream commit(s). Copy this report into the absorption PR. For EVERY match replace PENDING with one decision and a rationale: keep ours; adopt upstream and delete ours; merge both. Record removed paths or the combined behavior and proof. No matches is not proof of no semantic overlap. directionKeep the fork mission and completion criteria explicit. No matches. glossaryKeep Chromeria and its product family terminology consistent. No matches. brandingGive desktop and web the Chromeria name, icons and independent desktop identity.
child-threadsSpawn child threads, hide them from sidebars and open them from their parent.
fork-maintenanceKeep the fork stack small, checked and rebasable on GitHub-hosted CI.
thread-scopeAllow explicit same-project supervision while retaining child-only defaults.
agents-panelSeparate Prism and direct spawns, nest child threads and navigate parent and siblings.
prism-toolkitExpose provider capacity and assign scoped thread tools through Prism roles.
prism-settingsConfigure role preferences and show provider usage and capacity in Settings.
sidebar-child-workingShow a parent thread as working, and keep it active, while its hidden child threads work.
|
|
Decided upstream overlap report, part 2 of 2 (from issues-browseList GitHub Issues of all project repositories beside PRs, with filters, parent tree and a side panel.
issues-linksLink GitHub Issues to threads, show them beside PRs and start a linked thread from an Issue.
issues-statusCompute each Issue's status from GitHub, links and thread activity; group and filter the Issues view by it and wire linked threads and Start thread.
issues-open-linksOpen GitHub /issues/N links and an Issue's pull requests in the app: the PR panel for pull requests, the Issues panel for Issues, the browser otherwise.
|
Independent review:
|
72ba8f6 to
abcb2a5
Compare
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: unavailable · PR result: Scenario and decoded snapshot size10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed. |
abcb2a5 to
d7ee6ae
Compare
* docs(fork): rebase routine, stack check and fork CI Fork stays a small topic-commit stack on upstream main: docs/fork.md describes the model, scripts/fork-rebase.sh absorbs upstream updates with per-file conflict reports and proof-gated pushes, scripts/fork-check.sh enforces the model, and .github/workflows/fork.yml runs it on every PR. No upstream-owned files are modified. Refs #6 * fix(fork): fork-rebase listing must survive head closing the pipe * test(fork): focused tests for the rebase routine safety rules fork-check.sh and fork-rebase.sh are driven against throwaway git fixtures: new-file pass, unallowlisted-edit fail, allowlist pass, merge-commit fail, missing-doc fail, no-proof push refusal and no-main push refusal. Refs #6 * docs(fork): list maintenance tests and fix formatter whitespace Refs #6 * fix(fork): run proof in a subshell cleared of ELECTRON_RUN_AS_NODE * docs(fork): Chromeria install, squash-plus-absorption model and GitHub-hosted CI Document building, installing and updating the Chromeria desktop app, land absorptions on main with --force-with-lease after proof, allowlist every fork edit of upstream files, remap the PR and main CI workflows from Blacksmith to GitHub-hosted runners, and run the routine's proof in a host-neutral environment. Refs #6. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * ci(fork): check the PR head, not GitHub's merge ref Refs #6. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * docs(fork): allowlist the #14 web branding edits Refs #6. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(server): remove unused threads toolkit export * fix(web): provide branding in bundled dev fixture --------- Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
) (#18) * feat(web): Prism spawns, collapsed child tree and parent breadcrumb (#17) The Agents panel now separates threads Model Router (Prism) started for this thread from the thread's own spawns, grouped by job with status and route. Router threads are recognized from the [model-router job ...] tag in their first message, read once per thread and cached. Rows with child threads show a collapsed chevron with the child count that reveals compact nested rows. A child thread's header shows the parent title as a link plus a menu to switch between siblings. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(web): keep Agents tree internals unexported for knip (#17) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ovider snapshot (#22) * feat(contracts): Prism role kits and provider snapshot schema (#19) Role kits (instructions, runtime mode, skills, thread-tool scope) and ordered model preferences for the six Prism roles, stored as the project-scoped server setting prismRoles, with a per-role patch. Adds the GET /api/prism/snapshot response schema for the router. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * feat(server): Prism MCP toolkit, spawn_thread(role) and provider snapshot endpoint (#19) Adds prism_submit, prism_status, prism_questions and prism_answer, which run the installed Model Router CLI with the calling thread as the T3 planner and a server URL plus an orchestration-scoped token supplied by the server. spawn_thread takes a Prism role, applies its kit and first eligible preferred model, and each role's thread-tool scope is enforced. GET /api/prism/snapshot returns providers, models, usage windows with resetsAt and the role kits resolved for a project. OpenCode usage now refreshes on the provider health interval. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * chore: drop unused Prism exports flagged by knip (#19) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * feat(contracts): Prism model lists per role and lane (#19) Each role keeps an ordered list of {instanceId, model, effort} per lane (easy, medium, hard): the first entry is the primary choice, the rest are fallbacks, and one model at another effort is its own entry. Adds PrismLane (default medium) and per-lane patching. The snapshot carries the same structure through PrismRoleKits. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * feat(server): pick role models by lane in spawn_thread and prism_submit (#19) spawn_thread takes an optional lane (default medium) and walks that role's lane list, primary first then fallbacks. prism_submit takes easy, medium or hard and maps them onto the installed router's small, default and hard lanes. PRISM_LANES stays module-local for knip; PrismLane.literals lists the lanes. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
* wip: add Prism role preferences and capacity settings (#21) * wip: edit easy medium and hard lanes for every Prism role * wip: derive Prism lanes from the exported schema * wip: serialize Prism saves through the settings snapshot * wip: retain Prism save guard across scope navigation
* feat(fork): map fork features and report upstream overlap * fix(fork): register report entry point and validate feature ids * docs(fork): point edit guidance to the feature map
…ker (#26) (#35) * feat(contracts): single model lists outside Worker, Retry and Escalation switchable (#26) Only the worker keeps easy/medium/hard lists; every other role has one ordered list under models, and a saved per-lane list keeps its medium entry as that list. Retry (correction) and Escalation (recovery) gain enabled. The snapshot still repeats each single list in every lane until toolboxmd/model-router#127 reads single lists. spawn_thread accepts retry and escalation next to the old names. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * feat(web): Prism settings in the Providers layout with autosave (#26) A role list (icon, name, description, toggle) and a detail pane with one ordered model list per role, reorderable by drag or arrows and saved on every change. Only Worker shows easy/medium/hard tabs. Retry and Escalation can be switched off; Dispatcher, Worker and Reviewer show locked on with the reason. Planner is no longer on the page. The Agents panel shows each Prism job as a heading without a status dot. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(web): show locked Prism roles with a lock and keep model rows on one line (#26) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * chore(web): drop unused applyPrismRoleUpdate export flagged by knip (#26) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Upstream main is now 113 commits past the fork base, so the `--depth 100` fetch no longer contains the merge base and fork-check.sh exited 1 silently under set -e. Fetch upstream main with full history but no blobs, and print a clear error when the merge base cannot be found. Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…d status (#25) (#37) * feat(web): show parent threads as working while child threads work (#31) (#33) * feat(web): show parent threads as working while child threads work (#31) Child threads are hidden from the sidebar, so their work never reached the parent row. A shared pure helper derives descendant child-thread activity from thread shells; the sidebar row feeds it through the existing status resolvers (Working pill and timer with "· N agents", child approvals as the parent's approval), and the auto-settle sweep keeps such parents active like threads with live background work. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * docs(fork): record PR for sidebar-child-working (#31) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(web): surface child input, time from the earliest child (#31) Review fixes: a child waiting on user input now shows the parent's awaiting-input state, and children waiting on input or with any background work (monitoring included) keep the parent from auto-settling. An idle parent's Working timer starts at its earliest working child, and the "· N agents" count sits outside the aria-hidden timer. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * feat(web): browse GitHub Issues next to PRs (#27) (#32) * feat(web): browse GitHub Issues next to PRs (#27) The Pull Requests page gains a PRs/Issues toggle (`view=issues`) and the sidebar an Issues icon. Issues from every GitHub repository of the user's projects are read live through `gh` (one GraphQL search per host page, within the existing GraphQL budget and rate-limit handling), merged across connected environments, and shown as Open, Done or Not planned. Search, sort, repository/label/milestone/parent filters, a parent tree that marks sub-Issues outside the user's projects, and a side panel with body, comments, comment, close and reopen. The command palette searches the listed Issues while the page is open. No storage: upstream tables, migrations and events are unchanged. Upstream edits are allowlisted and mapped under the `issues-browse` feature. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * docs(fork): map the Issues browse PR (#27) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(web): surface Issues list failures and address review (#27) - Show a failed server or "Load more" page with Retry above the rows that stay, and stop offering "Load more" while it failed. - Toasts for comment and close/reopen carry GitHub's reason. - Locked Issues keep the comment box (GitHub has no viewerCanComment); a note explains and GitHub's refusal is shown. - Count non-GitHub repositories once by host and repository across worktrees, pages and servers. - Palette Issues group follows Actions and appears only once typed. - Remove unused scoreIssueMatch and knip-flagged exports; table tests for issueStateOf and issueSearchQuery; typecheck fix in the live suite. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * feat(server): link GitHub Issues to threads (#28) (#34) * feat(server): link GitHub Issues to threads (#28) Store only non-derivable Issue links in the fork-owned fork_thread_issue_links table (created by the fork, outside upstream migrations and the event log). Derive branch links from conventional <type>/<number>-<slug> branches and closing-reference links from the thread's linked pull requests (real gh) or, for Issues, from the closing pull requests the caller already read. Expose issueLinks.* RPCs (for thread, batched threads for Issues, link, unlink, change push) behind an issueLinks capability, link_issue/unlink_issue/list_thread_issues MCP tools, an Issues section in the "Linked PRs and Issues" panel, and a start-thread-from-Issue action that opens a draft in the matching project, prefills it and links it at once. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(server): keep retried threads' Issue links and refresh on batched changes - Prune deleted threads' links only once deleted over a week ago: a failed first-send bootstrap deletes a thread and the retry re-creates its id. - Deliver change pushes to the client one batch at a time and match a batch if any change names the thread or Issue. - Render the Issues section only where the server advertises issueLinks. - Enable and rename the command palette entry for the linked surface. - Cover caller-supplied closing references in CI with real rows. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * feat(web): computed Issue status with grouping and filters (#29) (#36) * feat(web): computed Issue status with grouping and filters (#29) Each Issue gets one status from the #25 table, first match wins: GitHub state and close reason, open native blockers, closing pull requests (open, draft) with the trusted `review/independent` mark on their head, task-branch links, and whether a linked thread or any descendant child thread works now. The Issues page read gains blockers, closing pull requests with head SHA and the review mark in the same per-page GraphQL query (cost 2 -> 3 per 100 rows); marks count only when the query's viewer posted them. The view groups by status with Done and Not planned collapsed, adds Status and Linked filters, shows linked threads on rows, wires Start thread on rows and the side panel, and opens the side panel from a thread's linked Issue through the `issue` search parameter. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(web): count thread-linked PRs, trust marks across servers, drafts pause (#29) Review fixes for PR #36: - A PR into a non-default branch makes no closing reference, so the Issue's PRs are now its closing PRs plus the open PRs linked to its linked threads, deduped by repository and number. Each host's first search page reads those thread-linked PRs as `resource(url:)` aliases in the same GraphQL request (cost stays 3 per 100 rows with 50 aliases; a missing PR answers null instead of failing the page), and `threadsForIssues` returns each thread's PR keys. - Threads are looked up on every server that keeps Issue links, and a review mark is trusted when any server that listed the Issue runs as its poster; the server now returns the mark's creator and its viewer. - An open draft PR with nobody working reads as Paused; merged PRs keep not counting while the Issue is open. - The status table moves to contracts so the live suite checks it too. - The Issues view subscribes to a working-thread key atom instead of all thread shells, and a row's Start thread waits and ignores repeat clicks. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(server): read only PRs of Issue-linked threads, also without a search (#29) Re-review fixes for PR #36: - Thread-linked pull request candidates now come from threads that link to an Issue (a stored, non-dismissed link or a task branch), through a new `IssueLinks.pullRequestsOfIssueThreads`. Last-synced snapshot state no longer filters them: the same GraphQL read returns GitHub's state. The 50 cap stays as a bound and logs when it truncates. - A server whose repositories a filter excludes still reads its candidates and viewer in a small aliases-only request. - While one row starts a thread, every row's Start button is disabled. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(web): close Issues integration gaps (#25) (#38) * fix(web): close Issues integration gaps (#25) - Servers advertise an `issues` capability; the Issues list, the sidebar Issues icon, the palette's "Open issues" action and the PRs/Issues switch use only servers that have it, so upstream and older servers no longer answer `issues.list` with an unknown-tag error. - The side panel shows the Issue's linked threads (open one) and its closing and thread-linked pull requests (open on GitHub), read for the one Issue, so it works when opened from a thread's link too. The Issue detail read now carries closing pull requests. - The command palette finds threads by linked Issue: `#N`, `owner/repo#N` or an Issue URL asks `threadsForIssues` on servers with Issue links, debounced and bounded to 20 repositories per server. - Start thread prefers a project on a server that keeps Issue links. - User docs cover linking by hand, unlinking and the MCP tools. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(web): find closing-reference threads from the palette (#25) Review fixes for PR #38: - The palette's Issue lookup sends the Issue's closing pull requests: from the loaded Issues list entry, else, for `owner/repo#N` or a URL, from one debounced Issue read on a server that lists Issues. A bare `#N` the list does not hold finds stored and branch links only; the user docs say so. - An `issue=` link without a usable `selectedEnvironmentId` resolves to a server that lists Issues, one keeping Issue links first, and never to a server without `issues.*`. - The detail read's mapping moves to `issueDetailOf`, with a CI test decoding a fixture with one closing pull request and one null node. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
* fix(web): open PRs from Issues and chat links in the app (#40) The Issue side panel's pull requests opened GitHub, and GitHub `/issues/N` links in chat (including `#N` autolinks, which GitHub numbers together with pull requests) opened GitHub or nothing. Pull request links inside an Issue body updated the PR panel while the Issues view stayed in front. - Issue panel PR rows open through the existing change request opener, with a separate "Open on GitHub" button. - A new on-click resolver reads N as a pull request, then as an Issue, and opens the PR panel, the Issues side panel, or the browser. Nothing is read on render; every failed read falls through to the browser. - The PR opener leaves the Issues view when it navigates the PR page. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(web): address review of Issue and PR link opening (#40) - On the web, when the click's user activation lapsed during the reads, the browser fallback shows a toast with an "Open on GitHub" action instead of a window.open the popup blocker would swallow. - Leaving the Issues view to open a pull request pushes a history entry, so Back returns to the Issue. - A repeat click while a link is being read joins that read. - The user guide says the fallback follows the "Open links in" setting. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(web): ask for a fresh click only when the fallback opens a web tab (#40) The "Open on GitHub" toast now appears only when the fallback would open a new browser tab on the web after the click's activation lapsed, not when "Open links in" sends the link to the in-app browser or on desktop. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
* fix(web): Issues filters use the PR Filters menu (#42) The Issues toolbar had its own State dropdown, a sort button labelled with the current sort and one long Filters list. It now uses the pull request list's Sort button, Filters trigger and per-filter submenus. Project, Labels and Parent search like the Author filter. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * fix(web): keep active Issue filters visible and test filter search (#42) Milestone and Parent keep an active value listed after the loaded rows stop carrying it. The Filters count includes State like PR mode, and Clear filters resets State too. The searched submenu option logic moves into a pure helper with unit tests. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
d7ee6ae to
8518d0d
Compare
Independent re-review:
|
Absorbs upstream
pingdotgg/t3codemainthroughde251fc29into the fork stack (#6). This body is the absorption record (see the Routine indocs/fork.md).This PR lands by
--force-with-leaseafter human approval, not by merge. Its base isabsorb-base/de251fc29, a branch at upstreamde251fc29, so the diff is only the fork stack and CI runs. GitHub runs nopull_requestworkflows while a PR conflicts with its base, and againstmainit did. After approval:Record
b2b43bef73447c483ceae486890cb79f01c369cb, targetde251fc2971a884cb5b1305ba4daf309dc8cccb0, 128 upstream commits.8518d0d86cdf432c371441909e996fcef0b3e9f9, the same 17 fork commits replayed. No commit was added, so the stack is 17 of the 20 allowed.apps/web/src/components/onboarding/WelcomeWizard.tsx(fork feat(web): show Chromeria as the product name in the web UI #14 against upstream #13397): upstream'stext-2xlclass with ourAPP_BASE_NAME.knip.jsonc(fork feat(fork): map fork features and report upstream overlap #24 against upstream #13589): both script entries,setup-worktree.tsandfork-features.mjs.apps/server/src/orchestration/ThreadSettlementReactor.ts(fork Sidebar: show a parent thread as working while its child threads work #31 inside feat(web): GitHub Issues next to PRs, linked to threads, with computed status (#25) #37, against upstream #13691 and #13765):a settled child thread's background work keeps its parent active, covering both sweep paths. Mutation checks confirmed it fails without the unfiltered read and without the settle-time check.planPrismRolePatch(fork feat(web): Prism settings in the Providers layout, lanes only for Worker #35) names its return type, because upstream's stricter typecheck (TS4058) rejects the inferred privateScopedServerWrite.text-3xs,text-2xs,text-xs leading-normal,text-success-foreground,border-warning/30 bg-warning-surface.ci.yml(fork docs(fork): Chromeria install, rebase routine and GitHub-hosted CI #9): theTeststep on GitHub-hosted runners uses--testTimeout=20000.docs/fork.md(fork docs(fork): Chromeria install, rebase routine and GitHub-hosted CI #9): absorption PRs use anabsorb-base/<sha>base, and the absorption record goes on the PR and the fork-maintenance Issue. The in-repo absorption log section is removed.threadAutoSettleOptOutcapability merged beside ourissuesandissueLinkscapabilities./pull-requests, which also hosts our Issues view. No fork edit needed.ChatMarkdown.tsx.scripts/fork-rebase.sh --proofon72ba8f658passed in 590s: fork check, install, typecheck, lint 0 errors, 18,240 tests passed in 14 packages (70 skipped, 0 failed), fmt.d7ee6ae1d: reactor tests 60/60, fork-maintenance tests 12/12, server typecheck,vp lint0 errors (code identical toabcb2a517),vp fmt --check,scripts/fork-check.shOK.8518d0d86: all jobs pass (Check, Test, Test Server 1-3, Fork Stack Model, Rust, Release Smoke, mobile checks).Test, on upstream'spackages/client-runtime/src/platform/persistence.test.ts > encodeShellSnapshotForCache. It timed out at vitest's 5000ms default after 7.3s on the GitHub-hosted runner. Upstream ran it in 2.3s on Blacksmith at the same commit.ci.ymledit: theTeststep passes--testTimeout=20000. The upstream test is untouched.Claude Opus 5.5 (1M context) via Claude Code in T3 Code.
🤖 Generated with Claude Code