Skip to content

chore(upstream): advance to V2 67a2be0 with release archives and migration bridge - #262

Merged
Jacksondr5 merged 1202 commits into
j5/mainfrom
j5/upstream-sync-20260924
Sep 25, 2026
Merged

Jacksondr5 merged 1202 commits into
j5/mainfrom
j5/upstream-sync-20260924

Conversation

@Jacksondr5

@Jacksondr5 Jacksondr5 commented Sep 24, 2026 •

Copy link
Copy Markdown
Owner

Advances J5 from pin 62aef8587c to upstream t3code/codex-turn-mapping at 67a2be0fdb (PR pingdotgg#2829, frozen 2026-09-24). Upstream force-rewrote the branch again, and a plain merge produces 554 conflicts because git picks the wrong base. It also renumbered migrations, so every existing J5 database would refuse to boot. And it replaced npm distribution with release archives hard-wired to upstream.

How

Built per FORK.md's rewrite runbook. The candidate descends from upstream (74d7007334), and this merge joins it with j5/main at 2cf4ad7a83; the merge tree equals the candidate tree. The 11 PRs that landed on j5/main during review (#247, #241, #244, #242, #214–#216, #248–#251) are carried onto the candidate one commit per PR and adapted to V2. Their FORK.md cases are renumbered 42–45; J5 migrations 18–19 stay in the J5 lane. The 132 real conflicts were resolved using the pin as the content base.

  • Migrations:
    • A new exact bridge arm takes the recorded 51=OrchestrationV2 history to upstream's 51–55 in one transaction. The August and September bridges are kept, and check-upstream-migrations.ts recognizes the pin as a reviewed source.
    • statev2.sqlite (upstream's copy-on-first-start) is adopted, and J5 tooling and guards point at it.
  • Distribution (new FORK.md case):
    • Release archives come from Jacksondr5/j5code. j5-release.yml builds, signs, notarizes and uploads darwin-arm64 and linux-x64 archives, SHA256SUMS and install.sh. npm publishing is removed.
    • The service is renamed to j5code.service / codes.jackson.j5code.service. The handover is transactional, retires the old unit only when it carries J5CODE_HOME, verifies the new unit is active, and refuses when a drop-in carries Condition lines.
    • The first archive release is 0.0.43. The migration guide is in docs/user/migrating-to-release-archives.md.
  • Runtime policy:
    • Native resume is narrowed to upstream V1's rule: start fresh only when the conversation is gone (with a visible notice), and fail visibly otherwise.
    • The committed-Stop steer guard is kept and now also refuses usage-limit auto-resume. The restart-continuation guard is dropped.
    • Held queues follow upstream; J5 no longer reports held A2A deliveries as delivered.
  • New upstream thread-creation and archive paths:
    • the header thread menu gets J5 delegates
    • multi-model send carries the Squadron and refuses saved-agent drafts
    • background clone returns the folder
    • archive Undo is hidden when the archive retired Crews
  • Steering and queues: J5's truthful-steer layer (cases 27 and 29) is retired in favor of upstream's steering and queue UI. The remaining UX gaps are tracked for give-back in Upstream give-back backlog (hold until V2 merges upstream) #276.
  • Clients:
    • The Squadron dropdown moves into upstream's SidebarThreadHeader scope slot.
    • @ lists saved agents, then threads, then files.
    • AgentsPanel identity moves to the lineage and subagent rows.
    • Desktop keeps j5code profiles.
  • Patches and housekeeping:
    • Five temporary patches are retired now that upstream fixed them; the rest are kept.
    • An upstream Node 24 boolean-binding bug in usage-limit recovery is patched.
    • New upstream workflows are guarded to pingdotgg/t3code.
    • FORK.md, BRANDING.md and the pin log are updated.

Verification

  • Typecheck: 0 errors in all 10 projects. Lint and format are clean.
  • Tests: server 6,554 passed with none failing; web 5,889, client-runtime 1,913, mobile 1,840, desktop 1,394 (plus one pre-existing pkg-config failure), shared 978, contracts 536.
  • Migration rehearsal: fresh VACUUM INTO snapshots of real September and pin databases, run through production layerConfig. J5 tables were unchanged, integrity and foreign-key checks were clean, the schema equals a fresh upstream database, and a second boot is a no-op.
  • Release archive: a local linux-x64 archive was built and smoke-tested, and install.sh into a temp HOME reports j5 v0.0.43.

Not yet verified:

  • the hosted release run, including signing and notarization
  • a real service handover
  • desktop and mobile client passes. A web pass on a copy of real data is in j5/evidence/pr-262/4e02e690de; it predates the carried PRs.
  • CI on this head

Implemented by Claude Opus 5.5 in Claude Code (T3 Code), selected and blended from four independent builds, each reviewed by three independent reviewers.

🤖 Generated with Claude Code

saphid and others added 30 commits September 23, 2026 20:58
…ingdotgg#11518)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
ConnectionCatalogEntry gained a required enabled flag in pingdotgg#11478, but the
threadShell harness never set it, so enabled-gated atoms filtered every
environment out and two tests failed. Two dead exports also tripped knip.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…d composer state

ThreadNotificationCoordinator presents raw OrchestrationV2ThreadShell
records, but its tests still fed the pre-v2 thread shape (session /
latestTurn), which crashed presentThreadShell on missing DateTime fields.
Rebuild the fixtures as v2 shells with pendingRuntimeRequest and run
statuses, and remove the composerHasUnsentContent binding left unused by
the compaction gating change.
…#11534)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
pingdotgg#11566)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…ed restarts (pingdotgg#11565)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…otgg#11533)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…ation fails (pingdotgg#11557)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…ords (pingdotgg#11505)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…tgg#11508)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
…g#11499)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…#11574)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
… scheduler (pingdotgg#11585)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…pingdotgg#11590)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…n Squadron

- MessagesTimeline's new assistant author heading reads APP_BASE_NAME from
  J5 branding instead of upstream's literal "T3 Code" (BRANDING.md).
- The current-thread header resolves its Squadron as the durable home,
  else the draft's explicitly chosen Squadron (resolveHeaderSquadronRef),
  else the existing directory shortcut; the header button still starts a
  new thread, now in that Squadron (FORK.md case 19).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Lineage row button is full width and never shrinks (upstream's
row class plus the Button base), so the J5 persona and handoff-artifact
chips mounted beside it overflowed the thread details panel. One J5
wrapper (flex min-w-0 flex-1) around the upstream row control lets the
title truncate and keeps the chips in the row; upstream elements are not
restyled. FORK.md's identity row notes the wrapper.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Jacksondr5 and others added 2 commits September 24, 2026 22:49
…hip tell the truth

- The sidebar header's add-folder button opens the existing J5 Create
  Squadron dialog (name, then folder through the case-13 carrier) instead
  of upstream's Add Project flow, so it never opens a Squadron-less draft.
  Label: "New Squadron".
- The Squadron scope trigger uses the sidebar header's own control
  variants: icon-only for All Squadrons, the 28px size with a truncated,
  width-capped name and full-name tooltip once scoped.
- The draft chip and headline name only the first-send carrier (durable
  home, else the draft's explicit choice), never ambient scope, which
  send refuses (resolveEffectiveSquadronId, with a test).
- FORK.md cases 9, 13, 16 and 19 updated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Personas, the Playbooks library and Skills each had their own
environment/workspace picker that could disagree with upstream's
"Applying settings for ... across ..." scope. They now start from and
follow the selected environment (and project, for the Playbooks
workspace list and the skills inventory); pickers remain only where the
scope has no equivalent (worktree workspaces, a choice among several
selected environments).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Jacksondr5 and others added 2 commits September 25, 2026 01:33
…fills its dialog

- The one Create Squadron dialog is mounted once in AppSidebarLayout
  (SquadronCreateDialogHost) and opened through openSquadronCreate()
  (j5/squadron/SquadronCreateRequest.ts). The palette's Add Project and
  Open WSL folder actions and the bus-dispatched doors (NoProjectsHero,
  PullRequestListEmptyState, LegacySidebar) open it instead of landing on
  a Squadron-less draft; only a waiting J5 flow (Create Squadron's own
  Choose folder, the skill installer's source picker) gets the folder
  picker (resolveAddProjectDoor, with tests).
- SquadronCreateForm no longer carries the first-run gate's max-w-sm
  width cap (present since F); FirstRunGate wraps it instead, so the
  dialog's fields span its content width.
- FORK.md cases 9, 13, 16 and 19 and the path ledger updated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…coped project

- "Scoped personas" is renamed "Library" (docs/user/personas.md updated).
- When the settings scope names a project, the skills installed-inventory
  picker is locked to that project's checkout (lockedSettingsScopeProject,
  with tests); with All projects it stays selectable.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Jackson's decision on the case-19 open item: the success toast still
reports the clone, but its "Open project" action (which opened a
Squadron-less draft) is removed along with its now-unused new-thread
handler. The cloned folder is chosen from Create Squadron instead.
FORK.md case 19 records it as resolved; ledger row added.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Jacksondr5
Jacksondr5 force-pushed the j5/upstream-sync-20260924 branch from 2c76f88 to c3c0da2 Compare September 25, 2026 02:10
Jacksondr5 and others added 2 commits September 25, 2026 02:14
…mmit

CodeRabbit on #262: the already-published check accepted any non-draft
release with SHA256SUMS, so a dispatch that forgot to bump the version
ended green without ever reaching the publish job's tag-SHA check. The
resolve job now resolves the existing release tag's commit (commits/<tag>,
as the publish job does) and fails on a mismatch; it reports "already
published" only when the commit matches and SHA256SUMS is attached.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Joins fork head 2cf4ad7 (j5/main, including #247, #241, #244, #242,
#214, #215, #216, #248, #249, #250, #251) with the reviewed candidate
(j5/upstream-sync-20260924-candidate), which descends from frozen upstream
67a2be0. Upstream force-rewrote history,
so per FORK.md's rewrite runbook the candidate was built from the upstream
tree with pin 62aef85 as the content base, then carried each j5/main
PR since 8f56083 onto it and adapted it to upstream V2. This merge's
tree equals the candidate tree exactly.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.