Skip to content

feat(j5): advance to upstream T3 Code v0.1.7 - #971

Draft
Jacksondr5 wants to merge 1483 commits into
j5/mainfrom
j5code/upstream-v0.1.7
Draft

Jacksondr5 wants to merge 1483 commits into
j5/mainfrom
j5code/upstream-v0.1.7

Conversation

@Jacksondr5

@Jacksondr5 Jacksondr5 commented Nov 8, 2026 •

Copy link
Copy Markdown
Owner

Problem

J5 was pinned to upstream T3 Code v0.1.3. Upstream has since shipped stable v0.1.4 to v0.1.7, 1,466 commits that include linked environments, side chats, project pin and archive, Force stop, one-time schedules and event-log pruning. This PR advances J5 onto v0.1.7 (322f6544df). It's tracked in #772 and the "Upstream advance: T3 Code v0.1.7" milestone.

What changed

One merge of the v0.1.7 tag onto j5/main (fork head 49bd690ffe, previous pin d2c440312e), then J5's adaptations. A later j5/main (b1090fb991, bringing #966 and #968) is merged in as e5c34e54e6. Jackson took 18 decisions for this advance; the full record is the J5 artifact upstream-merge-2026-11-04/decisions.md. In short:

  1. Linked environments are adopted as upstream ships them (Labs, off by default). Agents get t3_environment_links, t3_environment_link and t3_environment_unlink, and the CLI gets j5 environment. J5's peering stays the messaging path between machines. Each Connections section now has a one-line description.
  2. Event-log pruning is adopted. J5 migration 056 stores when a prompt was settled on j5_a2a_prompt_answer and backfills it, so "who answered" survives pruning and restarts.
  3. Agent tools (register D1, D2 and D42, from docs(j5): the agent tools after linked environments #954):
  4. Copy thread links go to https://j5.codes/threads/<env>/<thread> (the page shipped in feat(marketing): j5.codes page for copied thread links #968). Upstream's hosted-app setting is left alone.
  5. Track switching: the per-desktop Stable/Nightly switch stays; the fleet-wide switch is Fleet Stable/Nightly switch reads J5 releases, not npm #927.
  6. Update everything's "release published" wait is retired.
  7. The GitHub star prompt points at Jacksondr5/j5code, with J5 copy.
  8. Side chats are treated like subagents: not participants, not on Fleet, and visible to whoever can see the parent.
  9. Deleting a side chat: anyone who can write to the parent can delete it.
  10. D6: upstream's handoff-budget fresh start is accepted, with its own visible notice.
  11. Queue reordering leaves the UI, as upstream did. Agents can still reorder.
  12. Held queues:
    • A J5 delivery to a held queue resumes it whether the agent is idle or busy, so messages run in the order they landed, a person's included.
    • A peer update never steers past held messages.
  13. Turn into project is adopted. Re-homing the participant afterwards is A2A is untested for threads in upstream's "No project" project, and envelopes would name it as a project #539.
  14. D22 (spawned agents nest under their spawner) is approved as it works today, and re-placed in upstream's new sidebar.
  15. Queued senders follow D38: J5 names on upstream's folded row, and everyone but you on the left.
  16. AGENTS.md takes upstream's browser wording.
  17. Upstream's user docs were restored before this merge, in docs(j5): upstream's user docs go back to upstream's text #947.
  18. Highlights: a Side chats entry, and the 0.1.3 roundup extended under a new id.

Also in this PR:

  • Effect 4.1.
  • Crew archive moved off upstream's deleted ThreadLifecycleService.
  • The access table: upstream's new RPCs, given levels or refused by default.
  • D19 paths: managed policy, the protect drop-in and the compile cache.
  • Pairing links use j5code://pair.
  • Branding: the sweep of new upstream copy, with BRANDING.md updated.
  • Workflows: repository guards on three new ones.
  • Migration manifest reviewed-v0.1.7.v1.json.
  • Rerecorded numbers: the agent context budget and the shard weights.
  • D24 (Astra aliases) is retired.
  • Records: FORK.md, the register of divergences, and the upstream convergence watchlist are rewritten for v0.1.7.

Verification (on 0da4ee38b0):

  • vp run check:changed passes: format, lint, knip, graphql, typecheck of 40 packages, react compiler.
  • Its test step ran 18,867 tests: one failed under parallel load (AttachmentFilePreview.browser.test.tsx) and passes alone.
  • Migrations were rehearsed on a VACUUM INTO copy of a real database, booted twice: upstream 070–079 and J5 52–56 applied, with integrity and foreign-key checks clean.

Review was by Fable 5.1, Opus 5.5, Sol 6.1 and Astra. Every agreed finding is fixed in 1f3b0b9942, 0b7312c792 and 0da4ee38b0.

UI changes

Web captures: "before" is 49bd690ffe, "after" is 0da4ee38b0. Links captures were taken at cb913693a9 and 0b7312c792. Android captures compare 49bd690ffe with 0b7312c792. Each pair uses the same test data, viewport and theme. iOS captures compare a 49bd690ffe client with a 0da4ee38b0 client, against the same 0da4ee38b0 test server and data (the setup script can't run a base server with --mobile).

Before After
Persona draft composer (no permissions control) Persona draft composer (no permissions control), before Persona draft composer (no permissions control), after
Queue: your own message Queue: your own message, before Queue: your own message, after
Queue: automation message Queue: automation message, before Queue: automation message, after
Sidebar, default layout, spawned agents and Crew Sidebar, default layout, spawned agents and Crew, before Sidebar, default layout, spawned agents and Crew, after
Sidebar, Labs project folders Sidebar, Labs project folders, before Sidebar, Labs project folders, after
Settings → Labs Settings → Labs, before Settings → Labs, after
What's new highlights What's new highlights, before What's new highlights, after
Typing /side Typing /side, before Typing /side, after
Side chats listed in thread details new Side chats listed in thread details, after
Star prompt new Star prompt, after
Settings → Connections Settings → Connections, before Settings → Connections, after
Settings → Connections, with a linked environment and a peer new Settings → Connections, with a linked environment and a peer, after
Settings → Connections, empty new Settings → Connections, empty, after
Link card raised in an ordinary thread new Link card raised in an ordinary thread, after
Link card raised by a Full access Crew seat new Link card raised by a Full access Crew seat, after
Android: thread feed Android: thread feed, before Android: thread feed, after
Android: new task Android: new task, before Android: new task, after
Android: persona picker Android: persona picker, before Android: persona picker, after
Android: playbook picker Android: playbook picker, before Android: playbook picker, after
Android: side chat listed above the composer new Android: side chat listed above the composer, after
Android: replying in a side chat new Android: replying in a side chat, after
iOS: thread feed, agent message expanded iOS: thread feed, agent message expanded, before iOS: thread feed, agent message expanded, after
iOS: new task iOS: new task, before iOS: new task, after
iOS: persona picker iOS: persona picker, before iOS: persona picker, after

Side chat, Bring back (web, after):

side-chat-bring-back-after.mp4

Not captured:

  • A queued agent message and a queued "Sent by J5 Code" message. A peer message to a busy Claude or GPT 6 agent steers by design, and no UI path queues a server message. Browser tests cover both rows and their side.

Live testing

Testers ran on isolated test servers, with agent turns on Claude Haiku and GPT Luna. Reports are J5 artifacts under test-reports/upstream-v0.1.7/.

  • Agents and delivery:
    • First pass at cb913693a9, second at 0b7312c792. Pass for everything reached:
      • a person types into a delegate;
      • t3_thread_wait times out once and isn't repeated, including two agents waiting on each other at the same time;
      • a waiting agent still receives a peer's ask;
      • an idle held queue runs in landing order;
      • side chats: hidden from participants and Fleet, and a Collaborator can delete one, including by closing it;
      • Crew archive;
      • a Codex turn;
      • Copy thread;
      • an abandoned delegate is stopped with task_cancel.
    • Not reached:
      • Busy agent with a held queue: the rig can't hold a busy agent's queue. Covered by DeliveryTransport.integration.test.ts, which fails without the fix.
      • Turn into project: threads without a project need a server home outside a git checkout, which the test rig doesn't create.
  • Links and pairing (cb913693a9, retested at 0b7312c792): Pass.
    • links made with a minted code and with a pasted j5 pair --person code, each recorded under the remote's Owner;
    • Forget removes only the local side;
    • link cards from an ordinary thread and from a Full access Crew seat;
    • J5-to-J5 plain delegate: launches, is followed and can be cancelled, and stays out of the target's ledger;
    • an off-list model is refused with the eligible list;
    • the Owner-only pairing refusal;
    • j5code://pair;
    • with Labs off, agents don't see the link tools.
    • Not exercised: a real second machine (both servers ran on one host), and the startup link scheme (checked in code only).
  • Web UI (0da4ee38b0): Pass for everything reached, with captures above. The persona-draft permissions control is gone.
  • Android (0b7312c792; only J5 server delivery code changed after it): Pass for everything reached:
    • native install and pairing;
    • a persona Haiku turn;
    • the playbook picker;
    • folded agent messages;
    • Copy thread and the thread deep link (dev scheme);
    • queue controls;
    • side chats;
    • a restart.
    • Not exercised: QR camera decoding, J5 notices, and a queued J5 sender row (deliveries steer).
  • iOS (Simulator on the MacBook, 0da4ee38b0): Pass for everything reached:
    • native install, and pairing through Connections → New;
    • a persona Haiku turn;
    • the playbook picker;
    • folded agent messages, expanded;
    • a side chat started on web, replied to from iOS;
    • Copy thread and the thread deep link (dev scheme).
    • Not exercised: queue actions (seen but not pressed), and videos.
    • The startup j5code://pair link opens the desktop app's add-server dialog. Mobile has no pair route (neither upstream nor J5 before this merge), so mobile pairs through Connections → New.
  • Jackson's iPhone checkpoint: pending. This PR stays a draft until it's done.

Upstream impact

This is an upstream advance, so it edits many upstream-owned files. Every edit is recorded in FORK.md:

  • New cases: 110 (agent context budget), 111 (link-session launch and its model check), 112 (an optional description on upstream's SettingsSection).
  • Retired: cases 32 and 36, and the saved-usage and mobile Working temporary patches.

Changes to what upstream's product does are Jackson's decisions above, and each has an entry in docs/j5/product/upstream.md:

  • D2, D4, D6, D18, D19, D20, D22, D25, D26, D36, D38, D40 and D42 are updated;
  • D24 is retired.

Upstream issues found during this advance, for the give-back backlog #276 (nothing posted upstream):

  • A steer into an interrupted or failed provider turn, while its run is still going, has no fallback and never runs (EffectWorker.ts steer fallback, ProviderTurnControlService.ts).
  • The writes fence refusal names scheduled tasks for every tool it fences (McpToolAccess.ts).
  • new-task-flow-provider.test.tsx breaks when an import reaches expo (__DEV__ undefined in the react test project).
  • Web browser tests reload mid-run when Vite optimizes a dependency missing from optimizeDeps.include.
  • The fresh start on an exhausted handoff budget posts no notice.
  • A side chat keeps running after its parent is archived.

Checklist

  • One concern: the description has no "also". The concern is the upstream advance; the adaptations are what it forces or what Jackson decided for it.
  • Tests cover the changed behavior (backend changes ship with focused tests)
  • UI changes: before/after screenshots above, and a video for motion or interaction. Two queue rows weren't capturable (see above).
  • Live testing: the section above says what ran live and what did not
  • Upstream-owned files: each one is recorded in FORK.md (case text and file-table row) in this PR
  • Upstream product: any change to what upstream's product does has a human decision linked above and a register entry in docs/j5/product/upstream.md
  • Surfaces: entry points, clients, providers, contracts, reverse states, connection modes (see AGENTS.md). Web, desktop and mobile; Codex and Claude live, other providers through upstream's adapters
  • Docs: definitions under docs/j5/product/ and user docs rewritten where this changes them

For Jackson's docs/UI review (non-blocking asks):

  • The roundup's title, "Also new: pinned projects and Force stop".
  • The 0-1-3 page's "Agents that other agents started still nest under them" (it means under their spawner).
  • The deliberately unchanged T3 copy listed in BRANDING.md:
    • mobile's crash-report note, which needs a relay J5 doesn't set;
    • Secrets settings, behind a flag J5 leaves off;
    • the unused track-switch dialog;
    • the app.t3.codes mentions in the policy templates and TriageService.ts:47.

Built by Claude Opus 5.5 (lead and builder) in Claude Code, driven from J5 Code. Reviewed by Claude Fable 5.1, Claude Opus 5.5, GPT 6.1 Sol and GPT 6 Astra. Tested by GPT 6.1 Sol testers.

🤖 Generated with Claude Code

saphid and others added 30 commits November 3, 2026 01:41
…mpty (pingdotgg#29579)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…9101)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…them (pingdotgg#29573)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…overwrite (pingdotgg#28351)

Co-authored-by: PR Batch Tester <agent@local.test>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ffect 4.1.2 upgrade (pingdotgg#29780)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
…ut tail splits an emoji (pingdotgg#29168)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
…hanged test (pingdotgg#29839)

Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
…ments early (pingdotgg#29717)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…tatus (pingdotgg#29627)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…otgg#27577)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…y Running (pingdotgg#28356)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ed parents (pingdotgg#27951)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…server (pingdotgg#27703)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…gg#25252)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…tgg#23033)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…s skip-worktree or assume-unchanged (pingdotgg#23624)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…otgg#29415)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…wser reports offline (pingdotgg#29347)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…hind (pingdotgg#28373)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…otgg#28253)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…el bursts (pingdotgg#28236)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ger stay running (pingdotgg#28040)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…rade from 1.x (pingdotgg#27779)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
saphid and others added 23 commits November 3, 2026 23:49
…t hooks (pingdotgg#29907)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…backports (pingdotgg#30161)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ol (pingdotgg#30481)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ient list (pingdotgg#30498)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Advance from the v0.1.3 pin (d2c4403) onto upstream's stable v0.1.7,
from frozen fork head 49bd690. One ordinary merge, 169 conflicts.

Resolves every conflict, compiles J5 against Effect 4.1 and upstream's
API changes, re-places J5's seams (D6, MCP registration, AccessGate,
timeline, queue, sidebar, mobile feed), applies the agreed decisions
1-16, the D19/D25 rebrand of new upstream copy and identity, and the
reviewed migration manifest for this transition. Docs follow.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The delivery harness refuses a steer into an ended provider turn, as the
Claude and Codex adapters do, so upstream's pingdotgg#25611 continuing-run check
reaches J5's existing fallback. Test mocks gain the services upstream's
shell feed now reads, and thread_wait and environment_links keep J5's
closed-world hints.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Server startup and j5 pair printed upstream's t3code://pair link, which
J5's desktop app ignored and mobile's QR scan could not unwrap. Build and
read j5code://pair instead, and say j5 pair in the linked-environment
hints. Also tests J5 migration 56's settled-time backfill and updates
knip's J5 ignores for the fleet track switch J5 leaves unused.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Pin log, FORK.md cases and ledger, BRANDING.md sites, the register of
divergences and watchlist, People and access AC14 for side chats, the
agent tools' new admissions, the updating notes, and one combined
Highlights roundup with a Side chats entry.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Brings #968 (the j5.codes thread page), #966, #903 and #905. #966's
FORK.md case keeps 109; the advance's new cases become 110 and 111.
Also records D24's retirement in the docs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Ruled against in #342; upstream v0.1.7 has no such aliases. D4's GPT 6
exception reads resolved names, and no stored selection used an alias.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Rebrand upstream's new test expectations and the Muse and Kiro replay
fixtures to J5's names, expect j5.codes thread links (decision 4), drop
the retired astra alias row, and rerecord the server shard weights.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Drop upstream's environment toolkit layer again, which J5's tool catalog
replaces, and shorten three comments.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- A persona draft's context strip shows no access control (D18).
- Queued automation and server messages sit on the left (D38).
- J5's instructions port upstream's delegate-stop and background-agent
  clauses; the agent context budget is rerecorded.
- getNativeChildWork is a thread read for narrowed people.
- A non-Owner's code says only an Owner's code can link or approve.
- Linked environments and Peer servers explain themselves above their
  entries, through an optional SettingsSection description (case 112).
- A link's delegate refused by Models for custom members gets the
  refusal naming the eligible models, not a generic error (case 111).
- Triage and an MCP log line stop naming app.t3.codes; dead queued
  delivery formatters removed.
- Tests: a restart replays a settle from the lifecycle cursor after the
  log is pruned; a linked client session sees and calls t3_thread_launch.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
BRANDING drops the retired release-published gate, the watchlist no
longer claims interrupt carries the Captain rule yet, the dogfood
runbook warns that pruned events are gone after a rollback, and D18
names the context strip.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A busy GPT 6 or Claude agent took a peer's update as a steer even when
its queue held earlier messages, so the update ran ahead of them. With a
held message queued, the update now resumes the queue and joins its
back, keeping landing order (decision 12).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@vercel

vercel Bot commented Nov 8, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
j5-code Ready Ready Preview Nov 8, 2026 8:12am UTC

Request Review

@github-actions github-actions Bot added the vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. label Nov 8, 2026
Jacksondr5 added a commit that referenced this pull request Nov 8, 2026
@github-actions github-actions Bot added the size:XXL 1,000+ effective changed lines (test files excluded in mixed PRs). label Nov 8, 2026
Jacksondr5 added a commit that referenced this pull request Nov 8, 2026

This branch was successfully deployed

1 active deployment
Preview — 0da4ee38 Deployed Nov 8, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL 1,000+ effective changed lines (test files excluded in mixed PRs). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.