Repository navigation
Stage C T3 lane: integrate #17, #20–#26 - #27
Conversation
Bases show whether they were built from their current definition (Trellis base_states) and can be rebuilt from their built-in definition through a new trellis.buildBase RPC (POST /v1/bases/build, operate scope); custom bases are left to the CLI. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…; Settings shows builds already running Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…tached build's failure; older servers' details still decode Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…s current Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Shows and edits Trellis's history settings (snapshot timer, turn and timer snapshot retention, trash and incoming expiry) through two new RPCs, trellis.getHistorySettings and trellis.updateHistorySettings, backed by GET/PUT /v1/settings/history. Each value commits on blur, Enter or the step buttons and sends only that key; Trellis's refusal shows under the row, and a save that the next thinning acts on says how many snapshots go. Live snapshot counts per kind and the last thinning are shown read only. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…t write - Unchanged-detection compares with the field's pending value, else the value in force, so 30 -> 14 -> 30 before the answer still sends 30. - updateHistorySettings runs serially per environment; each write carries a per-field revision, and only a field's latest write clears its draft or shows its refusal, so a stale failure never undoes a newer edit. - A successful write's returned values show at once (until a newer read), and a failed refresh shows a stale notice beside the cached values. The edit state lives in TrellisSettings.logic.ts with unit tests; the server test also maps all eight keys out in one PUT. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ace Undo instead Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…or the base's state changes Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ne servers stay Codex 0.160 lets a nested mcp_servers table in thread/start config replace every server given on its command line (-c mcp_servers.*), which drops the MCP servers Trellis agent profiles add; a dotted mcp_servers.t3-code key merges. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… targets instead of the M1 limit Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…e number fields mounted while stepping Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…came with its build endpoint Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Trellis reports preview_host in /v1/status and changes it without a restart (PUT /v1/settings/previews); Settings shows it and offers this machine, the local network, the tailnet or an address, through a new trellis.setPreviewHost RPC (operate scope). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…a refused address; say what LAN exposure means Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ot move Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…keys Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ngs refresh every minute Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… field never saves Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ted for failed 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>
…llis launch skips profile instructions The primer request names the provider, so it carries that provider's agent profile instructions, and launch.env sets TRELLIS_INSTRUCTIONS=t3 so trellis launch does not add them a second time. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… launch Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…edge option
A fork made for a delegated child is sent with spawn: true, so Trellis
gives it the project knowledge tier read-only by default, and
workspace.fork.knowledge ({project, notes, groups, groupsRw}) passes
through to POST /v1/fork. The worker guide names the knowledge paths.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…group names checked T3 forks on the user socket, which Trellis does not limit, so delegate_task checks the lead's own access (GET /v1/knowledge): project write, and each existing group at the access handed out; new groups are created by the spawn. Group names follow Trellis's [a-z0-9_-]. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ages Adds trellis.getProfile (GET /v1/profile) with a lenient decoder, and an Agent profile section: Settings > Trellis shows the agent homes and global layer, a Trellis project's settings show each live workspace's effective profile with T3's own t3-code server. Items show their layer and states (needs approval, needs trust, not enforced, not loaded, error); profile errors show as warnings. No approve or apply actions yet. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…s and only the lead's own groups A lead that sees no project tier hands its worker none (the worker default, read, is lowered), group access is looked up only among the lead's own groups, and a Trellis without knowledge tiers still forks a worker that asked for none. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…the profile's instructions Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
A failed refresh flags the cached profile as possibly out of date; loose profile errors are matched by layer, item and message against the shown provider only; a layer's switch shows on approved items too. The server test's fake filters by provider as Trellis does. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…Trellis without tiers Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
… trellis base ls too Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: db24211cbc
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| {defaultMissing ? ( | ||
| <SettingsRow | ||
| title={ |
There was a problem hiding this comment.
Offer the build action for an unbuilt default base
When defaultBase is configured but absent from bases—a state explicitly allowed by the contract—this branch renders only a warning badge. Because the new build button exists only inside bases.map, users cannot invoke trellis.buildBase for the missing default even though project creation is blocked until that base is built, forcing them back to the CLI.
Useful? React with 👍 / 👎.
| if (edit.kind === "invalid") { | ||
| apply((current) => rejectHistoryEdit(current, key, edit.message)); | ||
| return; |
There was a problem hiding this comment.
Block maintenance after a locally rejected history edit
If a user clears a history field or enters another locally invalid value and immediately clicks Run now, the field's blur reaches this branch before the button click, but the rejection is not recorded in writes.current. Consequently thinNow still sees a successful save chain and runs thinning with the previous retention value, potentially deleting snapshots under settings different from what the user intended; local validation failures should make the pending maintenance check fail just like rejected RPC writes.
Useful? React with 👍 / 👎.
Merges the eight Stage C T3 PRs at once; they conflict pairwise (new RPCs, settings sections and tests in the same places), and this branch resolves the conflicts once. Each PR's head is contained here, so they close as merged.
mcp_servers.t3-codeTRELLIS_INSTRUCTIONS=t3spawn: true+knowledgeChecked: typecheck, knip, server Trellis/MCP/Codex tests (529), web component tests (3108); demos on Trellis main: demo-trellis 22/22, demo-workers 10/10, demo-graduation 8/8.
🤖 Generated with Claude Code