Skip to content

Fork workspace backlog: stable reconciliation, attention, TWS and tags #1

Open
8 of 15 issues completed

Description

@jdbencardinop

Fork workspace backlog

This issue is the canonical backlog for the fork's local-first multi-machine
workspace. It tracks maintainer work in this fork, not an upstream feature
proposal. Stable upstream v0.0.42 reconciliation is accepted; its direct
implementation dependents can now become ready.

Goal and boundaries

One web/desktop/mobile frontend connects to independently authoritative
environments. Environments own native provider sessions, credentials,
filesystem and durable state. Reuse upstream connection ownership, canonical
repository grouping and scoped routes; do not build another orchestrator.

Add environment-owned current attention, one frontend inbox, optional
frontend notifications, TWS secondary grouping and thread tags. Server-only
machines remain notification-silent. Relay/APNs/FCM are optional delivery,
never state authority.

Current baseline

  • Latest published source fix: fix/copilot-turn-lifecycle at
    1af644681d931d77fdbda8a014d7c28fdd9ffdab. [COP-OBS-01] Keep Copilot turns working until native work completes #20 is complete: Copilot remains
    working through tool/model iterations until root native session.idle.
    This is the TWS/attention integration product plus the three-file lifecycle
    fix (adapter, tests and provider guide). All six complete maintained roots
    were reanchored on a clean first-landing history and verify. Product bytes
    match the tested integration exactly. Prior branches are preserved; no main
    merge, PR or release. Refreshed [PKG-01] Prepare native fork preview packages for macOS and Windows/WSL #17 packages now include this fix:
    0.0.42-preview.20261003.2, build bc9eeb9a6f5e3fe2e6d58d9c1b14d5ed93d6c2be.
    This revision corrects the WSL account-home probe identified by receiving-host
    feedback; confirmation of installed Windows/WSL behavior remains pending.
  • Preserved original branch: phase1/foundation, 2f39e594d205367367d00178ded4c3394ed073bc.
  • Original upstream: stable v0.0.38, c0995d2eaf8ec787b3318ed1169ae266ed1529f8.
  • Accepted working baseline: reconcile/v0.0.42-phase0,
    02abd6f050e22cb872dafa64806cba698beab7c5, on immutable upstream v0.0.42.
    No merge into the preserved original branch or live-data upgrade was performed.
  • Approved reconciliation target on 2026-09-22: stable v0.0.42,
    719a76ca1dbf5490f1aa33ffb9966301e02be9a9, published September 16.
    The exact stable v0.0.41 tag/release remains absent; the maintainer approved
    replacing that waiting gate with v0.0.42.
  • Isolated local branch: reconcile/v0.0.42-phase0, metadata-only seed
    3b351b8fc8415dd07b8466f93a4fef6ed28669ae, followed by reachable retirement
    satisfaction at b0b7a42934c39980bf25ab9d6740ae2e8c532477.
  • First retained root, copilot-cli-provider, landed at
    2489aedd76d8fddff4cb3df527df70e3eb4312cc.
  • session-search landed at 3ddfad118e062959f6cabbe0c4bee1f791081578.
    A separate Copilot SDK notice child landed at
    f6851c504353c0c02d5e18a1d152b6fcde390244, restoring the strict web build.
    The foundation/migration bridge landed at
    70d71759385de7a2b62b4d552f0290eebd33b804.
    Payload pruning landed at e4aaa9051dddc497739b54d0cca374c6029800aa.
    WSL executable/cache readiness landed at
    578a2add493d2654a153310aa4827eab6c7aa8b6.
    Exact generated-stage closure landed at
    fc01e75770e4b92c4a72d29cc58d612894a5a995, with its complete canonical
    patch re-attested at 77e0b48ab79995ec3d18ed1c28733ecb4ef5044e.
    The three packaging roots are now superseded by copilot-runtime-packaging,
    genuinely replayed and landed at 8400fe53cd5208d033b01a07f347b8b3a104ab0a.
    Consolidation tip was 6f4f49189cad1ac4dd9fb817053760248e1f092f.
    All five maintained roots verify; the DAG has zero violations. Source bytes
    and all 66 historical packaging artifact files are unchanged by consolidation.
    The two overlap findings are resolved. The tool gap is reported separately in
    verify: define overlap verification and consolidation for independently landed features tesserapatch#25 after duplicate review.
    Packaged testing then found/fixed search dismissal from button focus at
    06fb8876807cd02fce21e49295515ad2f0aebfd7; all five
    maintained roots verify. Foundation keeps search as approved soft ordering.
    Rebuilt Mac/Linux arm64 native runtime and SDK/CLI continuity gates pass;
    Mac integrated approval, restart/native resume, search and PTY also pass.
    The first Windows receiving run stopped on two fixture portability failures
    before packaging (222 passed, two failed, seven capability skips). These are
    repaired at current clean product tip
    02abd6f050e22cb872dafa64806cba698beab7c5, without changing runtime or pins.
    All five roots still verify; the nine-file gate passes on Mac/Linux.
    Native Windows/WSL passed a fresh no-skip receiving run through the published branch
    validation/v0.0.42-platform-qualification at
    1c2caea6195f4a88b2641525d197fe671ece30f1. Rustup PATH fixes are included.
    Receiving run 20260926T133913Z-ab83c2 passed 20 automated, 14 integrated
    and 6 cleanup gates. The whole Windows app is 59/80 files; both real T3
    environments preserve native sessions after restart and recover from the
    intentionally invalid WSL configuration.
    The maintainer accepted the measured cost as one over-budget stable
    reconciliation
    : 35 versus 33 carried primary-family files, but 12 versus
    six conflict paths. Thresholds are unchanged; Orca re-evaluation stays at
    three consecutive over-budget updates or another documented trigger.
    No PR or workflow was created.
    The validated phase1/foundation branch remains untouched.
  • Applicability research target: 4a4c6dd2adc350a68ba18bb28b24b5a7e4660dab.
  • Prior Phase 1 work is complete; that does not qualify a future stable port.

Ready implementation

ATT-01 / #3 is implemented locally on phase2/current-attention at
6cc650d507d3ff80e23919d687fbc2920497da5f (source bbbaf1c50).
It extends the existing Foundation root with fork migration 46 and replayable
current approval/input state, leaving the audit and clients unchanged.
All five maintained roots verify; no push, PR or live database upgrade.
The accepted stable qualification remains at 02abd6f, not this new slice.

ATT-02 / #4 is implemented locally on phase2/thread-awareness at
d701ac195d8f7eb35f750e47747bebc073dac545 (source 21de9d720).
It adds accepted provider lifecycle evidence, fork migration 47, scoped
failure/disconnect items and bounded thread summaries in the same Foundation
root. Native callback requests resolve by matching lifecycle; message-mode
questions remain answerable. Client-only connection loss is not canonical
provider loss. All five roots verify; no live data, push or PR.

ATT-03 / #5 is implemented locally on phase2/attention-sync at
5d5c9380b411848940057f31610c105f10d30392 (runtime source 490cf0292).
It adds the authenticated owned snapshot/replay/live stream, fork migration48,
bounded derived delivery state, signed scope-bound cursors, explicit recovery
and a shared client staging reducer. All five roots verify. No UI,
environment aggregation, notifications, push or PR.

ATT-04 / #6 is implemented locally on phase2/attention-aggregation at
c87189e978856b8fd6043f42e296d2cf312cb6cc (source ddb58554b).
It adds one shared registry-owned attention workspace, independent scoped
caches, atomic fences, explicit partial/stale counts, deterministic filtering/
ordering, authorization/removal eviction and advisory-only relay hints.
Web/desktop and mobile export lazy shared state; inbox UI remains #7/#15.
The full 71-path Foundation root and all five maintained roots verify.
No provider/server changes, live data, notifications, push or PR.

ATT-05 / #7 is implemented locally on phase2/attention-inbox at
d7d039d261191ecb035f2f0582d6dc4cdffe4422 (UI source baf051d96).
It adds the virtualized web/desktop inbox, persistent actionable-thread badge,
scoped filters/navigation, current/legacy/Settings/palette/custom-binding entry
points and reversible device-local seen revisions capped at 2000.
The new separate attention-inbox tpatch root retains all 16 paths; all six
maintained roots verify. Parent canonical intent is unchanged.
An approved isolated browser pass covered 2402 items with 14 rendered rows,
one attention stream, no pre-navigation thread detail, persisted seen state
and offline/reconnect behavior. No live data, OS notification changes, push or PR.

ATT-06 / #8 is implemented locally on phase2/attention-notifications at
d24e4a527c895426889df2a2beb74acd02a25d58.
The existing notification coordinator now consumes replay-safe canonical
eligibility with client-local category/mute/quiet-hour policy, static payloads,
visible delivery failures and scoped offline retry routing. Legacy detection
is exclusive fallback for explicitly unsupported environments.
The maintainer approved consolidating ATT-05 + ATT-06 into the 30-path
attention-notifications root after the old inbox parent/replay-anchor gate
became ambiguous. Historical inbox artifacts remain superseded, not rewritten
to pretend their old verification passed. A genuine full recipe replay at
0e412959124074776c7ed926f9081636eb582c6e established exact product equality.
Foundation retains its complete 73-path shared-state intent; all six maintained
roots verify and the DAG has zero violations. Final focused run: 241 tests.
Approved browser checks used controlled transport/notification stubs, not real
OS alerts or provider turns. No live data, push or PR.

TWS-01 / #9 is implemented locally on phase2/tws-context at
982929e9323f00ded5c7ca943f22a0bcef669a6f.
TWS is an optional integration, off by default per environment, with an
Integrations switch and complete disabled bypass. It adds typed public topology
normalization, coalesced read-only refresh, scoped coverage, revision-safe
logical/execution context and fork migration 49. Client grouping/tags remain
later slices. Foundation retains all 98 paths; client attention was genuinely
replayed on the updated parent, preserving prior branches instead of merging
obsolete source anchors. All six maintained roots verify; DAG: zero violations.
Focused gates, scoped typechecks/lint/build and approved isolated settings
verification passed. No live data, TWS mutation, provider turns, push or PR.

The attention and tag discovery specs are complete. This preparation turns
them into bounded implementation issues and tightens synchronization and TWS
lifecycle semantics. A ready specification is not implemented product code.

Pre-tag preparation completed on 2026-09-14: scoped issues published, protocol
and TWS lifecycle decisions tightened, and target-independent retained-root
intent prepared. All seven existing root/fixture bundles remain intact; no
recipes or lifecycle states were regenerated. The readiness addendum in #2
records stable-target SDK, migration, stale-search-recipe and dependency caveats.

Linked implementation slices and their dependencies are maintained below.
Refreshed native preview packages for #17 are ready at build commit
bc9eeb9a6f5e3fe2e6d58d9c1b14d5ed93d6c2be, branch
build/fork-native-preview-20261003-r2, version 0.0.42-preview.20261003.2.
They use fixed product 1af644681 plus the isolation overlay and its WSL
home-resolution repair.
Mac arm64 DMG/ZIP and isolated native UI/restart/singleton checks passed.
Build-only CI run 37094906868 produced the Windows x64 installer and its
hash-matched Linux x64 WSL archive. Renewed budget used: Linux 2/2, Windows 2/2.
Latest downloads and checksums are in #17; Actions artifacts expire 2026-10-17.
The prior batches remain preserved, not relabeled. The 20261003.1 receiving
test failed before WSL registration because its home probe returned no path.
The revised probe uses stdin rather than nested quotes in Windows argv and
does not weaken the Linux-profile isolation guard.

#17 remains open/blocked only on receiving-host installed Windows GUI and WSL
interaction. No release, signing, provider turns, live-state writes or feature
work were performed by the unattended packaging task.

Complete the receiving-host checks in #17 first. #10 is the next feature slice;
#11 and #15 are also unblocked but remain queued rather than parallel work
in progress.

Slice Issue Hard blockers
M-002: stable reconciliation and retained-root ports #2 Completed; accepted with one over-budget result
COP-OBS-01: truthful Copilot working/completion #20 Completed and published on fix/copilot-turn-lifecycle
PKG-01: isolated native preview packages #17 Artifacts ready; receiving-host Windows/WSL gates pending
ATT-01: current approval/input projection #3 Completed locally
ATT-02: lifecycle awareness/failure semantics #4 Completed locally
ATT-03: gap-free paginated snapshot/live stream #5 Completed locally
ATT-04: shared environment aggregation #6 Completed locally
ATT-05: web/desktop inbox and badges #7 Completed locally
ATT-06: frontend local notifications #8 Completed locally
TWS-01: typed topology refresh and thread association #9 Completed locally
TWS-02: secondary repository/thread grouping #10 Ready; #9 complete
TAG-01: tag contracts/storage/commands #11 Ready; #2 complete
TAG-02: web/desktop tag surfaces #12 #11
TAG-03: mobile tag surfaces #13 #11
TAG-04: derived TWS tags and source lifecycle #14 #11; #9 complete
MOB-01: mobile foreground/optional relay alignment #15 Ready; #6 complete
A-009: native provider capability vs T3 exposure inventory #16 None for research; queued, not in progress

Recommended execution queue: native preview packages, TWS grouping, manual tags on
all clients, derived tags, optional mobile delivery alignment. Independent
dependency branches are not permission to expand work in progress.

Requested proposals, separate from implementation

Unapproved requests live off the runnable stack. Research does not advance
tpatch lifecycle or authorize implementation. Existing #18/#19/#21 requests
retain baseline 982929e9323f00ded5c7ca943f22a0bcef669a6f.
New #22/#23 requests independently use shipped source
bc9eeb9a6f5e3fe2e6d58d9c1b14d5ed93d6c2be; neither branch includes the other
proposal.

Request Issue Branch / current finding
Narrow-window send shortcuts #18 request/composer-narrow-viewport-submit-override; existing request retained
NET-01: optional NetBird private-network integration #19 request/netbird-mesh-connectivity; requested, manual direct pairing already possible
COP-CTX-01: effective context tier and compaction controls #21 Same provider research branch; requested, lower default runtime budget and explicit long tiers measured
DESK-01: Windows menu/title-bar usability #22 request/windows-titlebar-menu; requested, native reproduction/root-cause decision still required
UI-01: configurable chat content width #23 request/chat-content-width; requested, preserve Standard and evaluate Wide/Full width

The provider follow-up branch was an explicitly approved exception to one
request/<slug> branch per proposal. #20 was subsequently approved and delivered
as a fixup of the existing provider root on the separate clean replay branch;
its standalone request is superseded. #21 remains requested. Both investigations
feed #16 without declaring the full inventory done. NetBird and narrow-window
shortcuts remain requested. No main merge, PR, release or new platform
qualification accompanies these changes.

The request-branch workflow
standardizes baseline recording, one independently decidable slug/issue,
metadata-only requested state, and explicit adoption into the current stack
after approval. The workflow is recorded on the request branch, not silently
merged into the runnable product.

Identification customization research

Source-backed viability findings are recorded in a comment on this issue.
Two independent candidates are viable but are not yet registered or approved
for implementation:

  • Sidebar app build-channel artwork: a customizable static image with a
    readable authoritative Stable/Dev/Nightly/Preview badge. Current artwork is
    partly primary-server-version-driven and maps Preview to Nightly; clarify
    client versus server channel semantics before extending it.
  • Active chat environment cue: persistent scoped name/type/connection state
    for Windows, WSL or a remote host, optionally with a subtle accent. Reuse
    existing Run on selection and environment presentation; do not add another
    connection registry or make decoration determine routing.

Custom themes currently do not accept arbitrary sidebar artwork. Device-local
appearance assets/accents are the recommended first scope; cross-device shared
art needs a separate storage/permission decision. These candidates do not
change #22/#23's requested state or consume a new build budget.

Stable v0.0.42 audit update

  • Upstream now implements opt-in in-app/system notifications, sounds, scoped
    click routing and browser/desktop notification badges. [ATT-06] Extend upstream notifications with canonical attention policy #8 extends that
    implementation; it must not introduce a second notification coordinator.
    These badges count pending notifications, not canonical open attention; [ATT-05] Add the web and desktop attention inbox #7
    remains needed for the actionable inbox/count.
  • Packaging now includes standalone Node single-executable CLI archives.
    Windows WSL embeds the Linux archive verbatim. All retained Copilot packaging
    roots must cover that path as well as desktop sidecars, including SSH/update
    installs. Old Windows-built Node-tree assumptions no longer hold.
  • Upstream migrations 44/45 collide with the fork's audit/binding migrations.
    The landed bridge preserves original fork records in t3code_fork_migrations,
    runs the collided upstream work and commits both histories atomically.
    Unknown history/schema stops startup. No live database has been upgraded.
  • Current upstream adds Antigravity to the provider coverage matrix. Provider
    compatibility is distinct from which model is used to implement this fork.

Tightened decisions

Backlog discipline

  1. This tracker is the entry point; child issue bodies own scope and acceptance
    criteria. GitHub issue state and status labels own current execution state.
    Session files are research/draft snapshots, not another live backlog.
  2. status:blocked means a release/dependency gate remains; status:ready
    means all gates are satisfied; status:in-progress means work has started.
    Close an implementation issue only when its acceptance criteria are met.
    Closing a specification is not the same as delivering its implementation.
  3. Priorities are P0 for stable reconciliation and attention core; P1 for
    notification, TWS, tags and mobile delivery. These are priorities, not dates.
  4. Work in progress is one implementation slice by default. Independent
    research may run in parallel; do not accumulate speculative product patches.
  5. Before a work session, read this tracker, the active child and its blockers.
    Update the child after a meaningful decision or landing; include exact source
    and tpatch lineage where applicable.
  6. New ideas go in the deferred table first. Promote only after a bounded
    problem statement, upstream reuse decision, acceptance criteria,
    dependencies and surface/provider coverage are recorded.
  7. Tpatch owns request and implementation/reconciliation lineage, not product
    priority. Register unapproved proposals as requested on isolated
    request/<slug> branches (or an explicitly approved related-provider
    research branch). GitHub issues are the cross-branch backlog. No fake
    recipe/landing or lifecycle advancement is needed to record a request.
    Adopt only approved requests into the then-current implementation stack.
    Existing implemented roots keep complete intent artifacts; do not generate
    old-source recipes or merge all request branches together.
  8. Revisit stable-tag availability at the next maintenance session. No polling
    daemon, automatic upstream rebase or scheduled watcher is implied.
  9. No PR is created without an explicit request. Browser/computer-use runs
    still require permission. Keep application state and unrelated Gradle caches
    untouched.

Coverage common to every implementation issue

Web and desktop share web presentation; Electron-only behavior belongs in the
shell. Mobile uses shared client state where appropriate and native controls.
Wire contracts belong in packages/contracts; client aggregation belongs in
packages/client-runtime. Preserve local, direct, SSH, relay and tunnel modes,
multiple devices and independently disconnected environments.

Provider-independent features must not branch on a provider name. For
provider-derived lifecycle state, decide capability/event mapping for Codex,
Claude, Cursor, Grok, OpenCode, Antigravity and fork Copilot. Unsupported signals stay unknown
or explicitly unsupported, never inferred from prompt text.

Deferred backlog

These IDs retain the earlier product backlog identity. They are not authorized
for implementation by being listed here.

ID Priority Scope / promotion condition
H-001 P1 GitHub Issues adapter, RPC and UI using the retained work-item contracts.
H-002 P1 Azure Boards adapter, RPC and UI; project containers are not repository identity.
H-003 P2 Hosting-linked tags after a hosting adapter and manual tags exist.
A-001 P1 Background-task registry, counts and panel after current provider capability audit.
A-002 P1 Custom agents with explicit provider capability/degradation rules.
A-003 P2 Mid-session Copilot skill controls/RPC/UI; old applied records are not working implementation evidence.
A-004 P2 Rich resources including image/audio rendering; bounded on-demand payloads.
A-005 P2 Tool summaries and full result expansion without full-history transfer.
A-006 P2 Usage, limits and cost only where providers expose trustworthy data.
A-007 P2 System-generated turns and external triggers; ownership/permission design first.
A-008 P2 Re-spec command/model discovery, internal-model controls, effort presentation and compatibility notices against adopted stable/SDK behavior.
A-009 P1 #16 inventories native CLI, SDK/protocol, adapter, contracts and client exposure with a terminology crosswalk; informs provider enhancement priorities.
TAG-003 P2 Hosting/provider/branch-derived tags; no inferred or standalone worktree tags in the MVP.
E-001 P2 Image/vision input parity across supported clients/providers.
E-002 P3 Voice input.
E-003 P2 Native mobile/tablet quality beyond the scoped MVP surfaces.
E-004 P2 Capability-scoped extension/subprocess surface; required later, not a mandatory coordinator.

Already completed preparation: M-001 pinned-main applicability, M-003 legacy
classification, M-004 tpatch upgrade, F-001 federation/routing discovery.
The retained-root semantic port remains M-002, not a replay of all historical
tpatch records.

Activity

  1. 6 remaining items

  2. jdbencardinop commented on Oct 29, 2026

    @jdbencardinop
    Author

    Added #32 as a backlog-only request to distinguish environments through client aliases and/or server-advertised display names without changing hostnames, routes, pairings or environment identity. No tpatch registration or implementation.

  3. jdbencardinop commented on Oct 29, 2026

    @jdbencardinop
    Author

    Stable reconciliation and open-issue evaluation — October 29, 2026

    Assessment only. No issues closed, no reconciliation or product fixes applied. The complete upstream commit ledger was collected; capability groups below are not a claim that every patch or platform was tested.

    1. Version and inventory boundaries

    Fork upstream lock/base: v0.0.42,
    719a76c.
    Published corrected preview source:
    bc9eeb9.
    Root checkout is preserved phase1/foundation at 2f39e59, not the mobile
    or published preview baseline. Other machines' actual frontend builds are
    not established by their backend version or by this Mac's installed app.

    Latest stable verified by GitHub release and tag: v0.1.3, published Oct 27,
    d2c4403.
    Intervening stable releases: v0.0.43, .44, .45, v0.1.0, .1, .2, .3.
    Full compare reports 3,866 upstream commits; all 3,866 unique commit subjects
    were collected through pagination. The first compare response's file list is
    capped at 300 and was NOT used as a complete changed-file inventory.
    Release notes and complete stable source tree were inspected. This is a
    grouped capability/maintenance inventory, not a claim to have reviewed or
    visually tested all 3,866 patches.

    Main observed at dac8b11 is 267 commits beyond
    stable and excluded from stable claims. Complete release bodies and commit
    ledger are retained in private session artifacts.

    1. Stable additions/change groups since the fork base
    • Orchestrator V2: durable server queues, steering/queue semantics, restart
      continuation controls, limited state and resume-at-reset, child ownership,
      lineage, result delivery and background-task stop/recovery. These are no
      longer main-only: V2 first shipped in v0.1.0.
    • Cross-provider work: delegate_task, top-level launches, thread context
      attachments, forks and context merge-back, provider/account/model switching.
      Provider changes use lossy portable context; not equivalent to native resume.
    • Automation/control: OAuth access for outside MCP agents, thread and project
      tools, PR watches, scheduled interval/fixed-time/webhook tasks and filters,
      private secret requests. v0.1.2 adds t3 thread start/send/show/list. Newer
      stable tools use consolidated action schemas; don't hardcode old tool lists.
    • Providers: ACP Registry and local ACP commands, negotiated ACP v1/v2-preview
      features, Pi, Muse Code, OpenCode 2, Vercel fx; Cursor official SDK; expanded
      native command/config/model/auth handling. No native GitHub Copilot SDK
      provider package is supplied by the stable source; generic Copilot ACP is
      not a replacement approved by the maintainer.
    • Workspaces: No project scratch directories per thread, create projects from
      names, worktree placement/submodule/setup retry controls, thread details
      and lineage, multi-model new-thread starts. Some multi-environment concepts
      already existed in the fork; only added behavior is new.
    • Web/desktop UX: redesigned layout on by default, Working section default,
      thread state at end of timeline, larger Settings/Usage modals, chat widths
      Comfortable 48rem/Wide 72rem/Full, richer composer/shortcuts, thought/status
      row support, improved fold/tool/question rendering, indexed message search,
      thread find and diff find, keyboard focus/navigation and minimap fixes.
    • Rich surfaces: sandboxed HTML replies/preview across providers and clients;
      MCP Apps currently documented via Codex; Mermaid/math, audio, SVG, PDF paths,
      office/archive/SQLite/image/font/EPUB/notebook previews. These don't implement
      Copilot Canvas rendering or every provider's native multimodal input.
    • Browser/devices: environment-owned browser sessions stream to remote clients,
      popups/uploads/downloads/control ownership, mobile PiP, browser host setup
      for Ubuntu libraries/AppArmor, broader device hosts/foldable/3D controls.
      Not proof of native desktop computer-use in our Copilot SDK integration.
    • Mobile: Expo 58.0.14 and RN 0.88.0 versus retained Expo57/RN0.86; V2-client
      requirement, native navigation/iPad/Duo/foldable changes, searchable settings,
      PR browsing/reviews/actions/offline caches, durable offline drafts/uploads,
      voice/microphone selection, code rendering and scrolling improvements.
    • Source control: provider packages, GitCafe and expanded Azure/Bitbucket/
      GitLab/Forgejo handling; GitHub direct API rather than CLI-per-call; account
      selection/token setup, guided reviews, per-item permissions, labels/reactions,
      PR watch/merge/check synchronization and batching.
    • Sharing/notifications: multiple routes per environment and learned LAN/VPN
      routes, correct generic VPN labeling, richer permission views, OAuth MCP,
      guest links (beta, T3 Connect required), mobile notification/widget updates.
      Self-hosted push without T3 Connect is still not the delivered path.
    • Operations/performance: Linux .deb/self-update, Windows paths/PTYS/WSL cold
      boot/supervisor/error propagation/connect fixes, cross-platform providers,
      exclusive state-directory ownership, desktop command installation, t3 doctor,
      parser/highlighter changes, React Compiler across clients, reduced shell/
      thread payloads, paged/lazy history, terminal and usage cache improvements.
    • Defaults/observability: follow-ups steer by default in recent stable;
      telemetry goes to ingest.t3.codes/PostHog with hashed identifiers; explicit
      product telemetry opt-out exists. OTLP custom receiver controls, self-hosted
      tracing possibilities, changed packaging/build toolchains and strict checks.
    1. Upgrade blockers for OUR fork

    The official migration copies state.sqlite once into statev2.sqlite. V1/V2
    diverge thereafter; they are not continuously synchronized. In the stock same-
    home migration, settings, attachments and workspace files remain shared.
    Use isolated copied homes and workspaces for qualification, not just a second
    database filename in the live profile.

    Copied T3 homes do not isolate provider-owned storage. Qualify provider homes,
    credentials and runtimes explicitly; never start OpenCode 1.x and 2.x against
    one shared provider database (2.x converts it). Record the exact target release's
    recommended/minimum provider versions before running provider checks rather
    than inheriting an old release's version assumptions.

    Legacy transcript migration preserves user/assistant text, supported attachments
    and thread metadata, but does not recreate native provider session identity,
    old provider runs, checkpoints/diffs, activities/tool calls, approvals or
    proposed plans. First continuation starts a new provider session with a
    budgeted handoff. The internals/user docs differ slightly in how they describe
    the excerpt/handoff budget; both explicitly deny native session continuity.
    This conflicts with treating migration as transparent Copilot resume.

    V1 and V2 clients/servers reject mismatched orchestration protocol versions.
    The renewed iPhone app remains V1. A new V2 backend cannot replace either live
    server until compatible fork web/desktop/mobile clients are qualified.

    Native Copilot driver, session ownership and completion, packaging/license,
    TWS bindings, fork migrations, attention audit/current state, and search root
    overlap all require semantic reconciliation. Do not retire roots on title
    similarity. New upstream thread find searches messages/plans; our maintained
    session search also covers activity/tool text.

    Preserve the fork's separate migration ledger and its legacy 44/45 bridge.
    Test the actual copied migration lineage, including migration names as well
    as IDs. Stable upstream warns that reusing its migration IDs can skip a
    required migration or reject startup; a high fork ID is not a reserved range.

    Old Mac is Intel: upstream still has no standalone macOS x64 t3 binary; retain
    source-built server deployment rather than assume managed SSH/download/update
    supports it. Preserve separate preview identity and update isolation.

    1. Open issue inventory (22 existing, plus new Allow environment display names without renaming the host #32 = 23)

    #1 umbrella: keep current; old phase/dependency wording needs refresh after
    the target decision, not automatic closure.
    #10 TWS grouping: fork-specific, port foundation first, then UI on V2.
    #11 tags storage: fork-specific; redesign against V2 commands/projection.
    #12 web/desktop tags: after #11; new UI increases old-base churn.
    #13 native tags: after #11 and native V2 baseline.
    #14 derived TWS tags: preserve stale/revoked identity rules; #9/#11 context.
    #15 mobile canonical attention: relay updates do not satisfy independent
    authoritative attention semantics; requires new state and notification mapping.
    #16 capability inventory: this evaluation informs it but is not full per-
    provider runtime proof; prerequisite scope for native Copilot V2.
    #17 packaging: artifact creation/home probe fixed; full current installed
    Windows/WSL PTY/restart/fallback gate still pending. Old passes are not v0.1.3.
    #18 narrow viewport submit: upstream send-shortcut controls are related, not
    proof that <=639px guard is removed. Reproduce physical keyboard narrow window
    and software-keyboard behavior before deciding residual fix.
    #19 NetBird integration: direct pairing exists; stable now distinguishes VPN
    addresses and manages several routes. Native NetBird discovery still separate.
    #21 Copilot tier/compaction: typed SDK functionality still needs native adapter
    UX; ACP model options are not proven equivalence.
    #22 Windows title/menu/drag: zoom inset/tooltip/title overlay fixes upstream
    are relevant but do not prove Alt menu and blank-header dragging fixed.
    #23 chat width: upstream implements the requested three modes (different
    Standard/Comfortable label only). Strong adopt-and-validate/retire candidate.
    #24 Copilot intent phrase: upstream live thought row is a reuse target, not
    proof assistant.intent is consumed by a native Copilot provider.
    #25 self-hosted notification architecture: still a decision; do not assume
    APNs/FCM/T3 Connect solves self-hostable/minimal-cost requirements.
    #26 Copilot usage/limits: SDK quota/usage available; stable global scanners list
    other providers, not native Copilot. Retain this backlog and reuse new UX.
    #27 bottom fold affordance: issue contains a reported live reproduction.
    Keep fold membership unchanged; no identified stable second-control feature.
    Must record own before/after and scroll behavior on target baseline.
    #28 client-only and ownership: high-priority upstream-coverage candidate.
    localEnvironmentEnabled already exists even in our audited fork source, so
    the deployed Windows build/premise needs checking. v0.1.3 additionally has
    serverOwnership.ts, a lifetime exclusive SQLite ownership lock and conservative
    legacy-owner checks. Prove client-only startup/reversal and independent server
    survival on Windows/WSL; do not induce competing writers in live data.
    #29 Herdr: not delivered by generic external MCP or ACP session import.
    Read-only external-owner discovery remains separate; upstream PR25476 is closed
    unmerged and not Copilot shared-ownership support. Keep no automatic resume.
    #30 skills: screenshot report is empty $ picker, not absent popover; slash
    behavior still unverified. Existing fork already handles skills_loaded/list,
    but filters instance-wide snapshot to personal/plugin/builtin user-invocable
    skills. Verify effective skill origin/cwd/home, symlinks and thread-specific
    exposure; don't globally publish project skills or trust stale granular
    tpatch status as proof no implementation shipped. Native Copilot remains ours.
    #31 file-pill paths: strong exact upstream fix candidate. PR21497 merged
    a81961d Oct19; stable uses workspaceRelativePath,
    preserves line/column, and hides relative copy for outside-workspace targets.
    Original ambiguous prose still requires absolute path output by the agent.
    Upstream clipboard/screenshot evidence is not our own fork reproduction.
    #32 newly requested machine display aliases/advertised names, without hostname,
    environment ID, path or credential changes. Backlog-only, no tpatch yet.

    No issue closed. Reports #30/#31 reference screenshots in originating chats but
    do not attach them to the issues; exact frontend build is not established.
    Remote WSL/Ubuntu reproduction is pending, not successful: this Mac's NetBird
    is disconnected and this task did not launch remote GUI repro sessions.
    Issue #27 lists stale bun-wide validation commands; use actual scoped tooling.
    Some listed blockers (#2/#6/#9) are already closed and are backlog bookkeeping,
    not evidence their completed foundations are absent.

    1. Recommendation

    Baseline evidence FIRST, then reconcile in isolation, then fix residuals on the
    new baseline. Do not implement every fix against V1 and redo it for V2.

    Before choosing a live cutover, perform a native Copilot V2 + migration design/
    qualification spike preserving required continuity, own fork tables and
    unsupported history visibility. No automatic switch to ACP.

    Exception: an urgent, independently reproducible old-base defect may justify a
    small scoped tpatch hotfix while V2 work is blocked, especially #31 using the
    verified upstream implementation, or #30 if native skill discovery is blocking
    daily use. Capture old-base reproduction before either approach. Adopt
    upstream-equivalent #23/#28 behavior rather than grow duplicate roots.

    Suggested order after approval:

    1. Restore network access deliberately; collect exact frontend/backend/OS/
      provider versions and before evidence for feat(desktop): add client-only mode and guard backend ownership #28, Copilot skills picker reports no skills despite skills available to the agent #30, Investigate file-pill relative-path base: copied paths include the current directory name #31, [DESK-01] Restore Windows menu access and predictable title-bar dragging #22, feat(web): allow send shortcuts in narrow windows #18, Mirror the "Worked for …" fold control at the bottom of settled turns #27.

    2. Qualify native SDK V2, one-way migration on safe copies, and cross-client
      compatibility; port selected roots and packaging in dependency order.

    3. Verify likely upstream coverage [UI-01] Add Standard, Wide and Full width chat layouts #23/feat(desktop): add client-only mode and guard backend ownership #28/Investigate file-pill relative-path base: copied paths include the current directory name #31 and carry only remaining deltas.

    4. Implement residual prioritized issues as tpatch features; save before/after
      and behavioral evidence at each integrated pass and review.

    5. Defer custom panes extensions/Herdr/notifications/TWS tags until foundations
      and critical user-facing defects are reliable. Computer use remains deferred.

    6. Required evidence/review gate for subsequent fixes

    Each issue must have: exact source/build/runtime/environment; repeatable
    fixture; observed before failure and capture; focused regression assertion;
    after capture using the same scenario; reverse/reconnect/negative cases where
    relevant; independent OpenAI/MAI review of code AND evidence. For timing use
    video + lifecycle receipts, not just screenshots. No extra provider inference
    or paid services just to make screenshots. Review feedback loops until no
    actionable findings; blocked evidence remains blocked and cannot be waived by
    unit tests or a reviewer who only saw code. Preserve credentials/live state;
    keep evidence private or upload only sanitized approved issue evidence.

    Assessment review: an independent GPT-6.1 Sol review identified provider-store
    isolation and explicit fork migration-ledger/legacy-bridge coverage as missing
    details. Both are now included above. The review did not perform visual/runtime
    qualification and is not a substitute for the future product review gates.

    1. Primary references

    https://github.com/pingdotgg/t3code/releases/tag/v0.1.3
    https://github.com/pingdotgg/t3code/releases/tag/v0.1.0
    pingdotgg/t3code@v0.0.42...v0.1.3
    https://github.com/pingdotgg/t3code/blob/d2c440312e5f39d59827ed466838a623516454d6/docs/internals/legacy-orchestration-migration.md
    https://github.com/pingdotgg/t3code/blob/d2c440312e5f39d59827ed466838a623516454d6/docs/user/thread-migration.md
    https://github.com/pingdotgg/t3code/blob/d2c440312e5f39d59827ed466838a623516454d6/docs/user/outside-agents.md
    https://github.com/pingdotgg/t3code/blob/d2c440312e5f39d59827ed466838a623516454d6/docs/user/html-renders.md
    https://github.com/pingdotgg/t3code/blob/d2c440312e5f39d59827ed466838a623516454d6/docs/user/providers-acp.md
    https://github.com/pingdotgg/t3code/blob/d2c440312e5f39d59827ed466838a623516454d6/docs/user/remote-access.md
    https://github.com/pingdotgg/t3code/blob/d2c440312e5f39d59827ed466838a623516454d6/apps/server/src/serverOwnership.ts
    pingdotgg#21497
    pingdotgg#11594
    pingdotgg#25476
    https://github.com/tesseracode/t3code/issues

    Prepared with GPT-6 Astra in GitHub Copilot CLI; independent assessment review by GPT-6.1 Sol. Visual/runtime gates remain pending where explicitly noted.

  4. jdbencardinop commented on Oct 29, 2026

    @jdbencardinop
    Author

    Overnight scope approved: add #33 (Copilot import/history versus stopped/live ownership decisions) to the evaluation; audit exact preview/mobile replay and unmerged branches; repair missing already-shipped tpatch intent; document main-as-integration branching policy; reconcile maintained roots to pinned stable v0.1.3 in isolation; fix only prioritized locally reproducible residuals. Fresh native Copilot sessions and best-effort transcripts are acceptable, with backups preserved. Work-branch pushes and candidate packages only: no main promotion, tags/releases or live upgrades. OpenAI/MAI visual/runtime checks and reviews approved; build-only CI limit4 attempts per target. Windows/WSL/Ubuntu hosts unavailable tonight: Mac repro first and a receiving-host validation runbook; unavailable gates stay blocked, not passed. Computer-use experiment remains deferred.

  5. jdbencardinop commented on Oct 29, 2026

    @jdbencardinop
    Author

    Replay audit, branch inventory and #33

    The v0.0.42 preview's application changes are fully accounted for. Seven maintained roots reproduce the mobile source aeb0b48220d2cb83698e2298a163261f75ec5681; the first six reproduce desktop/server preview bc9eeb9a6f5e3fe2e6d58d9c1b14d5ed93d6c2be. The isolated preview overlay, workflow and WSL-home repair are already inside copilot-runtime-packaging, not unrecorded product changes.

    One administrative gap was found and repaired: .gitignore did not replay the .tpatch/local/ exclusion. New maintained root tpatch-local-capture-ignore closes it. All eight roots now apply strictly, in order, from upstream 719a76ca1dbf5490f1aa33ffb9966301e02be9a9; every tracked path and file mode outside administrative .tpatch/ metadata matches. Replayed Git tree: bedeaa133db69da791799fc4ee08b7c843bac8ba. This does not claim byte equality for historical lifecycle logs. Audit branch: audit/v042-replay-closure-20261029 at e3bc7d48dc3e61e30e648d62a03a333f40b0a172.

    The branch inventory covered 74 refs / 56 distinct tips: 44 archive-only recommendations, 11 retained tips and one application integration candidate. No branches were removed. Ahead/behind counts are not missing-feature counts: historical TWS, attention, lifecycle and packaging slices are already semantically replayed.

    Branch or group Disposition
    build/fork-native-preview-20261003-r2 Preserve the published desktop/server baseline.
    build/fork-mobile-devices-20261003 Only useful application delta beyond that preview: the already-installed conditional Hermes segmentation fix.
    main Preserve until approved promotion; currently older than the deployed preview.
    request/chat-content-width Request only, not unmerged implementation; validate newer upstream coverage under #23.
    request/copilot-chat-activity-intent Request only (#24).
    request/netbird-mesh-connectivity Request/workflow documentation only (#19).
    request/self-hosted-notification-delivery Evaluation request only (#25), not push-delivery implementation.
    request/windows-titlebar-menu Request only (#22).
    request/composer-narrow-viewport-submit-override Request only (#18); preserve default narrow/mobile newlines.
    validation/v0.0.42-platform-qualification Useful receiving-host tooling pinned to older source; adapt it, do not merge its product source or claim current qualification.
    Historical feature/reconcile/packaging attempts Preserve as history; not a queue of missing features.
    Current audit/reconcile work branches Active work, not released or promoted.

    Approved policy is persisted on tpatch/fork-maintenance-policy (230fe51db), in docs/internals/fork-maintenance.md, and recorded as its own maintained root. main is integration, not automatic deployment; no permanent dev. Feature branches are tpatch/<slug> targeting main or the explicitly active reconcile/<immutable-stable-tag>. Release branches are temporary; immutable fork-v<upstream-version>-<sequence> tags require approval. Historical branches are not force-pushed or deleted as housekeeping.

    #33 is now part of the inventory. It separates read-only history, a new conversation with provenance, stopped-session ownership transfer, live foreign ownership, and uncertain/crashed ownership. Relaxed V1-to-V2 migration requirements do not authorize live-session attachment or unsafe concurrent native resume. #29/#33 remain design work, not automatic migration features.

    Before evidence and current candidate status

    Issue Local baseline evidence Current disposition
    #31 Actual clipboard copied overnight-repro-workspace/runbooks/check.txt:1 instead of runbooks/check.txt:1; menu and pasted-value screenshots captured. Upstream fix exists; candidate after evidence still pending.
    #30 One supervised Astra turn completed. Native SDK finds the symlinked, enabled, user-invocable project skill; $ shows no skills and / only /model. Locally reproduced scope/publication mismatch; preserve project isolation in the V2 port.
    #28 Existing Mac preview has Local environment toggle. Turning it off stopped its own backend, retained a separate connected fixture, and reversal restored it. Not a missing Mac mode. Windows/WSL ownership behavior is unverified.
    #18 At 600px, physical Meta+Enter inserted newlines; at 1280px it did not. Screenshot and editor-value evidence captured. Viewport behavior reproduced, not proof of dispatch while provider disabled; target residual pending.
    #27 Expanding the settled turn revealed the folded substantive interim report. Full off-screen-control scenario is still being established; do not claim it passed.
    #22 No affected Windows host available. Receiving-host gate; no speculative Mac-derived fix.
    #23 Newer stable source contains width choices. Candidate integrated visual coverage pending.

    The v0.1.3 candidate remains in progress, not release-ready. Native Copilot, Foundation, packaging and search require genuine semantic V2 ports; conflict evidence is retained. Attention UI/policy adaptation is also in progress. No candidate has yet passed integrated visual/reviewer gates. Main, live installations, device apps and user data are unchanged.

    Migration remains opt-in: preserve an immutable backup of T3 state and the relevant provider storage, rehearse only with isolated copies, retain best-effort transcripts/provenance, accept fresh native sessions, and upgrade compatible clients/server together. Do not point the existing V1 mobile app at a promoted V2 environment without a compatible client. Computer use, releases, main promotion and live upgrades remain deferred.

  6. jdbencardinop commented on Oct 29, 2026

    @jdbencardinop
    Author

    Integrated v0.1.3 candidate: source and remaining gates

    Candidate source is c8e6c994671540f90f03b4281cf51097b2580072 on reconcile/v0.1.3-fork. All eight maintained roots strictly replay from immutable v0.1.3 with zero tracked-file or mode residual outside administrative .tpatch/ metadata. The old mobile polyfill is upstream-satisfied: client contracts now load without Segmenter, while the server still enforces the two-grapheme limit.

    Independent review found a real run-attention bug involving multiple root provider turns in one run. It was fixed, reproduced by a failing-then-passing regression, and independently rechecked across continuation/failure/retry scenarios. No further significant source issue was reported in that correction.

    Actual local results so far:

    • Corrected unsigned Mac preview .2 built with the exact SDK/CLI/Koffi dependency closure. It is a candidate, not a release or live upgrade.
    • Native Copilot completed two supervised Astra turns, survived a backend restart with the same native session identity, then completed a third turn containing exactly two approved stdout-only commands.
    • Real permission requests appeared in the canonical inbox; seen/unseen remained reversible and did not resolve the request. Completion cleared actionable attention.
    • Copilot skills picker reports no skills despite skills available to the agent #30: the same symlinked project skill now appears before a turn and can be selected. Investigate file-pill relative-path base: copied paths include the current directory name #31: actual clipboard now contains runbooks/check.txt:1, without the erroneous workspace basename.
    • feat(web): allow send shortcuts in narrow windows #18: Meta+Enter now works at 600px for both new and existing threads. That does not implement the separate requested plain-Enter preference.
    • Native simulator compilation/installation succeeded. The pinned accessibility tool cannot find SimulatorKit at Xcode 27's new location, so native UI qualification is not yet claimed.

    Two limitations remain explicit: native permission responses currently show an unconfirmed-delivery warning despite successful execution (under investigation), and tpatch's unchanged-child verifier still selects an obsolete historical anchor after a parent fix. Supported unapply/reapply produced a genuine new anchor; direct Git checks prove the corrected parent and child compose exactly, but the failing tpatch verifier is not reported as passed.

    check:changed was inspected, not run: it expands these fork metadata/build changes to repository-wide checks, contrary to the overnight scope. Focused tests, owning typechecks, lint, direct replay and actual builds are reported separately. Work-branch publication and build-only CI are for candidate evaluation only; main promotion, tags/releases, live upgrades and computer use remain prohibited. The four-attempt-per-target CI budget remains in force.

  7. jdbencardinop commented on Oct 29, 2026

    @jdbencardinop
    Author

    Migration and receiving-host qualification runbook

    This is a candidate-only procedure. No live installation, main branch, release tag or published update has been promoted.

    What was rehearsed

    A consistent snapshot of the disposable v0.0.42 fixture was migrated by the actual V2 server startup: 3 threads and 8 messages remained 3 threads and 8 messages. The separate t3code_fork_migrations ledger contains 44–50. The copied provider store was byte-for-byte unchanged and the importer created zero native provider threads; no provider ran during migration.

    This proves the exercised database/transcript path, not every historical schema, attachment, Git checkpoint, saved credential, connection identity, TWS binding or native session migration. Existing focused migration tests cover additional 44/45 bridge cases. The user-approved policy accepts fresh native sessions and best-effort historical text, not unsafe attachment to another live owner.

    Safe cutover, only after approval

    1. Inventory each environment's exact binary/source, Node/runtime version, T3 home, project/worktree paths, provider homes, launch service and clients. Node 26.12.1 is the candidate's toolchain requirement. Confirm the old Intel Mac's OS/runtime support before attempting deployment; the arm64 Mac build does not qualify Intel.
    2. Stop the old environment only through its owned service or captured process handle after confirming work is quiescent. Do not kill by name/path. Existing unrelated CLI/Herdr sessions are not implicitly released.
    3. Preserve a dated, immutable backup of the entire T3 home, including state, settings, secrets/identity material, attachments and any scratch directories that matter. Snapshot SQLite consistently with the application stopped or SQLite backup/VACUUM INTO; a live cp of the database alone is not a snapshot. Keep provider storage separately. Never point a rehearsal at live T3 or provider storage.
    4. Rehearse in a disposable VM/account with no live workspaces mounted, or deliberately map copied project/worktree paths to owned clones. A database copy still contains absolute live paths: it is not sufficient isolation by itself. Disable providers and background automations until their target paths are verified.
    5. Choose fresh provider homes for V2. Authenticate using the existing subscription through its normal supported flow; do not copy credentials into source control or logs. Full native-session continuity is not a migration requirement, but same-version ownership conflicts must still fail closed.
    6. Start the candidate against the rehearsal home, inspect the migration log and compare project/thread/message counts and representative Unicode/transcript data. Confirm fork ledger separation and that old native sessions were not automatically resumed. Record incomplete imports, rather than silently calling them complete.
    7. Upgrade compatible web/desktop/mobile clients together for the selected environment. The renewed existing V1 phone app is not a V2 client. Re-pair when required; do not connect two clones with the same environment identity to one client and assume they are independent machines.
    8. Promote only after target-platform checks and review. For rollback, stop the candidate and return the old binary to its untouched old home. Never feed a V2-mutated home back to V1 or copy rehearsal data over the backup.

    Linux/Ubuntu receiving host

    Windows/WSL receiving host

    • Use a disposable Windows VM/Sandbox, or extract the candidate into a separate application directory rather than installing over the existing preview. Set T3CODE_FORK_PREVIEW_HOME to an owned test profile before launching and track the spawned process.
    • An isolated Windows profile does not isolate an existing WSL Linux account. The fork preview uses that account's ~/.t3-fork-preview. Use a disposable WSL distribution/account for rehearsal; do not connect the candidate to the current live distribution/account.
    • Verify installer/archive provenance, native dependency loading, and the complete unpacked Windows payload count (maximum 80). Verify local/WSL identities remain distinct.
    • Exercise Local environment off → restart → remote-only operation → reverse toggle. Confirm only its own backend stops, saved remote connections remain, and a second backend cannot own the same state directory.
    • Reproduce [DESK-01] Restore Windows menu access and predictable title-bar dragging #22 on Windows: Alt/menu/title-bar and drag interactions. Mac captures cannot establish this defect or its resolution.
    • In the disposable WSL account, verify Linux-home discovery, cold/warm runtime startup, executable modes for required helpers, cache reuse/repair and an authorized isolated native continuation. Linux archive smoke alone is not WSL qualification.

    Evidence required

    For each exercised case record the exact build/source, environment, command and result. Pair screenshots with behavior assertions; use a short video plus persisted events for timing/Working behavior. The independent reviewer must inspect the evidence. Keep Windows/WSL/Ubuntu, native mobile pairing and other unrun gates explicitly pending.

    The build-only CI ceiling is four attempts per Linux x64 and Windows x64 target, including new dispatches/reruns. No automatic retry or release workflow is authorized.

  8. jdbencardinop commented on Oct 29, 2026

    @jdbencardinop
    Author

    New stable release discovered during final checks

    Upstream released v0.1.4 during this work, at 2026-10-29T07:44:41Z:
    783581d461dc72cdd8f78fc8abb4ad536dfc4547.
    The approved candidate remains pinned to v0.1.3; I did not silently move its base while qualifying it.

    Compared with v0.1.3, this is 261 commit subjects and 2,012 changed files (including broad refactors), not a version-string-only update. Relevant additions include:

    • Native mobile workspace/file-tree isolation, completed-subagent access, adaptive Android/iPad layouts, a last-project preference, and pairing/navigation fixes.
    • Faster iOS reconnect handling, including preserving live sockets.
    • V2 delegated-delivery/settled-run handling, stop/retry recovery, and Claude native-session/context fixes.
    • Compact MCP schemas, model display-name improvements, and queue/steer changes.
    • Removal of the old web design and its toggle.
    • Desktop Cmd/Ctrl+W tab behavior, macOS packaged-bundle checks, error-window handling, and stronger web/desktop release boot gates.
    • Cursor SDK 1.0.38 and its packaged zod closure.

    The release notes are the full upstream inventory:
    https://github.com/pingdotgg/t3code/releases/tag/v0.1.4

    These are released upstream capabilities, not features already validated in our v0.1.3 candidate. In particular, the new desktop boot checks and mobile fixes are relevant to the remaining qualification work; they are not proof that our Keychain or simulator-tool blockers are fixed.

    Recommendation: keep the completed v0.1.3 source reconciliation and evidence as the controlled baseline, then assess/apply the v0.1.4 delta in a separate approved reconciliation before production promotion. Reuse the maintained root intent, not old branch merges. The current main is not an ancestor of this reconstructed candidate, so promotion also needs an explicitly approved ancestry-preserving transition—not a blind merge of obsolete main code or a force push.

  9. jdbencardinop commented on Oct 29, 2026

    @jdbencardinop
    Author

    Reconciliation, replay audit and branch inventory — final handoff

    The approved v0.1.3 source candidate is published, but it is not a production promotion. Main, the installed v0.0.42 preview, both phone apps and live user data remain unchanged.

    Candidate: reconcile/v0.1.3-fork, commit 5ce5d79bbdbf17b1d50a0f2a9ee7bda9651c1170, based on immutable upstream d2c440312e5f39d59827ed466838a623516454d6.

    Important latest-release update: v0.1.4 appeared during the task. It is pinned at 783581d461dc72cdd8f78fc8abb4ad536dfc4547; it was evaluated but not silently substituted for the approved v0.1.3 target. Its 261 commits / 2,012 changed files include relevant desktop boot gates and mobile fixes. Release addendum.

    1. Exact replay and missing intent

    The original audit found no unrecorded application/build change in the installed preview lineage:

    • Six maintained roots reconstruct desktop/server source bc9eeb9a6f5e3fe2e6d58d9c1b14d5ed93d6c2be.
    • Adding the mobile bootstrap root reconstructs mobile source aeb0b48220d2cb83698e2298a163261f75ec5681.
    • One tracked administrative gap remained: .gitignore did not replay .tpatch/local/. The new tpatch-local-capture-ignore root closes it.
    • The preview overlay, workflow, runtime pruning and WSL-home correction were already recorded in copilot-runtime-packaging.

    The final v0.1.3 candidate also reconstructs exactly, including file modes, by strictly applying these eight canonical patches from the immutable upstream base:

    1. copilot-cli-provider
    2. session-search
    3. copilot-sdk-license-notice
    4. copilot-runtime-packaging
    5. phase1-foundation
    6. attention-notifications
    7. tpatch-local-capture-ignore
    8. fork-maintenance-policy

    Every git apply --cached --check and application passed. There are zero residual tracked paths outside .tpatch/ administrative history. Replayed tree: 1f1ec3c996e84a9716e938b488eb81181a2b98d5.

    This is a maintained-root replay, not permission to replay every superseded historical feature directory. Historical lifecycle logs and generated build/signing transforms are not claimed to be byte-identical source.

    The mobile polyfill was retired through the supported tpatch review/confirmation path: upstream V2 moved grapheme-count validation out of client snapshot decoding. A fresh contracts import with Intl.Segmenter absent passed, and the real server planner still accepted two Unicode graphemes and rejected three. No obsolete polyfill was added to V2.

    Remaining tpatch tooling limitation

    The installed verifier selects older historical anchors for dependent roots after parent corrections, even after a genuine supported unapply/reapply and a new exact landing. It has no explicit-baseline override. Four current roots pass tpatch verify; the dependent license, packaging, Foundation and attention checks remain blocked by parent-baseline evidence. These failures are not reported as passes.

    Independent Git replay proves the final combined source exactly, and a separate corrected-parent reverse check plus child forward check passed at the actual new attention anchor. The failed attempts and limitation are retained in feature artifacts; no generation manifests or successful reconciliation evidence were fabricated. Doctor reported zero errors, with historical drift/warnings retained rather than “fixing” obsolete patches.

    2. Branch inventory and adopted policy

    The audit snapshot covered 74 refs / 56 distinct tips: 44 archive-only recommendations, 11 retained tips and one useful application integration candidate. That candidate was the already-installed mobile Hermes fix. Historical TWS, attention, Copilot lifecycle and packaging branches were already semantically represented; they were not missing merge queues.

    Six request branches contained requests rather than implementations: width, activity intent, NetBird, self-hosted notifications, Windows title-bar/menu, and narrow-window submission. Validation-only tooling was retained as evidence, not merged as product code. No historical branch was deleted, renamed or force-pushed.

    The approved policy is persisted and recorded in fork-maintenance.md:

    • main is integration, not automatic deployment; no permanent dev.
    • tpatch/<slug> targets main or the explicitly active reconciliation.
    • reconcile/<stable-tag> uses an immutable stable base.
    • Release branches are temporary; immutable fork-prefixed release tags require approval.
    • Exact source accounting, declared build transforms, visual/runtime evidence and independent review are promotion gates.

    This task's implementation branches are integrated into the candidate by ancestry or explicit full-root landing. Main remains 870f7a1975f429f5465730bf73c8169d81faf347; the installed preview branch remains bc9eeb9a6…. The initial main-to-candidate promotion needs an approved ancestry-preserving transition, not a blind merge of obsolete main code.

    3. What was fixed and independently reviewed

    The semantic V2 ports retain native Copilot SDK integration, activity search, isolated packaging, attention audit/current state/inbox/client policy, read-only TWS/context and neutral work-item contracts.

    The implementer/reviewer loop found and corrected:

    • Intermediate provider-turn completion incorrectly fencing an entire run's attention.
    • Native permission delivery using stale V2-owned snapshots and lacking the real SDK success receipt.
    • Empty tool-only assistant messages.
    • A terminal-before-receipt race that could overwrite an accepted answer.
    • Preview legacy-storage migration reading the stock profile.

    Regressions failed before their fixes. The independent reviewer then found no significant issues in the corrected deltas. No false success receipt, encryption fallback or OS permission bypass was introduced.

    4. Evidence and qualification

    Gate Result
    Exact maintained-root source/mode replay Passed for the final source
    Native Copilot Five real supervised Astra turns across backend restarts, one retained native session, four explicitly approved stdout-only commands
    Latest real permission response Effect succeeded in one attempt, no stored error, delivery confirmed, request resolved
    Attention Real approval reached the inbox; seen/unseen did not resolve it; final completion returned actionable count to zero
    Activity search Real native tool activity highlighted at result 2/3
    Mac artifacts Unsigned .5 DMG/ZIP built; final source/provenance and SHA256SUMS retained
    Packaged production web Paired to the packaged backend, loaded the actual project composer, no client errors
    Native Electron UI Not qualified: .5 debugger remained unresponsive; the preceding build's sampled main thread was blocked in Keychain access. No OS consent was granted. The stock-profile read is fixed, but the remaining hang's cause is not independently established
    Linux x64 Final CI build, archive smoke and artifact upload passed
    Windows x64 Final CI installer/runtime validation passed: 64 unpacked files, 21 sidecar natives
    Receiving-host Windows/WSL/Ubuntu Not available; GUI, WSL-account and installed-host qualification remain pending
    iOS Simulator Self-contained Release artifact built, installed binary/bundle/config matched, T3 screen launched, stock OTA disabled
    Native mobile pairing/UI Unverified: Xcode 27 moved SimulatorKit and the pinned semantic automation tool failed; no unsafe workaround
    New Android candidate Not qualified in this pass; existing phone installation untouched

    Final build-only CI: 40864041241, both targets successful at 5ce5d79…. Three of four attempts per target were used. The first Windows run built its installer but correctly refused a self-containment probe under checkout node_modules; CI temp paths were moved outside the checkout, without weakening the check.

    The Linux/Windows artifacts and their generated manifests/checksums are available from that run. Mac and simulator artifacts remain on the build Mac; they were not published as releases. The attempted local download of the large CI artifacts was stopped; the remote artifacts were verified available.

    Focused suites, owning typechecks and scoped lint passed. check:changed was inspected but not run because it expands these fork metadata changes to repository-wide checks, contrary to the overnight scope. No repository-wide pass is claimed.

    Issue evidence

    The reviewer inspected these captured states. Missing platform evidence was not treated as passed.

    5. Current open-issue disposition

    All 24 open issues were inventoried; none was closed merely because a candidate exists.

    Issues Disposition
    #1 Tracking report, policy, evidence and candidate links updated
    #10–#14 Secondary TWS grouping and manual/derived tag additions remain backlog; existing Foundation retained
    #15 Native attention/optional relay alignment remains backlog
    #16 Capability inventory still open; concrete native limitations documented, not universal parity claimed
    #17 Candidate packages produced; installed/native/receiving-host gates remain
    #18 Modifier shortcut covered upstream and exercised; requested opt-in plain-Enter behavior remains open
    #19 NetBird product integration remains evaluation work
    #21 Context-tier/compaction controls remain requested
    #22 Windows menu/title-bar behavior needs the affected host
    #23 Upstream width controls adopted and exercised
    #24 Long Copilot activity phrases remain requested
    #25 Self-hosted/optional mobile notification architecture remains evaluation work
    #26 Subscription limits/session usage remains GitHub backlog, tpatch deferred
    #27 Basic folded-report behavior observed; full off-screen scenario not established, no speculative fix
    #28 Mac client-only mode already existed; V2 ownership support adopted, receiving-host checks pending
    #29 Herdr discovery/read-only access remains separate design work
    #30 Workspace-scoped native skill exposure corrected and exercised
    #31 Upstream copy-relative-path correction exercised
    #32 Display aliases without OS renaming remain requested
    #33 History viewing, new conversation, stopped-owner transfer, live owner and uncertain owner remain explicit separate decisions

    6. Migration recommendation

    The real copied-state rehearsal preserved 3 threads / 8 messages, retained the separate fork migration ledger 44–50, left the copied provider store unchanged and imported zero native provider threads. This is best-effort transcript migration, not a promise to preserve every native session, attachment, credential, identity or checkpoint.

    The migration and receiving-host runbook covers immutable backups, isolated workspace/provider copies, disabled automations, fresh native sessions, coordinated V2 clients and rollback to the untouched V1 home. An isolated Windows profile does not isolate an existing WSL account; use a disposable distribution/account for rehearsal.

    Recommended next controlled step: evaluate/reconcile the newly released v0.1.4 delta and resolve the remaining native/host gates before approving main or live deployment. Computer use, larger backlog features, releases, PRs and live upgrades remain deferred.

    Implementation and review used GPT-6.1 Sol agents; integration and runtime verification used GPT-6 Astra through GitHub Copilot CLI.

  10. jdbencardinop commented on Oct 29, 2026

    @jdbencardinop
    Author

    v0.1.4 reconciliation: source coverage and qualification scope

    Frozen inputs

    • Installed desktop/server preview: bc9eeb9a6f5e3fe2e6d58d9c1b14d5ed93d6c2be
      (0.0.42-preview.20261003.2).
    • Installed mobile source: aeb0b48220d2cb83698e2298a163261f75ec5681.
    • Reviewed v0.1.3 candidate: 5ce5d79bbdbf17b1d50a0f2a9ee7bda9651c1170.
    • New target: upstream v0.1.4, verified local tag and remote ref both
      783581d461dc72cdd8f78fc8abb4ad536dfc4547.
    • Work branch: reconcile/v0.1.4-fork. No main promotion or live upgrade.

    Shipped roots and v0.1.3 coverage

    Root Previous installed version v0.1.3 disposition
    copilot-cli-provider Native subscription-backed Copilot integration Ported to the V2 provider package; includes the reviewed permission, receipt-race and empty-message fixes
    session-search Conversation and activity search Ported as extensions to upstream ThreadFind; preserves activity navigation/highlights
    copilot-sdk-license-notice Bundled SDK attribution Retained
    copilot-runtime-packaging Self-contained SDK/CLI closure, payload pruning, executable modes and preview isolation Ported; includes the stock legacy-storage isolation correction
    phase1-foundation Attention audit/current state, read-only TWS/context/bindings and neutral work-item contracts Ported; includes correct V2 run-level attention termination
    attention-notifications Attention inbox and client-side notification policy Ported to the upstream imperative notification coordinator
    mobile-hermes-segmentation Additional native-mobile Hermes compatibility fix Proven upstream-covered and retired through the supported lifecycle
    tpatch-local-capture-ignore The ignore rule was already present, but originally not recorded Replay-accounting gap closed; no new application feature
    fork-maintenance-policy Not part of that installed product New maintainer policy captured during the v0.1.3 work

    The accepted independent v0.1.3 replay contains eight maintained roots and exactly
    matches the candidate outside administrative .tpatch/, including file modes.
    This is stronger evidence of complete recorded source than counting historical
    feature folders. It does not establish semantic completeness by itself; the
    v0.1.4 port audits retained behavior and historical absorption separately.

    The inherited registry contains 45 historical/requested/applied/retired records,
    not 45 independent patches to replay. Older attention, TWS and packaging roots
    are grouped by superseding maintained roots. Requested features are not silently
    implemented. Older applied skill-control records require an explicit coverage
    audit against the maintained native root rather than a second legacy replay.

    Reviewed fixes and issue evidence

    Evidence Ownership
    Provider-turn completion incorrectly fenced a whole run phase1-foundation
    Stale V2 request snapshots and lack of real native success receipt copilot-cli-provider
    Empty tool-only assistant messages copilot-cli-provider
    Terminal-before-receipt race overwrote an accepted answer copilot-cli-provider
    Preview read the stock profile's legacy storage copilot-runtime-packaging
    #30 cold skill picker, selection and removal Native root's workspace-scoped discovery, using upstream picker UI
    #31 copied reference no longer includes workspace basename Upstream coverage verified on the v0.1.3 integration; no duplicate custom patch
    #23 width settings and measured composer resize Upstream coverage; no duplicate custom patch
    #18 narrow-window Meta+Enter dispatch Upstream behavior verified on the v0.1.3 integration; optional plain-Enter preference remains separate

    Each reviewed fix is present in its owner's complete canonical patch, not a
    separate patch per bug. The new reconciliation does not treat old screenshots as
    proof of the new candidate; affected scenarios are repeated after integration.

    Approvals are not command/skill menus

    T3's $ menu selects a skill from the chosen environment and provider. /
    offers T3 commands, supported provider commands and optionally skills. Those
    menus are distinct from approval requests for an agent's shell/file/tool action.
    A selected skill does not bypass permission policy for its subsequent actions.

    The v0.1.3 native adapter exposes one-time approval rather than account-wide
    permission-rule editing. That does not disable $ or /. It also does not mean
    every interactive Copilot CLI slash command is exposed through the SDK adapter:
    native manual compaction, rollback and native forks were explicitly unsupported.
    Automatic compaction and portable handoffs are different, supported capabilities.
    Newer SDK APIs are being researched; the reconciliation has not silently upgraded
    the pinned SDK/runtime.

    Checks intentionally omitted

    The prior reconciliation did not run the whole-repository vp check,
    vp run -r test or vp run -r typecheck. The root test and typecheck scripts
    expand to recursive repository checks, so their root aliases were not substitutes.
    Repository-wide lint, format and unused-code sweeps were not claimed either.
    The report instead records focused tests, owner-scoped types/lint and candidate
    build/runtime checks. Missing installed-host and native-client evidence remained
    unverified. v0.1.4 retains that distinction and will use its scoped changed checks.

    Documented simulator-tool remedy

    The installed Xcode framework is at
    /Applications/Xcode.app/Contents/SharedFrameworks/SimulatorKit.framework;
    the old Contents/Developer/Library/PrivateFrameworks location is absent.
    This matches the upstream diagnosis in
    getsentry/MobileBuildMCP#453.
    Its maintainer identifies AXe 1.8.0 as the fix, also included in XcodeBuildMCP
    2.7.0. The project was subsequently renamed MobileBuildMCP in 2.7.1.

    This is a tooling compatibility problem, not a need to modify the Xcode bundle
    or weaken OS protections. An explicit compatible AXe override is documented for
    the pinned 2.6.2 server. Installation and actual native validation are not yet
    claimed. Android SDK inventory also confirms the configured Pixel_10 AVD;
    no emulator or physical Android device was running at inventory time.

    The verifier issue is now recorded as
    tesseracode/tesserapatch#26.
    The accepted v0.1.3 replay was not rerun. The v0.1.4 policy requires its own
    internal exact-replay record and preserves failed verifier evidence rather than
    claiming the tool passed.

  11. jdbencardinop commented on Oct 29, 2026

    @jdbencardinop
    Author

    v0.1.4 receiving-host handoff — pause-gated, not a bulk install script

    Prepared read-only from published candidate source and GitHub Actions metadata/logs.
    No receiving-host command below has been executed by this preparation task.

    Operator protocol: first choose Windows native, Windows → WSL, or
    Ubuntu headless. Send only that host's first preflight block, inspect its
    result, and agree the next step. Do not paste this document as one script.
    Every PAUSE is mandatory. An existing path, unknown owner, denied inspection,
    version/hash mismatch, or unexpected startup is a stop, not permission to repair,
    rename, delete, uninstall, migrate, or kill anything.

    1. Immutable identity and present qualification

    • Candidate/source: 16d428db823f17c18ec16a79e1ec12ae4ba795c1.
    • Version: 0.1.4-preview.20261029.1.
    • Upstream product base: 783581d461dc72cdd8f78fc8abb4ad536dfc4547.
    • Run: https://github.com/tesseracode/t3code/actions/runs/40928076911.
    • Run attempt 1, manual dispatch, both jobs success:
      • Linux job 123638858812, completed 2026-10-29T18:11:24Z.
      • Windows job 123640116999, completed 2026-10-29T18:26:07Z.
    • New approved CI allowance: four attempts per target; this run used one,
      three remain per target. This runbook authorizes no dispatch or rerun.
    • Operator reports the Mac DMG/ZIP verified, actual native UI working and
      Keychain availability confirmed. Client-only OFF persisted after a real
      relaunch; the old owned local listener at 3774 disappeared, the remote
      connection at 16534 remained, and the original user backend at 3773 stayed
      healthy. These are Mac/operator results, not Windows/WSL/Ubuntu passes.
    • Operator subsequently reports the Mac client-only ON reversal passed,
      and the Android standalone Release emulator passed a Metro-off cold boot
      and received a message from a fresh free Replay server. Neither result
      qualifies a physical phone or another receiving host. Physical-phone,
      Windows, WSL and Ubuntu handoff/qualification remain pending.
    • CI Linux smoke reported --version and headless serve success with no
      system Node/npm on its executable PATH. Windows packaging reported
      64 packaged application files / 21 sidecar natives, including the real
      self-containment/native-load gates. Installed receiving-host behavior,
      native menus, profile isolation, and WSL cold/warm repair remain to be tested.

    Actual downloadable objects

    Actions artifact Actual contained payload Payload bytes Payload SHA-256
    fork-preview-linux-x64 t3-0.1.4-preview.20261029.1-linux-x64.tar.gz 287102643 f22013478222f68af8ad16103127e061e799383293d633ae1650fc33be5e34ef
    fork-preview-windows-x64 T3-Code-Fork-Preview-0.1.4-preview.20261029.1-x64.exe 574496132 fd1370507672fdcdf66ea39db8b6ee06b1af47d9ecb25017aac72ed4fe932716

    Each artifact also contains manifest.json and SHA256SUMS. Do not accept
    the payload by filename alone. Check manifest provenance, the checksum file,
    the actual payload hash, and the pinned CI-log hash above.

    GitHub's outer Actions ZIP identities are different from payload identities:

    Artifact Outer ZIP bytes GitHub artifact ZIP SHA-256
    Linux 285760865 116c93965b32a29e5872fb8376b88a799b0c288b83a0adcdd3d9d1384416e429
    Windows 574587283 89f384a3703c7287f1b2cfe0e3beff634e2461125966f127110de452be1b85c9

    Artifacts were unexpired when inspected; retention ends around
    2026-11-12 18:11Z/18:25Z. If unavailable, pause; do not substitute a different
    run or spend another build attempt. gh run download extracts the outer ZIP;
    its output files must be checked using the payload hash, not the ZIP hash.
    If downloading the ZIP in a browser, verify its ZIP digest before extracting,
    then still verify the inner manifest/checksums. These are unsigned previews,
    not signed releases; no independently signed manifest is being claimed.

    2. Source-confirmed flags, defaults, and the WSL danger boundary

    Desktop

    • Supported preview home override: T3CODE_FORK_PREVIEW_HOME, an environment
      variable inherited by the launched preview executable.
    • Default preview home: the current OS user's ~/.t3-fork-preview.
    • The bootstrap sets T3CODE_HOME to that home, uses <home>/electron for
      Chromium, <home>/userdata for T3 state, and an isolated compile cache.
      Setting only T3CODE_HOME is not the desktop preview override.
    • Bootstrap clears inherited T3CODE_PORT, dev-server and remote-server-entry
      overrides. Do not promise a desktop port using those variables.
    • No desktop --windows, --no-wsl, --profile, or --home-dir switch was
      found. Do not invent/use one.
      --wsl-runtime is a build-time option.
    • A truly fresh profile has:
      localEnvironmentEnabled=true, wslBackendEnabled=false, wslOnly=false.
      Thus its Windows primary starts; WSL does not automatically start.
      Availability probing is not the same as starting a WSL T3 backend.
    • Primary selection uses WSL only when both wslOnly and wslBackendEnabled
      are true and WSL is available. Additional WSL startup requires
      wslBackendEnabled=true and wslOnly=false.
    • Supported persisted document:
      <preview-home>/userdata/desktop-settings.json. The three booleans above
      are real schema fields, not guessed launch flags. The guarded fresh-profile
      setup below explicitly starts Windows with WSL off.
    • Normal packaged startup may create its CLI shim at
      <preview-home>/bin/t3.cmd on Windows. This is profile-local, not permission
      to replace a global t3; use only the explicit qualified executable paths below.
    • To switch an existing test profile safely, use Settings search:
      WSL backend → Off. Disabling WSL clears WSL-only and, if necessary,
      relaunches on Windows. Do not edit an unknown live profile to force this.
    • Local environment → Off is client-only mode and relaunches the desktop.
      It suppresses both primary and additional WSL backend startup.
      Re-enable it in Settings to reverse. Settings search is reliable even where
      documentation calls the containing page “Environments” and internal routes
      use /settings/connections or /settings/access.

    Critical WSL warning — Windows profile override does NOT isolate Linux state

    Even with a new Windows T3CODE_FORK_PREVIEW_HOME, desktop-managed preview WSL uses:

    Linux account home:  ~/.t3-fork-preview
    Linux server state: ~/.t3-fork-preview/userdata
    Linux runtime cache: ~/.t3-fork-preview/wsl-runtime
    

    The desktop selects a distro, not an arbitrary Linux -u user. It launches
    using that distro's default account. Merely creating another Linux user does
    not isolate the desktop unless that is the actual default account used.
    The account database supplies the backend data home; runtime installation uses
    the WSL shell's HOME. If HOME and the account home differ, pause.

    If any old fork uses this Linux home, enabling the new candidate can open and
    migrate its state or replace/prune its runtime cache. An idle process list,
    different Windows profile, different port, or new installer does not authorize
    that migration. Require a fresh dedicated distro/default account, or an
    explicitly approved stopped backup + migration plan first.
    No automatic
    profile rename/deletion, default-user change, wsl --unregister, stock-service
    uninstall, t3 update, or npx t3@latest belongs in this handoff.

    Managed WSL binds its backend to 0.0.0.0 and uses authenticated connections.
    Before enabling it, approve the host's existing network boundary; do not change
    firewall/WSL networking to make a test pass. If that exposure is not acceptable,
    pause and use the explicitly loopback-bound standalone Ubuntu test instead.

    Standalone Linux CLI

    The actual supported data-directory option is --base-dir (equivalent to
    T3CODE_HOME), not --home-dir. Supported commands/options used below:

    ./t3 --version
    ./t3 serve --host 127.0.0.1 --port <free-port> --base-dir <fresh-home> --no-browser
    ./t3 pair --base-dir <that-same-running-home> --ttl 5m
    

    serve is headless by definition, prints pairing details, does not auto-create
    a project from cwd, and does not open a browser. Do not register a service,
    install a global CLI, change PATH globally, publish through Tailscale, or
    upgrade an existing installation for this test.

    3. Gate A — choose ONE host and report read-only preflight

    A-Windows: native Windows and any later WSL test

    Run in ordinary PowerShell, not an elevated shell. These commands inspect only.
    Keep process command lines/private paths private or redact before sharing.

    $ErrorActionPreference = 'Stop'
    Get-CimInstance Win32_OperatingSystem |
      Select-Object Caption, Version, OSArchitecture
    Get-CimInstance Win32_Processor | Select-Object Name, Architecture
    # Architecture 9 is x64; ARM64/emulation is not this qualified target.
    wsl.exe --list --verbose
    
    $profilePaths = @(
      (Join-Path $env:USERPROFILE '.t3'),
      (Join-Path $env:USERPROFILE '.t3-fork-preview'),
      (Join-Path $env:APPDATA 't3code'),
      (Join-Path $env:APPDATA 't3code-v2'),
      (Join-Path $env:APPDATA 't3code-dev'),
      (Join-Path $env:APPDATA 'T3 Code (Alpha)'),
      (Join-Path $env:APPDATA 'T3 Code (Dev)')
    )
    $profilePaths | ForEach-Object {
      if (Test-Path -LiteralPath $_) {
        Get-Item -Force -LiteralPath $_ |
          Select-Object FullName, Attributes, LastWriteTime
      }
    }
    $uninstallRoots = @(
      'HKCU:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*',
      'HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*',
      'HKLM:\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*'
    )
    Get-ItemProperty $uninstallRoots -ErrorAction SilentlyContinue |
      Where-Object { $_.DisplayName -match 'T3.?Code|T3 Code Fork Preview' } |
      Select-Object DisplayName, DisplayVersion, InstallLocation, UninstallString
    Get-CimInstance Win32_Process |
      Where-Object {
        $_.ExecutablePath -match '\\(?:T3 Code[^\\]*|t3code|t3)\.exe$' -or
        $_.CommandLine -match '\.t3-fork-preview|server\.asar'
      } |
      Select-Object ProcessId, ParentProcessId, ExecutablePath, CommandLine
    Get-CimInstance Win32_Service |
      Where-Object { $_.PathName -match 't3code|T3 Code|\.t3-fork-preview' } |
      Select-Object Name, State, StartMode, PathName
    Get-NetTCPConnection -State Listen |
      Select-Object LocalAddress, LocalPort, OwningProcess |
      Sort-Object LocalPort

    If WSL is unavailable and native Windows is the selected first test, report
    that fact; it does not require installing WSL. Missing visibility or unknown
    process ownership is unresolved, not proof nothing is running.

    PAUSE A: report architecture, installed stock/fork identities, running owners,
    existing profile roots, and listening ports. Do not stop any process.
    Choose whether the host permits a new fork installation at all.

    A-Ubuntu: standalone headless host

    uname -srm
    id
    getent passwd "$(id -u)"
    printf 'HOME=%s\n' "$HOME"
    command -v tar sha256sum python3 ss
    ss -H -ltnp
    ps -u "$(id -u)" -o pid,ppid,comm,args |
      awk 'NR == 1 || /[tT]3|copilot/'
    for p in "$HOME/.t3" "$HOME/.t3-fork-preview"; do
      if [ -e "$p" ] || [ -L "$p" ]; then ls -ld -- "$p"; fi
    done

    PAUSE A: Linux must be x86_64; record existing servers/services and ownership.
    No old home is opened by the candidate during this preflight. Existing Ubuntu
    stock/fork homes may remain untouched while a separately approved fresh explicit
    --base-dir and runtime HOME are used. Do not infer this separation for managed WSL.

    4. Gate B — acquisition on the selected receiving host only

    Use an ordinary owned case directory outside source checkouts and installed
    applications. All creation below is relative to the selected current directory.
    If a case path already exists, pause and agree a resume/new-case plan, never erase it.
    gh needs existing authenticated access to the repository; if unavailable,
    use the exact Actions artifact link above and manually verify the ZIP first.
    No tool installation or huge payload download was performed during preparation.

    Windows:

    Set-Location $env:USERPROFILE
    if (Test-Path -LiteralPath '.\t3-receive-v014-16d428db') {
      throw 'Existing case directory: pause; do not overwrite or delete.'
    }
    New-Item -ItemType Directory -Path '.\t3-receive-v014-16d428db' | Out-Null
    Set-Location '.\t3-receive-v014-16d428db'
    $Case = (Get-Location).Path
    New-Item -ItemType Directory -Path '.\evidence' | Out-Null
    gh run download 40928076911 -R tesseracode/t3code `
      --name fork-preview-windows-x64 --dir '.\artifacts\windows'
    if ($LASTEXITCODE -ne 0) { throw 'Download failed; stop.' }

    Ubuntu:

    set -eu
    cd "$HOME"
    if [ -e t3-receive-v014-16d428db ] || [ -L t3-receive-v014-16d428db ]; then
      printf '%s\n' 'Existing case directory: pause; do not overwrite or delete.' >&2
      exit 1
    fi
    mkdir t3-receive-v014-16d428db
    cd t3-receive-v014-16d428db
    CASE=$(pwd -P)
    mkdir evidence
    gh run download 40928076911 -R tesseracode/t3code \
      --name fork-preview-linux-x64 --dir artifacts/linux

    If Windows has no already configured gh, use the exact Windows artifact link
    in section 1 to download its Actions ZIP through the user's authenticated
    browser. Create/select the same fresh case directory and evidence directory
    as above, but skip gh run download. Before extraction:

    # Only for the browser-download alternative; do not run after gh already extracted it.
    $Zip = Read-Host 'Full path of the downloaded Windows Actions artifact ZIP'
    if ((Get-FileHash -LiteralPath $Zip -Algorithm SHA256).Hash.ToLowerInvariant() -ne
        '89f384a3703c7287f1b2cfe0e3beff634e2461125966f127110de452be1b85c9') {
      throw 'Wrong outer Actions ZIP; stop.'
    }
    if (Test-Path -LiteralPath '.\artifacts\windows') { throw 'Destination exists; pause.' }
    Expand-Archive -LiteralPath $Zip -DestinationPath '.\artifacts\windows'

    For Ubuntu without gh, pause and agree an authenticated transfer of the exact
    Linux Actions ZIP to the fresh case; do not improvise a release/mirror URL or
    install a new CLI. Its outer digest is in section 1; extraction must retain the
    same three files under artifacts/linux before Gate C.

    PAUSE B: confirm the selected artifact directory contains the payload,
    manifest.json, and SHA256SUMS. Windows already embeds the Linux archive;
    do not download the additional 285 MB Linux artifact solely to enable managed WSL.

    5. Gate C — manifest + checksum verification BEFORE executing anything

    Windows verification

    From the approved case directory, retain this shell's $Case.

    $ArtifactDir = Join-Path $Case 'artifacts\windows'
    $PayloadName = 'T3-Code-Fork-Preview-0.1.4-preview.20261029.1-x64.exe'
    $ExpectedHash = 'fd1370507672fdcdf66ea39db8b6ee06b1af47d9ecb25017aac72ed4fe932716'
    $ExpectedBytes = 574496132
    $m = Get-Content -LiteralPath (Join-Path $ArtifactDir 'manifest.json') -Raw |
      ConvertFrom-Json
    if ($m.schemaVersion -ne 1 -or
        $m.buildCommit -ne '16d428db823f17c18ec16a79e1ec12ae4ba795c1' -or
        $m.productBase -ne '783581d461dc72cdd8f78fc8abb4ad536dfc4547' -or
        $m.version -ne '0.1.4-preview.20261029.1' -or
        $m.target -ne 'windows-x64' -or
        $m.signing -ne 'unsigned' -or
        $m.publication -ne 'build-artifacts-only' -or
        $m.releaseTransform.verified -ne $true) {
      throw 'Manifest provenance mismatch.'
    }
    $releaseFiles = @(
      'apps/server/package.json', 'apps/desktop/package.json',
      'apps/web/package.json', 'packages/contracts/package.json'
    )
    if (@(Compare-Object ($releaseFiles | Sort-Object) `
        @($m.releaseTransform.files | Sort-Object)).Count -ne 0) {
      throw 'Unexpected release transform.'
    }
    $entries = @($m.artifacts)
    if ($entries.Count -ne 1 -or $entries[0].name -ne $PayloadName -or
        $entries[0].bytes -ne $ExpectedBytes -or
        $entries[0].sha256 -ne $ExpectedHash) {
      throw 'Payload identity differs from successful CI.'
    }
    $Installer = Join-Path $ArtifactDir $PayloadName
    $item = Get-Item -LiteralPath $Installer
    if ($item.PSIsContainer -or ($item.Attributes -band [IO.FileAttributes]::ReparsePoint) -or
        $item.Length -ne $ExpectedBytes) { throw 'Unexpected payload file/type/size.' }
    $actualHash = (Get-FileHash -LiteralPath $Installer -Algorithm SHA256).Hash.ToLowerInvariant()
    $sum = (Get-Content -LiteralPath (Join-Path $ArtifactDir 'SHA256SUMS') -Raw).Trim()
    if ($actualHash -ne $ExpectedHash -or $sum -cne "$ExpectedHash  $PayloadName") {
      throw 'Payload or SHA256SUMS mismatch.'
    }
    if ($m.wslRuntime.name -ne 't3-0.1.4-preview.20261029.1-linux-x64.tar.gz' -or
        $m.wslRuntime.bytes -ne 287102643 -or
        $m.wslRuntime.sha256 -ne
          'f22013478222f68af8ad16103127e061e799383293d633ae1650fc33be5e34ef') {
      throw 'Embedded WSL input provenance mismatch.'
    }
    Write-Output "Verified $PayloadName $actualHash"

    Ubuntu verification

    python3 - <<'PY'
    import hashlib, json
    from pathlib import Path
    d = Path("artifacts/linux")
    name = "t3-0.1.4-preview.20261029.1-linux-x64.tar.gz"
    digest = "f22013478222f68af8ad16103127e061e799383293d633ae1650fc33be5e34ef"
    m = json.loads((d / "manifest.json").read_text())
    assert m["schemaVersion"] == 1
    assert m["buildCommit"] == "16d428db823f17c18ec16a79e1ec12ae4ba795c1"
    assert m["productBase"] == "783581d461dc72cdd8f78fc8abb4ad536dfc4547"
    assert m["version"] == "0.1.4-preview.20261029.1" and m["target"] == "linux-x64"
    assert m["signing"] == "unsigned" and m["publication"] == "build-artifacts-only"
    assert m["releaseTransform"]["verified"] is True
    assert sorted(m["releaseTransform"]["files"]) == sorted([
        "apps/server/package.json", "apps/desktop/package.json",
        "apps/web/package.json", "packages/contracts/package.json",
    ])
    assert m["artifacts"] == [{"name": name, "bytes": 287102643, "sha256": digest}]
    p = d / name
    assert p.is_file() and not p.is_symlink() and p.stat().st_size == 287102643
    h = hashlib.sha256()
    with p.open("rb") as f:
        for chunk in iter(lambda: f.read(1024 * 1024), b""):
            h.update(chunk)
    assert h.hexdigest() == digest
    assert (d / "SHA256SUMS").read_text().strip() == f"{digest}  {name}"
    assert m["wslRuntime"] is None
    print("Verified", name, digest)
    PY

    PAUSE C: send only verification result and non-secret provenance. A failed
    check is not bypassed. No candidate executable or installer runs before this gate.

    6. Windows path — installer, owned profile, and native backend

    D1. Installer versus portable: decide before starting

    The published Windows .exe is an NSIS installer (--target nsis).
    There is no published Windows portable ZIP/portable executable or unpacked
    directory
    in this run. The Linux tarball is not a Windows portable package.
    Do not treat the installer as the app or assume /portable, /D, silent flags,
    manual 7-Zip extraction or a custom install-directory page was qualified.

    The fork's installer app ID remains com.tesseracode.t3code.preview and product
    name remains T3 Code Fork Preview, including older fork previews. A new data
    home does not separate installer registration, app files, shortcuts or
    uninstall identity from an older fork.

    If an older fork is registered/installed, PAUSE: prefer a fresh Windows
    VM/user with no conflicting per-user or machine-wide fork install, or obtain
    an explicit installer-upgrade/backup approval. Do not uninstall/overwrite it
    merely to run this test. An experimental extracted-portable route needs a
    separate plan and authorization; this runbook does not pretend one was shipped.

    D2. Only after installer collision review: fresh owned profile

    From $Case, create a new home and seed only supported desktop settings.
    No old profile, secrets, browser storage, projects, schedules or provider homes
    are copied. Provider homes are not a sandbox; no agent/model turn is authorized.

    Set-Location $Case
    foreach ($key in @('ELECTRON_RUN_AS_NODE','ELECTRON_NO_ASAR','NODE_OPTIONS','NODE_PATH')) {
      if ([Environment]::GetEnvironmentVariable($key, 'Process')) {
        throw "Inherited launcher override $key is present: review in a clean shell; do not launch."
      }
    }
    if (Test-Path -LiteralPath '.\profile-windows') {
      throw 'Profile exists: pause; never reuse an unknown profile.'
    }
    New-Item -ItemType Directory -Path '.\profile-windows\userdata' | Out-Null
    $PreviewHome = Join-Path $Case 'profile-windows'
    $SettingsFile = Join-Path $PreviewHome 'userdata\desktop-settings.json'
    $settingsJson = '{"localEnvironmentEnabled":true,"wslBackendEnabled":false,"wslOnly":false}'
    [IO.File]::WriteAllText($SettingsFile, $settingsJson, [Text.UTF8Encoding]::new($false))
    $env:T3CODE_FORK_PREVIEW_HOME = $PreviewHome
    $env:T3CODE_TELEMETRY_ENABLED = 'false'

    Keep this override in the launching shell. Do not set global/machine environment
    variables. A normal Start-menu launch from a different environment could use
    the default, older ~/.t3-fork-preview instead.

    PAUSE D2: confirm this new absolute profile path and fresh settings. If any
    setting unexpectedly requests WSL, do not launch.

    D3. Install only after explicit approval

    # $Installer was verified at Gate C; do not replace it with a similarly named file.
    Start-Process -FilePath $Installer -Wait

    Use only the normal installer UI after the collision decision above. If it
    offers to run the app at completion, leave that unchecked; the controlled
    launch is a separate step. If it silently launches, inspect its actual profile
    before doing anything else; the installer inherited the preview-home override,
    but do not assume every shortcut/shell relaunch does. If Windows blocks the
    unsigned file, pause for the user's normal single-file trust decision. Do not
    disable SmartScreen/Defender, remove security policy or run as administrator
    just to force this test.

    Identify the actual installed application from the installer/shortcut
    properties. Do not guess its installation directory:

    $App = Read-Host 'Paste the verified installed T3 Code Fork Preview.exe full path'
    $appItem = Get-Item -LiteralPath $App
    if ($appItem.PSIsContainer -or $appItem.Name -cne 'T3 Code Fork Preview.exe' -or
        ($appItem.Attributes -band [IO.FileAttributes]::ReparsePoint)) {
      throw 'Unexpected application identity or reparse point; pause.'
    }
    $App = $appItem.FullName
    $InstallDir = $appItem.DirectoryName
    $appItem.VersionInfo | Select-Object ProductName, ProductVersion, FileVersion
    Get-ChildItem -LiteralPath $InstallDir -Recurse -File |
      Measure-Object | Select-Object Count
    $Resources = Join-Path $InstallDir 'resources'
    $embedded = Join-Path $Resources 'wsl-runtime.tar.gz'
    $embeddedHash = (Get-FileHash -LiteralPath $embedded -Algorithm SHA256).Hash.ToLowerInvariant()
    $embeddedRecorded = (Get-Content -LiteralPath "$embedded.sha256" -Raw).Trim().ToLowerInvariant()
    if ($embeddedHash -ne 'f22013478222f68af8ad16103127e061e799383293d633ae1650fc33be5e34ef' -or
        $embeddedRecorded -ne $embeddedHash) { throw 'Installed embedded runtime hash mismatch.' }
    Get-Item -LiteralPath (Join-Path $Resources 'server.asar')
    Get-Item -LiteralPath (Join-Path $Resources 'server.asar.unpacked')

    Record the installed file count separately from CI's 64-file packaged tree:
    an installer may add uninstall metadata/files. The upstream whole packaged-app
    budget is 80, not 80 files only inside server.asar.unpacked. If the count
    or layout needs explanation, pause and inspect; do not invent exclusions or
    raise the budget. This is not a claim that installing locally rebuilt the CI
    package inventory.

    PAUSE D3: confirm exact app path/version, embedded hash, and installer outcome.

    D4. Installed-stage dependency check, then controlled GUI launch

    This uses the bundled Electron runtime as Node, matching the source's native
    probe invocation, with global Node search disabled. It does not open the GUI
    or run a provider turn. First ensure the application and case directory are not
    inside a checkout and that their outside ancestors contain no node_modules;
    if such an ancestor exists, pause rather than moving/deleting its packages.

    foreach ($start in @($InstallDir, $Case)) {
      $dir = [IO.DirectoryInfo]::new($start)
      while ($null -ne $dir) {
        if (Test-Path -LiteralPath (Join-Path $dir.FullName 'node_modules')) {
          throw "Visible outside node_modules: $($dir.FullName); pause."
        }
        $dir = $dir.Parent
      }
    }
    if (Test-Path -LiteralPath '.\probe-home-windows') { throw 'Probe path exists; pause.' }
    New-Item -ItemType Directory -Path '.\probe-home-windows' | Out-Null
    $ProbeHome = Join-Path $Case 'probe-home-windows'
    $savedEnv = @{}
    $probeKeys = @('ELECTRON_RUN_AS_NODE','ELECTRON_NO_ASAR','NODE_OPTIONS','NODE_PATH','T3CODE_HOME')
    foreach ($key in $probeKeys) { $savedEnv[$key] = [Environment]::GetEnvironmentVariable($key, 'Process') }
    try {
      $env:ELECTRON_RUN_AS_NODE = '1'
      $env:ELECTRON_NO_ASAR = $null
      $env:NODE_OPTIONS = $null
      $env:NODE_PATH = ''
      $env:T3CODE_HOME = $ProbeHome
      $Entry = Join-Path $Resources 'server.asar\apps\server\dist\bin.mjs'
      $versionOutput = & $App --no-global-search-paths $Entry --version 2>&1
      $versionExit = $LASTEXITCODE
      $versionOutput | Set-Content -LiteralPath '.\evidence\windows-stage-version.txt'
      if ($versionExit -ne 0 -or
          (($versionOutput | Out-String) -notmatch '0\.1\.4-preview\.20261029\.1')) {
        throw 'Installed-stage version/dependency probe failed; pause.'
      }
      $versionOutput
    } finally {
      foreach ($key in $probeKeys) { [Environment]::SetEnvironmentVariable($key, $savedEnv[$key], 'Process') }
    }

    This is a receiver installed-ASAR check, not a fabricated rerun of the builder's
    separate isolated extracted-sidecar and FFF native-load checks; those passed in
    the recorded CI. Keep their scopes distinct.

    PAUSE D4: report the probe. Only then launch the GUI from the qualified app:

    foreach ($key in @('ELECTRON_RUN_AS_NODE','ELECTRON_NO_ASAR','NODE_OPTIONS','NODE_PATH')) {
      if ([Environment]::GetEnvironmentVariable($key, 'Process')) {
        throw "Unexpected launcher override $key is present; pause."
      }
    }
    $env:T3CODE_FORK_PREVIEW_HOME = $PreviewHome
    $env:T3CODE_TELEMETRY_ENABLED = 'false'
    $PreviewProcess = Start-Process -FilePath $App -PassThru
    $PreviewProcess.Id

    Record spawn PID and actual descendant paths/profile, not just a process name.
    The desktop chooses a free port by scanning; do not assume 3773/3774 on this
    host. Read <profile>/userdata/server-runtime.json and logs when ready:

    Get-Content -LiteralPath (Join-Path $PreviewHome 'userdata\server-runtime.json') -Raw
    Get-Content -LiteralPath (Join-Path $PreviewHome 'userdata\desktop-settings.json') -Raw
    Get-ChildItem -LiteralPath (Join-Path $PreviewHome 'userdata\logs')

    Missing settings booleans can mean defaults: the settings writer omits defaults.
    Expected: Windows local environment, WSL Off, owned fresh profile, no old
    projects/threads imported, and no stock/fork server stopped. If WSL starts,
    the wrong home appears, or old data appears, stop through the candidate UI
    and pause
    . Do not “fix” the old profile or continue into a migration.

    7. Windows acceptance, one subtest at a time

    #22 — native menus and title-bar hit regions

    Record OS version, display scaling, window size/maximized state and build
    version. Source still has a hidden non-Mac title bar/overlay and
    autoHideMenuBar: true; a successful Mac UI test does not settle this issue.

    1. In the first-project/empty state, try Alt and mouse menu discovery.
      Record whether File/Edit/View can actually be reached; do not assume a
      keyboard chord alone repairs discovery.
    2. Verify File → Settings and Ctrl+,; View → Toggle Developer Tools and
      Ctrl+Shift+I. Native View actions should target the main app, not an
      embedded browser guest. Do not run mutation scripts in DevTools.
    3. Check intended blank title/header dragging, double-click maximize/restore,
      native window controls and snap behavior. Inputs, breadcrumbs, composer,
      tabs and other clickable controls must not be stolen by a drag region.
    4. Repeat in Settings and an empty thread/composer or an approved read-only
      remote history view, restored/maximized and narrow/wide. No model turn is
      needed. Additional DPI configurations require an explicit user decision;
      record untested configurations rather than changing OS settings silently.
    5. Capture before/after screenshots; use a short video for menu/drag timing.
      A reproducible failure is evidence, not permission to patch this host.

    PAUSE: review #22 before the next test.

    #28 — client-only persistence, retained remote, and reverse path

    Use an explicitly approved independent remote environment. The Mac's existing
    16534 connection is not automatically a Windows connection, and the original
    3773 backend is protected. Obtain a fresh pairing URL from its owner or use an
    already authorized saved connection; do not copy credentials or mint tokens
    against a different version/live home using this candidate CLI.

    1. Record this test profile's Windows backend PID, selected port, environment
      ID, and the approved remote environment ID/endpoint. No active agents,
      terminals, schedules or writes may be present before disabling local.
    2. In Settings search Local environment, turn it Off and accept
      Restart and turn off. This intentionally stops only this desktop's
      owned local/managed WSL backends. Confirm the remote remains connected and
      its existing history can be read without sending a prompt.
    3. On disk, localEnvironmentEnabled must be false. Confirm the old owned
      local listener/PID is gone, no replacement Windows/WSL backend appeared,
      and baseline stock/independent services and forwards remain healthy.
      A new Electron PID after relaunch is normal.
    4. Fully quit and explicitly relaunch the same $App using the same
      $PreviewHome override from D4. Do not use an unqualified Start-menu launch.
      OFF must persist; remote identity/connection remains, and local does not
      respawn. Saved-registry byte hashes are not an identity test: normal
      connection metadata can change.
    5. Reverse through Local environment → On → Restart and turn on.
      Verify Windows returns with its previous environment/project data, the
      remote is retained, and WSL remains Off for this Windows-only phase.
      Default true may be omitted from the compact settings file.
    6. Quit the candidate once more: independently managed remote servers/forwards
      must keep running. Do not confuse closing a window with quitting the app.

    PAUSE: report separate results for OFF, actual relaunch persistence,
    remote retention, baseline health, and ON reversal.

    8. WSL phase — additional explicit approval, not automatic after Windows

    E1. Inspect the selected distro's ACTUAL default account

    Use the fresh approved Windows test profile with WSL still Off.
    Choose an exact name from wsl --list --verbose; do not change the default distro.
    This inspection can start that distro's shell but must not start a T3 server.

    $Distro = Read-Host 'Exact approved dedicated test distro name'
    $inspect = @'
    set -eu
    uname -srm
    id
    account_home=$(getent passwd "$(id -u)" | cut -d: -f6)
    printf 'Account home: %s\nShell HOME: %s\n' "$account_home" "$HOME"
    [ "$account_home" = "$HOME" ] || { printf 'HOME mismatch: STOP\n' >&2; exit 1; }
    for p in "$account_home/.t3" "$account_home/.t3-fork-preview"; do
      if [ -e "$p" ] || [ -L "$p" ]; then ls -ld -- "$p"; fi
    done
    command -v flock sha256sum tar stat readlink
    ps -u "$(id -u)" -o pid,ppid,comm,args |
      awk 'NR == 1 || /[tT]3|copilot/'
    if [ -e "$account_home/.t3-fork-preview" ] || [ -L "$account_home/.t3-fork-preview" ]; then
      printf 'Existing Linux fork profile/cache: STOP; migration approval required.\n' >&2
      exit 1
    fi
    '@
    ($inspect -replace "`r`n", "`n") | wsl.exe -d $Distro --exec sh -s
    if ($LASTEXITCODE -ne 0) { throw 'WSL preflight requires review; do not enable WSL.' }

    PAUSE E1: verify x86_64, exact default Linux user/home, no existing fork
    home/cache, no unknown owner and approved network boundary. A fresh user that
    the desktop will not actually use is insufficient. Otherwise provision a
    dedicated distro/default account separately, or obtain an approved stopped
    backup/migration plan. There are deliberately no automatic backup, rename,
    deletion, service-stop or default-user-changing commands here.

    E2. Cold managed startup, through supported UI

    In Settings search WSL backend, select that exact distro and choose
    running it alongside Windows, not “WSL only”, for the first check. This
    uses the source-supported distro/enabled settings; review any confirmation
    dialog before accepting. If the only selectable identity is ambiguous, pause.

    Verify Windows stays separate and WSL appears as a distinct environment.
    No provider/model turn, login, imported history, schedule or tool invocation.
    Windows logs must identify the expected distro and Linux account path.
    If the packaged-runtime path falls back to a mounted server/host Node tree,
    record a failure of the packaged-runtime test, even if a fallback connects.

    The expected exact cache root is:

    ~/.t3-fork-preview/wsl-runtime/sha256-f22013478222f68af8ad16103127e061e799383293d633ae1650fc33be5e34ef
    

    In a shell for the same selected distro/default account, inspect:

    set -eu
    ROOT="$HOME/.t3-fork-preview/wsl-runtime/sha256-f22013478222f68af8ad16103127e061e799383293d633ae1650fc33be5e34ef"
    PLATFORM="$ROOT/node_modules/@github/copilot-linux-x64"
    for f in "$ROOT/t3" "$PLATFORM/copilot" \
      "$PLATFORM/ripgrep/bin/linux-x64/rg" "$PLATFORM/tgrep/bin/linux-x64/tgrep"; do
      [ -f "$f" ] && [ ! -L "$f" ] && [ -x "$f" ] || { printf 'Bad command: %s\n' "$f"; exit 1; }
      stat -c '%a %u %s %n' "$f"
    done
    digest=$(sha256sum "$ROOT/t3" | cut -d' ' -f1)
    [ "$(cat "$ROOT/.t3code-wsl-runtime-ready")" = "$digest:copilot" ]
    printf '%s\n' 'Mode/layout/remembered-Copilot marker checks passed.'

    All three Copilot commands should be 0755. The ready marker records the
    server executable digest plus :copilot; it is not the tarball digest.
    Do not run copilot/rg/tgrep as agent tools merely to test mode bits.

    While this exact managed backend is still running, capture its Linux PID from
    the selected account's owned userdata/server-runtime.json, then verify its
    actual executable. Retain the output for E3; do not capture a PID after shutdown
    or substitute a PID obtained by matching a process name:

    python3 - <<'PY'
    import json, os
    from pathlib import Path
    base = Path.home() / ".t3-fork-preview"
    state = json.loads((base / "userdata/server-runtime.json").read_text())
    pid = state["pid"]
    assert isinstance(pid, int) and not isinstance(pid, bool) and pid > 0
    proc = Path("/proc") / str(pid)
    expected = base / "wsl-runtime/sha256-f22013478222f68af8ad16103127e061e799383293d633ae1650fc33be5e34ef/t3"
    assert proc.stat().st_uid == os.getuid(), "Unknown backend process owner: STOP"
    assert (proc / "exe").readlink() == expected, "Unexpected backend executable: STOP"
    print("Captured owned Linux backend PID:", pid)
    print("Verified executable:", expected)
    print("Runtime startedAt:", state["startedAt"])
    PY

    Missing Python, inaccessible process metadata, a stale runtime record or any
    identity mismatch means pause; do not install tools or infer ownership.

    PAUSE E2: inspect cold startup and native/profile evidence.

    E3. Warm reuse, then OPTIONAL owned-cache mode-repair fault

    First disable WSL in the candidate UI, confirm only its WSL process/listener
    stopped, then re-enable the same distro. Verify the same digest-keyed root,
    marker, command bytes and executable modes, plus the same WSL environment ID.
    No new data directory or Windows-home fallback is acceptable.
    While the warm-reused backend is still running, repeat E2's PID/executable
    capture for this current process. The earlier cold-start PID is not sufficient
    after a restart; retain the newly verified PID before switching WSL Off.

    PAUSE E3a: a deliberate fault injection needs a separate explicit approval.
    It is restricted to this newly created disposable Linux test profile/cache.
    Never apply it to a prior fork, live service, or unclear owner.

    For approved mode repair, switch the candidate's WSL backend Off first.
    Use the most recently captured, executable-verified Linux PID, using E2's
    capture procedure after the last restart, to check shutdown.
    This intentionally replaces the broad /proc/*/exe scan: an ignored readlink
    error is not evidence that a cache has no live owner. Do not kill a matching PID.

    set -eu
    printf 'Previously captured and verified Linux backend PID: '
    IFS= read -r OWNED_PID
    python3 - "$OWNED_PID" <<'PY'
    import os, sys
    try:
        pid = int(sys.argv[1])
        assert pid > 0
    except (ValueError, AssertionError):
        raise SystemExit("Invalid captured PID: STOP")
    try:
        os.kill(pid, 0)
    except ProcessLookupError:
        print("The captured PID no longer exists; ownership review is still required.")
    except PermissionError:
        raise SystemExit("Unknown/inaccessible process ownership: STOP")
    except OSError as error:
        raise SystemExit(f"Cannot establish captured-PID state: STOP ({error})")
    else:
        try:
            executable = os.readlink(f"/proc/{pid}/exe")
        except OSError as error:
            raise SystemExit(f"PID still exists but executable/ownership is unknown: STOP ({error})")
        raise SystemExit(f"PID is still present or has been reused: STOP ({executable})")
    PY

    PAUSE E3b — before chmod: a missing captured PID proves only that PID ended,
    not global absence of other users of the cache. Review the desktop's completed
    WSL shutdown, recorded listener, dedicated distro/account, and all other known
    owners/launchers of this disposable cache. Any inaccessible metadata, denied
    inspection, PID reuse, unexplained process/listener, other possible owner or
    uncertainty means skip the optional fault and report pending. Do not convert
    an inspection error into absence. Only after explicit ownership clearance:

    set -eu
    ROOT="$HOME/.t3-fork-preview/wsl-runtime/sha256-f22013478222f68af8ad16103127e061e799383293d633ae1650fc33be5e34ef"
    [ -d "$ROOT" ] && [ ! -L "$ROOT" ]
    RG="$ROOT/node_modules/@github/copilot-linux-x64/ripgrep/bin/linux-x64/rg"
    [ -f "$RG" ] && [ ! -L "$RG" ] && [ "$(stat -c %u "$RG")" = "$(id -u)" ]
    [ "$(readlink -f "$RG")" = "$RG" ]
    sha256sum "$RG"
    stat -c '%a %n' "$RG"
    # Only after E3a approval: simulate the known package-mode fault in this disposable cache.
    chmod 0644 "$RG"
    [ ! -x "$RG" ]

    If ownership/executable inspection is incomplete, stop; do not proceed on an
    absence assumption. Re-enable WSL through the candidate UI. Product repair may
    replace its damaged disposable runtime cache after hash verification; that is
    the explicitly approved test, not permission to migrate/delete an old profile.
    Repeat E2 checks: rg must be executable/0755 again, command hashes match the
    verified payload, expected :copilot readiness returns, WSL environment ID and
    state remain the same, and Windows remains separate. Retain the repair log.
    No manual chmod-to-0755, marker edit, cache deletion or forced fallback may be
    used to manufacture a product pass.

    E4. WSL staged self-containment, without starting a competing server

    With the candidate's WSL backend Off, check every outside ancestor of ROOT
    for node_modules; ROOT's own packaged node_modules is required. Any foreign
    ancestor is a stop, not a reason to rename/delete it.

    set -eu
    ROOT="$HOME/.t3-fork-preview/wsl-runtime/sha256-f22013478222f68af8ad16103127e061e799383293d633ae1650fc33be5e34ef"
    parent=$(dirname "$ROOT")
    while :; do
      [ ! -e "$parent/node_modules" ] || { printf 'Foreign node_modules: %s\n' "$parent"; exit 1; }
      [ "$parent" != / ] || break
      parent=$(dirname "$parent")
    done
    (cd "$ROOT" && env -i PATH= HOME="$HOME" USERPROFILE="$HOME" \
      T3CODE_HOME="$HOME/.t3-fork-preview" T3CODE_TELEMETRY_ENABLED=false \
      "$ROOT/t3" --version)

    Expected exact candidate version, no host Node/npm/CLI required. This is the
    cached binary/version closure check; do not start serve manually against
    ~/.t3-fork-preview while desktop owns it. Native managed cold/warm startup
    and the CI smoke remain separate evidence from this version check.

    PAUSE E4: review WSL results before any WSL-only/reversal experiment.
    If subsequently authorized, “WSL only” relaunches the app; turning it off
    reintroduces Windows alongside WSL, while WSL backend → Off returns to
    Windows-only. Never change mode/distro with active work.

    9. Ubuntu headless path — no desktop install and no OS notifications

    F1. Inspect/extract only the already verified archive

    The actual tar layout has exactly one top-level directory:

    t3-0.1.4-preview.20261029.1-linux-x64/
      t3                     # self-contained native Linux executable; NOT node bin.mjs
      client/index.html      # bundled web client
      resource-monitor/...
      node_modules/...       # required staged runtime externals; KEEP THE WHOLE TREE
    

    It is not an AppImage/deb and needs no system/global Node/npm or global Copilot
    install. Do not move only t3, run an invented bin/t3/bin.mjs, or “fix”
    missing packages with a global install.

    From the approved case directory:

    set -eu
    ARCHIVE=artifacts/linux/t3-0.1.4-preview.20261029.1-linux-x64.tar.gz
    tar -tzf "$ARCHIVE" | sed -n '1,18p'
    python3 - <<'PY'
    import tarfile
    from pathlib import PurePosixPath
    stem = "t3-0.1.4-preview.20261029.1-linux-x64"
    with tarfile.open(f"artifacts/linux/{stem}.tar.gz", "r:gz") as t:
        names = []
        for m in t:
            p = PurePosixPath(m.name)
            assert not p.is_absolute() and ".." not in p.parts
            assert p.parts and p.parts[0] == stem
            # The CLI stage is hoisted and has no reason to install link/device entries.
            assert m.isfile() or m.isdir(), f"Unexpected link/device entry: {m.name}"
            names.append(str(p))
        for required in ("t3", "client/index.html", "node_modules"):
            assert f"{stem}/{required}" in names, required
    print("Single-stem regular-file/directory archive inventory accepted.")
    PY
    if [ -e payload ] || [ -L payload ]; then printf 'Existing payload: STOP\n'; exit 1; fi
    mkdir payload
    tar -xzf "$ARCHIVE" -C payload
    PAYLOAD="$CASE/payload/t3-0.1.4-preview.20261029.1-linux-x64"
    test -x "$PAYLOAD/t3"

    If a reviewed archive has a different link inventory, pause for analysis;
    do not silently remove this extraction guard.

    PAUSE F1: confirm payload layout and file modes; no server started yet.

    F2. Fresh headless data/HOME and staged version proof

    Outside ancestors of the payload must not offer a foreign node_modules.
    Keep source/global dependencies out of the proof; do not delete foreign ones.

    set -eu
    cd "$CASE"
    parent=$(dirname "$PAYLOAD")
    while :; do
      [ ! -e "$parent/node_modules" ] || { printf 'Foreign node_modules: %s\n' "$parent"; exit 1; }
      [ "$parent" != / ] || break
      parent=$(dirname "$parent")
    done
    for p in profile-ubuntu runtime-home scratch; do
      if [ -e "$p" ] || [ -L "$p" ]; then printf 'Existing owned test path: %s; STOP\n' "$p"; exit 1; fi
    done
    mkdir profile-ubuntu runtime-home scratch
    BASE="$CASE/profile-ubuntu"
    RUNTIME_HOME="$CASE/runtime-home"
    env -i PATH= HOME="$RUNTIME_HOME" USERPROFILE="$RUNTIME_HOME" \
      TMPDIR="$CASE/scratch" TEMP="$CASE/scratch" T3CODE_HOME="$BASE" \
      T3CODE_TELEMETRY_ENABLED=false "$PAYLOAD/t3" --version

    Expected 0.1.4-preview.20261029.1. This deliberately uses no host Node/npm/CLI
    PATH and a fresh runtime HOME; it does not claim exhaustive syscall auditing
    or replace the source's full native dependency-closure validation.

    PAUSE F2: agree a free test port. The example below uses 47714 only if
    preflight proves it free
    . Never reuse 3773/16534 or any pre-existing listener
    just because those ports appeared in the Mac report.

    F3. Foreground server with loopback-only, explicit fresh base

    In Terminal A, keep the server foreground so Ctrl+C is the exact owned shutdown.
    This avoids systemd/cron/service installation and background-process ambiguity.

    set -eu
    if [ -n "$(ss -H -ltn 'sport = :47714')" ]; then printf '47714 is occupied: STOP\n'; exit 1; fi
    env -i PATH= HOME="$RUNTIME_HOME" USERPROFILE="$RUNTIME_HOME" \
      TMPDIR="$CASE/scratch" TEMP="$CASE/scratch" T3CODE_HOME="$BASE" \
      T3CODE_TELEMETRY_ENABLED=false \
      "$PAYLOAD/t3" serve --host 127.0.0.1 --port 47714 --base-dir "$BASE" --no-browser

    The startup prints a connection string/token/pairing URL/QR. Treat all pairing
    details as credentials. Do not paste them into an issue, screenshot, public
    chat, unredacted transcript or this runbook. Do not consume the user's token
    to “check” it; wait for the intended client to pair.
    The startup pairing credential uses the full default permission set described
    in F4, including access management; it is not a read-only credential.

    In Terminal B, set the exact already agreed case path (do not create/reuse a
    different base), then inspect the owned runtime and HTTP listener:

    cd "$HOME/t3-receive-v014-16d428db"
    CASE=$(pwd -P)
    BASE="$CASE/profile-ubuntu"
    PAYLOAD="$CASE/payload/t3-0.1.4-preview.20261029.1-linux-x64"
    cat "$BASE/userdata/server-runtime.json"
    ss -H -ltnp 'sport = :47714'
    curl --fail --silent --show-error --output /dev/null \
      --write-out 'HTTP %{http_code}\n' http://127.0.0.1:47714/

    Record runtime PID + version + base + executable ownership. If curl is absent,
    pause for an approved read-only HTTP client; do not install tools automatically.
    Check the state directory is this new base and not ~/.t3 or an old fork home.

    PAUSE F3: require ready output and HTTP success, with no unexpected provider
    turns or browser/desktop launch.

    F4. Pair from one explicitly chosen client; no public networking

    Use a browser on the same host, or an approved existing SSH connection to
    forward a free client port to this loopback server. Do not change server bind,
    firewall, Tailscale Serve, service state or an existing forward to make it work.
    For an approved SSH target/client with client 47714 also verified free, the
    standard OpenSSH forward is:

    ssh -N -o ExitOnForwardFailure=yes -L 127.0.0.1:47714:127.0.0.1:47714 user@approved-ubuntu-host
    

    Replace user@approved-ubuntu-host only with the verified receiving-host SSH
    identity; do not execute the placeholder or bypass host-key checking. Track
    this foreground tunnel separately; Ctrl+C stops only that tunnel. A same-port
    forward preserves the printed loopback pairing URL. If it is occupied, pause
    and choose the mapping deliberately; do not replace the known remote at 16534.

    If the original credential expires/is consumed, mint a new one with the exact
    candidate binary and same owned running base, not a global CLI:

    PAUSE — approve pairing authority before using a link or minting a replacement.
    At exact candidate 16d428db823f17c18ec16a79e1ec12ae4ba795c1,
    apps/server/src/cli/pair.ts supplies
    authScopesFlag(AuthStandardClientScopes). Despite that constant's name,
    packages/contracts/src/auth.ts defines it as all 16 currently grantable
    permissions
    , including access:read, access:write, settings:write,
    providers:manage, environment:maintain, relay:read and relay:write.
    Thus omitting --scope grants access-management and the other current
    management permissions; the earlier “not admin management scopes” statement
    was incorrect. These are explicit permissions, not a separate “admin” role.

    apps/server/src/cli/authScopes.ts confirms that repeated --scope options
    replace, rather than augment, the default set. If narrower permissions are
    wanted, pause to choose the exact explicit set before pairing; do not silently
    substitute one. issueStartupPairingCredential in
    apps/server/src/auth/EnvironmentAuth.ts also uses this same default permission
    array for the non-dev startup credential. This agrees with candidate
    docs/user/remote-access.md (“New pairings without --scope include all of them”).
    Granting a capability does not override the operational ban on model turns.

    Only if the user approves that full default authority:

    "$PAYLOAD/t3" pair --base-dir "$BASE" --ttl 5m

    No --tailscale flag: that would persistently modify a Tailscale Serve mapping.
    Use the actual generated token-bearing pairing URL, not a bare origin.
    Pair/open only the chosen client with the approved permissions; do not run
    a model turn.

    No OS notifications: the headless server itself has no desktop alert/sound
    channel. Notifications belong to clients and default Off. On the chosen client,
    leave system notifications/sound Off, and do not grant browser notification
    permission. A server log/pairing QR is not an OS notification. This test proves
    headless startup/pairing/silent behavior, not an agent-event notification
    delivery scenario; triggering one would need a separate approved test.

    PAUSE F4: confirm pairing, environment identity, bundled UI load, and silent
    headless behavior. Only then consider using this independent Ubuntu test server
    as the approved remote for Windows #28.

    10. Evidence, rollback, and stop conditions

    Evidence to retain per selected receiving host

    • Candidate SHA/version; run/artifact ID; manifest and SHA256SUMS; actual
      payload hash/bytes, OS/CPU/distro/default user, installation/executable path,
      precise newly owned data home and startup PID/port/environment ID.
    • Preflight protected apps/profiles/processes/listeners, plus final comparison.
      A PID alone is not ownership; re-check executable/path/parent if it changed.
    • Windows: <PreviewHome>/userdata/logs/desktop.trace.ndjson,
      server-child.log, and any server-child-<instance>.log for WSL.
      State uses userdata/statev2.sqlite; do not open it read-write or copy a live
      SQLite file. Do not attach secrets, auth tokens, or the whole profile.
    • Standalone Ubuntu: <BASE>/userdata/logs/server.trace.ndjson; inspect
      server-runtime.json while running. After shutdown it may be removed.
      Provider log directories do not prove a provider/model turn was authorized.
    • Screenshot [DESK-01] Restore Windows menu access and predictable title-bar dragging #22 empty state/menu/drag, chat/composer, Settings, window mode;
      video for motion. Screenshot feat(desktop): add client-only mode and guard backend ownership #28 OFF/remote retained, actual relaunch OFF,
      and ON reversal. WSL record exact distro/root, mode/marker checks and repair
      logs. Redact pairing URLs/tokens, personal chats and private command lines
      in copies, not by altering original evidence or live logs.
    • Result labels: passed / failed / pending / not run, separately for CI gate,
      receiver stage, native UI, cold cache, warm cache, deliberate repair, pairing
      and client-only reversal. Do not infer Windows/WSL passes from Mac or CI.

    Rollback without touching existing installations/data

    1. Desktop: quit only this candidate through its own File → Quit/native UI.
      Confirm its captured process tree and owned listener stop, while baseline
      stock/fork services and independent remotes/forwards remain. No name-based
      kills. Unexpected surviving ownership requires a pause, not taskkill /IM,
      pkill, killall, broad PID searches piped to kill, or wsl --shutdown.
    2. Ubuntu: Ctrl+C in the exact foreground Terminal A server; verify its
      recorded PID/listener ends. Stop only the newly opened foreground SSH tunnel
      if one was created, never an old forward.
    3. WSL: turn this test profile's WSL backend Off before quitting; verify
      only its managed backend stops. Preserve the fresh test distro, profile,
      state and cache as evidence. Do not unregister a distro or delete/rename
      ~/.t3-fork-preview.
    4. Keep the case directory/new test homes for inspection. Starting an older
      binary against a V2-migrated home is not rollback. If an old profile was
      accidentally opened, stop and use the separately approved consistent-backup
      recovery plan; do not improvise a database downgrade or copy-back.
    5. Only if installer collision preflight proved no pre-existing fork and the
      user explicitly wants removal, use the normal uninstaller for this exact
      candidate. If identities are ambiguous, leave it installed and pause.
      Do not uninstall stock T3 or erase old/new user data automatically.
    6. Relaunch any prior app only through its original path/profile and with
      its original launching environment. Close the test PowerShell session to
      discard process-only overrides; do not set/unset machine-wide variables.

    No provider/model turn is authorized by any step above, on any receiving host.
    Any future native Copilot/session test requires explicit per-host approval,
    chosen provider home/model/budget and a separate bounded script.

    Source evidence used for this runbook

    All source references are at candidate
    16d428db823f17c18ec16a79e1ec12ae4ba795c1, not moving main or an old packaging branch:

    • .github/workflows/fork-native-preview.yml: NSIS-only Windows upload,
      independent Linux input, Windows C:\t3\tmp versus checkout C:\t3\s.
    • scripts/fork-preview-manifest.mjs: real manifest fields, four-manifest
      transform, actual artifact hashes and checksum-file format.
    • scripts/build-cli-archive.ts: single-stem native t3, adjacent client/
      monitor/runtime node_modules, not a loose JS bin.mjs install.
    • scripts/fork-preview-bootstrap.cjs, scripts/lib/fork-preview.ts:
      preview home/identity/bootstrap and fixed fork installer app ID.
    • apps/desktop/src/settings/DesktopAppSettings.ts,
      app/DesktopStatePaths.ts, app/DesktopEnvironment.ts: defaults/schema/paths.
    • apps/desktop/src/backend/DesktopBackendConfiguration.ts,
      wsl/DesktopWslBackend.ts, wsl/DesktopWslEnvironment.ts:
      real primary/secondary selection, fixed Linux preview home, account-home
      probe, cache readiness/promotion and repair.
    • apps/desktop/src/ipc/methods/wsl.ts, ipc/methods/localEnvironment.ts,
      apps/web/src/components/settings/ConnectionsSettings.tsx,
      LocalEnvironmentSetting.tsx: supported UI switches and relaunch behavior.
    • apps/desktop/src/window/DesktopApplicationMenu.ts, DesktopWindow.ts:
      actual menu actions/accelerators and hidden title-bar/auto-hide configuration.
    • apps/server/src/cli/config.ts, server.ts, pair.ts, startupAccess.ts,
      config.ts: exact CLI flags, headless output, pairing and state/log paths.
    • apps/server/src/cli/authScopes.ts, packages/contracts/src/auth.ts,
      apps/server/src/auth/EnvironmentAuth.ts, docs/user/remote-access.md:
      no---scope pairing includes the current full permission set, including
      access management; an explicit repeated --scope list replaces that set.
    • docs/user/notifications.md: client-owned notifications, off by default,
      no alert/sound channel for a headless server.
    • Read-only issue context: #22,
      #28. Historical issue prose
      is not substituted for current source behavior.

    Preparation changed only this runbook. No repository source, lifecycle/PR/release,
    CI dispatch, artifact payload download, live app/profile, OS permission or host
    configuration was changed.

  12. jdbencardinop commented on Oct 29, 2026

    @jdbencardinop
    Author

    v0.1.4 reconciliation: recorded source, local qualification and receiving-host handoff

    Candidate ready for receiving-host evaluation, not production promotion.
    Product source is 16d428db823f17c18ec16a79e1ec12ae4ba795c1;
    reconcile/v0.1.4-fork now points at metadata/report commit
    4778f4739bfc754d69076a5381f7b080bcddf78b, with no additional product changes.
    Base is immutable upstream v0.1.4
    783581d461dc72cdd8f78fc8abb4ad536dfc4547.

    No main merge, PR, release tag, live backend upgrade or physical-phone replacement
    occurred. The original checkout, its four pre-existing Android .gradle/
    directories and the original running backend were preserved.

    1. Yes: the reviewed fixes are recorded

    They were included in their complete owning tpatch roots, not separate patches
    for every individual bug.

    Reviewed fix / issue evidence Recorded ownership
    Intermediate provider-turn completion incorrectly fenced the entire run phase1-foundation
    Stale permission snapshots, missing real native success receipt, terminal-before-receipt race, empty tool-only assistant rows copilot-cli-provider
    Preview legacy-storage migration read the stock profile copilot-runtime-packaging
    #30 cold project skills, selection and removal Native root's workspace-scoped discovery plus upstream picker
    #31 copied reference, #23 width controls, tested narrow-window shortcut portion of #18 Upstream coverage, verified again on this candidate; no duplicate fork patches

    Historical copilot-skill-controls and copilot-skill-controls-ws-rpc records
    were inspected against the actual installed source, not just their “applied”
    labels. Their mutation RPCs were already absent from installed bc9eeb9a and the
    mobile baseline. They are not a newly introduced v0.1.3/v0.1.4 regression.

    2. Maintained roots and exact replay

    The eight maintained roots carried forward are:

    1. copilot-cli-provider
    2. session-search
    3. copilot-sdk-license-notice
    4. copilot-runtime-packaging
    5. phase1-foundation
    6. attention-notifications
    7. tpatch-local-capture-ignore
    8. fork-maintenance-policy

    mobile-hermes-segmentation remains evidenced as upstream-covered; it was not
    silently skipped or reintroduced. Both native clients now boot and read history.

    Integrated validation/review produced three additional cohesive roots:

    Root Reason
    foundation-v014-client-compat Updated RPC test doubles/private exports and removed two unreachable mobile wrappers; shared public functionality remains
    attention-policy-completion-watermarks Reviewer reproduced old completion notifications replaying after policy changes; four cases failed before and passed after the fix
    fork-maintenance-check-scope Preserve hash-bound .tpatch history during application checks, without excluding product code or weakening mixed-change checks

    Every replay had actual source inspection, including non-conflicting paths and
    explicitly removed/absorbed pieces. All eleven canonical patches strictly
    replay in dependency order to the actual built candidate
    , including file modes:
    tree 226936033452d479986dff3779db6584e39a4342, zero residual outside administrative
    .tpatch/.

    Immutable internal replay record and adjacent reproducer.
    The already accepted v0.1.3 replay was not rerun.

    3. What actually passed locally

    Gate Result
    vp run check:changed v0.1.4 Passed: format, lint, both Knip passes, GraphQL/unused-patch checks, 37 package typechecks, 72 test files / 764 passed / 13 skipped
    Native Mac packaged UI Real Electron window, fork identity and fresh isolated profile; no stock import or security bypass
    Mac client-only mode OFF + restart removed only the owned local backend; independent remote connection/history remained; ON + restart restored local and kept remote
    iOS Simulator New Debug client built, paired, displayed the shared history and delivered a real native permission answer
    Android emulator New Debug client did the same; first native permission answer came from Android
    Android standalone Release APK Debug-signed ARM64 development identity, embedded JavaScript, upstream OTA disabled; cold start and a fresh server message worked with Metro stopped
    Native Copilot One bounded GPT-6 Astra turn resumed the same native session from the owned v0.1.3 copy; two stdout-only commands, two first-attempt confirmed receipts, no new empty assistant messages
    Skills / clipboard / width / shortcut / search Cold selection/removal; actual runbooks/check.txt:1 clipboard; 710 → 1126 → 710 pixels; real new/existing dispatch at 600px; active search highlight on actual nested tool summary
    Independent reviewer No significant issues in corrected source and demonstrated local evidence; untested gates remain explicitly excluded

    The native turn ran on the isolated source backend, controlled by packaged
    desktop and native mobile clients. Packaged backend dependency/load checks and
    UI boot are separate evidence; the packaged profile's providers stayed disabled.
    The development server still reports the upstream source manifest's 0.1.3;
    its code is the pinned v0.1.4 candidate. Distribution builds use the recorded
    0.1.4-preview.20261029.1 version transform.

    The copied fixture had five completed runs and no pending work or schedules.
    Upstream migrations 070–072 ran; the next turn retained native session
    1d073f35-cac7-4a29-a9ea-090e4594599a. Android approved phase one, iOS phase two.
    The run remained active during the second approval, then completed with inbox 0.
    Three native assistant-step endings did not incorrectly end three user turns.

    Runtime/receipt evidence
    and local qualification scope.

    Visual evidence

    Names are masked or headers cropped where noted. Captures are actual clients,
    not static component markup. The local Replay provider used for keyboard checks
    does not make paid model calls.

    #30: old empty picker versus v0.1.4 cold selection and removal

    Old installed baseline:

    Old empty skills picker

    New packaged client, before any turn in the draft; irrelevant machine row cropped:

    Cold skill, selected skill and removed skill

    #31: actual clipboard value, not just the displayed link label

    Old installed baseline:

    Old copied reference

    v0.1.4: copied through the real context menu, asserted through the clipboard and
    pasted into the unsent composer. The crop excludes unrelated historical warnings.

    Correct copied and pasted reference

    #23 width and #18 narrow-window dispatch

    Comfortable and wide composer

    New and existing thread dispatch at 600 pixels

    Two persisted local Replay runs completed. New-draft Meta+Enter submits in the
    background and opens another draft; existing narrow composers need normal
    expansion/focus. Those caused initial harness assumptions to fail, not product
    failures. The separate optional plain-Enter scenario was not claimed implemented.

    Native Mac client-only OFF/ON and retained remote

    Reversible native client-only mode

    Real shared native approval on both mobile clients

    Headers cropped for privacy. These are native Simulator/Emulator clients, not
    mobile-sized browser views.

    Same real approval on iOS and Android

    Seen does not resolve an actionable approval

    Successful native turn and empty inbox

    Activity search and standalone Android without Metro

    Search 2/3: the active CSS highlight targets printf 'v014-phase-two\n' in the
    expanded nested activity, not merely the user's prompt.

    Actual activity search match

    Android Release cold-launched without Metro. A later CLI-created free Replay
    message arrived live, excluding a cached-history-only false pass:

    Standalone Android receives fresh data with Metro stopped

    Unedited 79-second receipt/lifecycle recording; supervised approval waits are
    included:

    v014-native-receipts.webm

    4. Native Copilot capability clarification

    These are integration limits, not claims that the SDK has no such APIs.
    The fork remains pinned to SDK 1.0.8 / CLI 1.0.75. Latest SDK observed is
    1.0.28, researched
    without silently upgrading.

    Capability Actual API versus current integration
    Manual compaction Experimental history.compact already exists in 1.0.8; automatic compaction is mapped, explicit manual invocation is not exposed here
    Native fork Experimental sessions.fork already exists in 1.0.8; T3 portable handoffs/forks are distinct from a native Copilot fork
    Rewind/rollback 1.0.8 has experimental conversation truncation; 1.0.28 adds rewind-point/preview/rewind operations including conversation-and-files and partial-failure outcomes
    Permission persistence SDK decisions include more than one-time approval. T3's current prompt deliberately offers Allow once / Deny, and waits for real native acknowledgement
    Investigative review guides No dedicated SDK review-guide endpoint; our structured text-generation runner is intentionally tool-free and does not perform checkout investigation
    Forced native replacement The adapter explicitly refuses v0.1.4's forced same-runtime replacement path rather than silently returning the old session

    $ and / still work. $ selects a project/provider skill; /model and
    skills in the slash menu were exercised. They are independent of permission
    prompts for the tools an agent subsequently invokes. This is not parity with
    every interactive CLI slash command.

    /plan is hidden by the preserved default-off client preference:
    Settings → Legacy → Plan mode. This is not a Copilot approval restriction;
    native plan execution itself was not newly qualified.

    An SDK upgrade should be a separate controlled change: 1.0.28 also changes runtime
    packaging to SDK platform packages and changes experimental method shapes.

    5. Tpatch outcome and retrospective

    The specific v0.1.3 baseline failure was deduplicated and reported as
    tesseracode/tesserapatch#26.
    The internal exact replay satisfies the source-reproduction requirement.

    The normal verifier is not all green: four of eleven current roots pass;
    seven retain recorded historical-anchor, parent/child-postimage or preserved
    malformed-ancestor blocks. Current invalid recipe schemas were actually fixed,
    not waved away. No generation manifest or success evidence was fabricated.

    Final per-root verifier records
    and retrospective with historical comparisons.

    Conclusion: durable intent/retirement/accounting improved, but capture, recipe
    and anchor friction recurred. Plain Git would probably have been mechanically
    easier for these ports, while needing an equivalent feature ledger. No timing
    benchmark was invented. The executed tool was 0.16.0; 0.17.0's notes were checked,
    but that newer binary was not benchmarked.

    Keep unrelated roots separate. Foundation compatibility and the notification
    watermark fix are natural candidates to fold into their respective owners during
    a controlled complete-root refresh; no unreviewed mega-patch or history rewrite
    was forced into this candidate.

    6. Artifacts and receiving hosts

    Build-only CI run 40928076911
    passed both targets on source 16d428db...: one of four approved attempts used
    per target, three remain
    .

    Target Artifact
    Linux x64 / Ubuntu / embedded WSL fork-preview-linux-x64
    Windows x64 fork-preview-windows-x64, installer only; 64 packaged files / 21 sidecar natives
    Mac arm64 Locally retained DMG/ZIP with real manifest and verified checksums; native UI exercised
    Android ARM64 Locally retained T3CodeDev-v014-source-16d428db8-android-arm64.apk, SHA-256 e27ea13bef29bb23132069e3782379bb147786b6d5d25b82b51394b989649838; debug certificate, not a Play Store release

    Pause-gated receiving-host runbook.
    Start with one host's read-only preflight, not a bulk install.

    Important: a fresh Windows preview profile starts Windows with WSL off, but a
    Windows profile override does not isolate WSL's fixed Linux
    ~/.t3-fork-preview. Existing fork installs/homes require an explicit migration
    decision or a genuinely separate test account/distro. Do not use updater,
    uninstaller or cache-deletion shortcuts to bypass that boundary.

    Remaining gates: receiving-host Windows menus/client-only/WSL and Ubuntu startup;
    physical-phone installation; physical iOS release/Intel Mac compatibility;
    cross-machine peer delegation; full off-screen long-plan scenario; real OS
    notifications/push. Computer use remains deferred. No full repository test suite,
    Rust test matrix or universal native test matrix was run.

    Implementation/verification: GPT-6 Astra in GitHub Copilot CLI.
    Specialized implementation, research and independent review: GPT-6.1 Sol in
    GitHub Copilot CLI.

  13. jdbencardinop commented on Oct 29, 2026

    @jdbencardinop
    Author

    Later checkpoint: physical Android installed and connected

    The approved in-place update on the Samsung Galaxy A54 (Android 16, ARM64) succeeded. The existing development app was updated from native version 1.2.0 to 2.2.0 without uninstalling or clearing data. The signing certificate and app UID were retained, and the installed APK matches the already-qualified candidate SHA-256 e27ea13bef29bb23132069e3782379bb147786b6d5d25b82b51394b989649838.

    Product source remains 16d428db823f17c18ec16a79e1ec12ae4ba795c1; this is new evidence, not another product build or a main/release promotion.

    The phone paired through the normal Add environment form to the isolated validation backend using USB forwarding. Its previous saved environment remains registered, although that environment was unreachable during this check and its compatibility is not qualified here.

    Demonstrated: standalone cold launch with Metro stopped and OTA updates disabled, saved pairing retained, existing fixture history loaded, and a fresh local Replay turn received after restart without another reload. Run ordinal 5 completed successfully with todo list fixture complete; its expanded prompt and completion are visible below. No new paid model turn was used.

    Open limitation: immediately after pairing, the list initially showed both fixture threads, then only the native thread with a working indicator despite completed authoritative runs. A cold restart restored both threads. The cause was not isolated, so initial-list freshness is not marked passed. Ordinal 4 was only observed after restart and is deliberately not counted as live-stream proof; ordinal 5 provides the post-restart live proof.

    This connection is USB-only and stops working when unplugged. It does not qualify LAN/VPN/relay access, notifications, or background delivery. Windows/WSL/Ubuntu runtime qualification and physical iPhone qualification remain separate.

    Physical Android: fresh post-restart local Replay prompt and completed reply, received without another reload

    The earlier reconciliation report and receiving-host runbook remain the baseline. This later checkpoint does not retroactively change their earlier emulator-only statements.

    An independent GPT-6.1 Sol reviewer inspected the new record, image, package preflight and runtime receipts, finding no significant inaccuracies or overclaims within that bounded scope. The unresolved initial-list behavior is not waived by that review.

    The structured physical-phone checkpoint is committed on reconcile/v0.1.4-fork. Product source is unchanged.

    Model: GPT-6 Astra. Harness: GitHub Copilot CLI.

  14. jdbencardinop commented on Oct 30, 2026

    @jdbencardinop
    Author

    v0.1.4 receiving-host qualification and recovery

    This is a qualification report, not a production deployment announcement.
    The tested runtime remains 16d428db823f17c18ec16a79e1ec12ae4ba795c1,
    version 0.1.4-preview.20261029.1, on upstream
    783581d461dc72cdd8f78fc8abb4ad536dfc4547.
    It supplements the earlier reconciliation report.
    Qualification and owned-test cleanup below are closed through 12:58 UTC.
    The separate read-only post-recovery observer completed its 14:30 UTC closeout.

    Source and tpatch accounting

    Two additional maintained roots were recorded and independently reviewed:

    • windows-preview-zip-artifact adds an optional ZIP workflow output while
      retaining NSIS as the default. No ZIP build was dispatched or qualified.
      Both Windows hosts instead verified and extracted the existing NSIS payload
      without running the installer.
    • linux-runtime-libatomic-prerequisite documents the Linux loader dependency
      and distinguishes a pristine image from an explicitly dependency-installed
      test variant. It does not install packages or change runtime behavior.

    The thirteen-root composition exactly reproduces tree
    194f437791ac3accb8dd0542fbe75b5378bc52b2, including file modes, outside
    administrative .tpatch metadata. Its recorded target is
    be4a0ae86808cbba5d23663a1e5d4fbe15493892.
    The latest documentation feature still encounters the known parent-footprint
    verification limitation tracked in tesseracode/tesserapatch#26; independent
    exact replay is the disclosed exception, not an all-green verifier claim.

    Only workflow and documentation files changed outside .tpatch after the
    tested runtime source. No replacement native build was needed. No additional
    CI attempt was used; the existing three remaining attempts per target were
    not consumed.

    Receiving-host evidence

    Gate Supported result Boundary
    Both Windows hosts Independently reviewed fresh-profile native startup, real Copilot approval/tool delivery and reversible client-only OFF/restart/ON Same-machine independent V2 backends; not production catalog migration or every cross-machine route
    Primary Windows cold continuation Same native session reference, actual native resume, new provider PID and Ctrl+Enter submission at 600 CSS pixels One supervised no-tools continuation; not every frame or every device
    First Ubuntu host Packaged native runtime and one supervised no-tools Copilot marker, 19 assertions Limited independent no-findings review; its attempted temporary cross-machine forward failed and was cleaned without repair
    Dedicated WSL pristine image Startup blocked by missing libatomic.so.1 Not passed
    Dedicated WSL dependency-installed variant Independently reviewed cold/warm startup, cache and identity reuse, both/WSL-only/both restarts, fresh CLI metadata and owned cleanup Nine images reviewed; no provider turn, continuous-process or startup-performance claim
    Dedicated WSL executable-mode recovery Same reviewer confirmed one rg execute-bit fault, product-managed cache recovery, successful repaired rg --version, and complete owned cleanup Three additional images reviewed; no in-place-repair, provider-turn or separate fresh native public-version response claim in this subgate
    Second Ubuntu host Independently reviewed scoped runtime/data/ownership successes: pinned load, one project and fresh identity retained across a cold restart, both backends and detached monitors stopped Initial overall result failed its auth-cleanup assertion; not a full PASS or browser/protected-wire-protocol qualification
    Physical Android follow-up In-place installation, pairing, retained environments after cold restart and a fresh live update were independently reviewed Initial list freshness remains unresolved and explicitly accepted as non-blocking

    Four logical paid product-test turns were reported: two on primary Windows,
    one on the other Windows host and one on the first Ubuntu host. This is not a
    billing, token or SDK-request count. No paid WSL turn or additional paid turn
    was needed for the later readiness work.

    Primary Windows search and skill selection/removal have additional UI
    observations. Resizing a viewport is not proof of the Appearance Chat width
    preference; that Windows preference gate remains unqualified.

    The second Ubuntu run first stopped on extractor-created directory modes that
    differed from the archive. Only the validated directory modes were corrected;
    all 4,741 entries were then verified before execution. This was a harness
    correction, not a packaged-runtime fix or the separate WSL executable-mode test.

    Its initial auth cleanup successfully revoked the first automatic startup
    grant but did not target a second startup grant. That grant subsequently
    expired without revocation. Two historical CLI-issued bearer rows were already
    revoked; there were zero active sessions, not zero total session rows. An
    overstrict total-row guard stopped the separately permitted offline cleanup
    before invocation. These failures remain recorded. No active pairing grant,
    active bearer session or reachable test backend remains, but expiry is not
    labeled revocation and the original overall assertion is not relabeled PASS.
    No product defect was established.

    The WSL mode test used only its dedicated test distro and inactive runtime
    cache. A verified cache-only backup preceded the single 0755 to 0644
    change. The normal product invalidated and restaged the verified cache;
    expected bytes, ownership and executable mode were restored. All 27 tracked
    guest processes exited, and independent checks confirmed released
    ports and preserved originals. Matching sampled inode numbers were not used
    to claim in-place repair. No manual rollback was needed.

    Actual shipped-data migration rehearsal

    A consistent, read-only snapshot of the original WSL database was exercised
    through the real candidate persistence/importer layers without launching a
    server, provider or workspace operation. One thread, five user/assistant
    messages and all thirteen auth rows were retained; source bytes were unchanged,
    and reopening imported zero additional messages.

    This does not preserve old native sessions, tool/activity/checkpoint history
    or prove encrypted-catalog credential usability. The first V1 continuation is
    intentionally a fresh native provider session with transcript handoff.

    The focused migration command was:

    vp test run apps/server/src/persistence/initializeV2Database.test.ts apps/server/src/orchestration-v2/legacy/LegacyV1ThreadImporter.test.ts apps/server/src/orchestration-v2/legacy/LegacyV1Cutover.integration.test.ts
    

    Result: two files passed and one failed; seven tests passed and one failed.
    The upstream synthetic cutover fixture uses a migration-41 ledger name that
    the fork guard rejects. The actual shipped ledger is canonical and passed
    the separate snapshot rehearsal. The guard was not weakened and the fixture
    failure was not hidden.

    vp test run apps/server/src/auth/SessionStore.test.ts -t 'keeps recorded scopes unchanged|keeps reusable dev auth local'
    

    Result: both selected tests passed; thirteen unselected tests were skipped.
    No repository-wide check was run for this overnight qualification.

    Preservation incident and recovery

    At 10:27 UTC, the primary machine's original Windows and managed-WSL backends
    were found absent without an authorized production stop. The exact exit time
    and cause remain unknown. Bounded log/event/helper inspection did not establish
    a crash, clean shutdown or responsible actor.

    Further mutations were frozen. Pre-start evidence was preserved privately.
    A conservative global process inspection encountered protected records for
    longstanding OS/session services; ordinary metadata identified them without
    changing permissions. The incomplete global census remained recorded as such.
    A narrowly scoped normal-owner check was accepted only for restoration, not
    for backup consistency or migration.

    Exactly one normal launch of the unchanged original application occurred at
    10:53 UTC. By 10:58 UTC, actual Windows and native WSL owners, original versions
    and saved identities were verified. Passive authenticated shell-snapshot
    evidence demonstrated protected application access. The second Windows host
    independently corroborated both existing public consumer routes responding
    again, without claiming its own encrypted-catalog or protected-data proof.

    This is recovery, not uninterrupted preservation, hydrated-chat verification
    or an explanation of the original exit. No installer, transport repair,
    credential extraction, profile reset or production migration was used.
    Raw incident logs may contain sensitive headers; they remain private and are
    not part of this public report.

    All three primary-owned test runtimes were subsequently stopped under a
    separate, narrowly scoped grant. Actual job membership excluded original
    owners and transports before either Windows stop. Linux cleanup separately
    observed the detached resource monitor exiting rather than assuming a
    process-group stop covered it. Original owners and retained routes stayed
    healthy before and after each stage.

    The requested Linux interruption produced backend exit 130 and outer-wrapper
    exit 1. Those values remain recorded, not relabeled as exit 0; actual stop
    receipts, stable process-exit events and released ports establish cleanup.
    Private profiles, journals and evidence were retained.

    The observer was then stopped at 14:30 UTC with its actual exit verified.
    All 178 completed samples, from 11:32:12 to 14:29:13 UTC, passed the sampled
    Windows owner and public Windows/WSL version/identity checks. Sample starts
    were at least sixty seconds apart. This is not continuous uptime, native WSL
    process ownership, protected-data or rendering proof. The original exit cause
    remains unknown; no further original-service or migration changes were made.

    Migration remains gated

    No complete stopped-profile backup, full application restore rehearsal,
    original encrypted catalog/credential rehearsal or production cutover was completed. V1 and V2
    clients and servers are incompatible; a rolling mixed cohort cannot be called
    globally healthy merely because its public endpoints respond.

    Windows and its desktop-managed WSL runtime form one upgrade/rollback boundary.
    Copied managed-SSH entries can bootstrap a remote runtime even with a saved
    bearer, so catalog transport classification must precede any clone launch.
    Any future cutover must preserve existing identities, auth/signing state,
    connections and tunnels, with explicit compatible-client and rollback plans.

    The original services remain the production owners. No PR, main promotion,
    release tag or computer-use experiment was performed.
    Before deployment, finish a connection-preserving catalog and backup/restore
    rehearsal in a separately approved maintenance window, followed by an explicitly
    coordinated compatible-client upgrade. None is implied by these isolated successes.

    Retrospective extension

    Tpatch again helped preserve complete intent, feature ownership and exact
    composition. It did not provide runtime isolation, discover the loader
    prerequisite or prove restoration. The parent-baseline limitation recurred
    with the new documentation child, despite an exact combined replay.

    Archive extraction/tool availability, WSL large-file allocation failure,
    message-correlation mistakes and process-inspection harness corrections are
    separate operational issues, not tpatch defects. The unexpected original-owner
    exit also remains unassigned rather than being attributed to tpatch or a test.
    In particular, archive file ownership need not equal the test shell's UID,
    active sessions are not total historical rows, and a public HTTP-ready response
    does not establish completion of later startup-auth issuance. Acceptance had
    to follow actual product behavior rather than these stronger proxy assumptions.

    The earlier conclusion still holds: stronger evidence and intent accounting,
    with recurring metadata overhead. Plain Git could simplify immediate port
    mechanics, but would still require the intent ledger, source/mode comparison,
    native qualification, migration rehearsal and preservation checks. No measured
    speedup, cost advantage or causal claim is available.

    The previously identified future folds remain Foundation compatibility into
    Foundation and completion watermarks into attention policy. The two new
    packaging children remain explicit; no parent recapture or unrelated
    consolidation was forced merely to silence verification warnings.

    Coordination: GPT-6 Astra in GitHub Copilot CLI. Receiving-host execution and
    independent reviews used GPT-6 Astra and GPT-6.1 Sol in GitHub Copilot CLI,
    with the scopes and limitations stated above.

  15. jdbencardinop commented on Oct 30, 2026

    @jdbencardinop
    Author

    v0.1.4 preview deployed to the six-environment cohort

    The two Windows installations, their two managed WSL backends and both Ubuntu
    services now run the tested 0.1.4-preview.20261029.1 runtime from
    16d428db823f17c18ec16a79e1ec12ae4ba795c1. This is a preview deployment,
    not a main-branch promotion or new release tag.

    Both participating Windows clients independently read fresh authenticated
    Providers data from all six environments. Original environment identities
    and existing saved connection names/endpoints were retained. No re-pair was
    needed for those read checks, and no new paid provider turn was run.

    Deployment record

    Times below are UTC on October 30.

    Boundary Activation and acceptance
    Primary Windows + managed WSL Normal installer launched the new desktop at 18:55:57; actual Windows/native WSL owners, pinned payload, original identities and protected local reads accepted by 19:01:31.
    First Ubuntu Existing service switched at 19:05:25; new owner/pin/protocol/original identity and protected data through the existing saved route verified at 19:06:23.
    Second Ubuntu Existing service switched at 19:13:50; actual new owner/pin/protocol/original identity and protected saved-route read verified at 19:16:39.
    Secondary Windows + managed WSL Following direct operator timing approval, ordinary shutdown drained at 19:24:40; one installer launched the new desktop at 19:28:28. Both local protected reads and exact ownership/payload/identity checks accepted by 19:41:33.

    The primary client's six-target read matrix completed by 19:36:40; the
    secondary's separate matrix completed by 19:47:26. Genuine normal UI evidence
    and runtime receipts remain private on the receiving hosts.

    The Windows installs used the existing fork identity/profile, not a third
    installation. Ubuntu changes were minimal overrides of the existing services,
    retaining host/port/home and unrelated transport definitions. Legacy databases,
    previous releases and private backups were retained. Native provider stores
    were not migrated or rewritten. No stock application was uninstalled.

    Backups and explicit limits

    The user accepted best-effort backups and did not require particular thread
    histories or native-session continuity to survive. No-stop captures covered all
    six environments, including individually consistent SQLite snapshots and
    opaque connection/identity/signing context. Both Windows Chromium captures
    were partial because of live locks/timeouts; failed partial databases are
    explicitly excluded from qualified restore candidates.

    Additional cheap closed critical context was preserved during actual cutovers.
    These are not full atomic OS/profile images or proof of complete rollback.
    The secondary's native recovery copy was verified separately from a retained
    Store-Python-cache copy with a documented access/lifecycle limitation.

    The previously unexplained original-owner exit remains unexplained. Generic
    Windows job membership was disclosed rather than treated as proof of a
    test-job lifetime; normal installed owners persisted after installer/helper
    exit. No OS, foreground, trust or security restriction was bypassed.

    Remaining permission work

    The new UI identifies old saved grants that lack newer fine-grained permissions.
    On the primary client, each of its four remote sessions was independently
    observed with:

    • orchestration:read
    • orchestration:operate
    • terminal:operate
    • relay:read

    The pinned ordinary thread dispatch/launch/stop authorization gate uses the
    retained orchestration:operate scope. This is a source/permission check, not
    an additional paid agent-turn test. Provider/settings controls and other newer
    UI actions remain restricted under the old grants.

    The user explicitly approved normal in-place refresh to the current full
    standard set of sixteen permissions, including access management, relay write
    and environment maintenance. Two conditional first-target refreshes were
    reserved, requiring direct local consent and preservation of IDs/names/routes.
    No completed refresh or updated effective-scope receipt reached the
    coordinator before the 20:20 UTC cutoff.
    Do not assume the restrictions are
    resolved or that no partial auth action occurred; obtain the final local
    receipts before any further attempt.

    No new work was started after the cutoff. The coordinator receiver exited;
    separate final remote relay/receiver exit confirmations were not received.
    Healthy installed services were not targeted for shutdown.

    Separate requested feature

    copilot-fusion-model-selection
    was registered in requested state on its own branch. The current native
    adapter dynamically passes SDK model IDs, but has no Fusion-tier plumbing;
    full support remains unqualified. Official Fusion documentation and public
    CLI compatibility cautions are recorded in the request.

    No Fusion implementation, SDK upgrade or model change was mixed into this
    deployment. The thirteen-root replay and tested runtime identity remain the
    same as in the qualification report.

    Coordination: GPT-6 Astra in GitHub Copilot CLI. Receiving-host execution and
    qualification evidence: GPT-6 Astra and GPT-6.1 Sol in GitHub Copilot CLI,
    within the stated scopes.

  16. jdbencardinop commented on Oct 31, 2026

    @jdbencardinop
    Author

    October 31 inventory: fleet rollout, mobile compatibility and backlog

    Live changes are paused. This is a read-only inventory and next-step plan,
    not approval for another migration, pairing, install or network change.

    Rollout state

    There are eight known T3 environments: two Macs, two Windows environments,
    their two WSL environments, and two Ubuntu services. Six were migrated to
    0.1.4-preview.20261029.1, source
    16d428db823f17c18ec16a79e1ec12ae4ba795c1.

    Separately, the two Windows clients have eight saved remote connection entries.
    Seven now have actual full-current-sixteen-permission, authenticated-read
    and preserved-identity/name/route checkpoints. All four primary-client entries
    are complete. The remaining entry is the secondary Windows client's connection
    to the primary managed WSL environment; its backend is already migrated.

    The final receiving-view confirmation arrived after the eight-hour window
    expired. Dispatch of its next check was refused; no P4 issuance or exchange was
    reported, and its prepared command was not released. Resume only under fresh
    explicit authorization; the old guarded command has expired.

    Both workers reported actual coordination-helper completion, and the primary's
    receipt was retrieved privately. Exact exit timestamps were not recorded, so
    on-time helper exits and report deadlines are not claimed. No production
    process was targeted in closeout. Earlier transient reconnect observations and
    best-effort backup limitations remain qualified, not silently marked fixed.

    Environment group Last proven version / remaining migration
    Two Windows, two WSL, two Ubuntu Migrated v0.1.4 preview; one selected client authorization refresh remains.
    Current arm64 Mac Fresh public descriptor still reports 0.0.42-preview.20261001.1. Production upgrade remains pending.
    Older Intel Mac Fresh NetBird descriptor still reports 0.0.42-preview.20261003.2, with its original identity. Controlled source-built V2 migration remains pending.

    The published reconciliation tip is 5de10d464685e7e579883c4ac4fc8350a39c012f.
    No main promotion, new release tag or PR is implied.

    Mobile: signing renewal was not a V2 upgrade

    Client Last verified installation Current conclusion
    iPhone T3 Code Dev 1.2.0 / build 1, legacy V1; October 29 re-sign preserved the working code/resources and app identity/data. Not upgraded to v0.1.4/V2. Recorded profile expiry is November 5 06:08 UTC / November 4 10:08 PM Pacific.
    Android T3 Code Dev 2.2.0 / versionCode 1, source 16d428db8; standalone embedded JavaScript, OTA disabled, development identity/debug certificate. Last verified physical installation matches the tested v0.1.4/V2 client. USB pairing, cold reconnect and a fresh server message were qualified.

    Neither physical phone was currently available for a fresh installed-package
    query. The iPhone's CoreDevice connection is disconnected; cached boot/OS data
    is not a live app inventory. The existing ADB server listed no attached Android.
    No device was woken, launched, installed, paired or newly connected.

    Android's initial stale-list observation remains unresolved and accepted as
    non-blocking. Android network setup is explicitly out of this plan.

    Best first iPhone target

    Use the older Intel Mac with the existing V1 iPhone app first. Its known
    private NetBird endpoint returned HTTP200 with the original identity during
    this audit, and its V1 release matches the phone's last verified client.
    This is not a claim that the Intel Mac is upgraded to V2 or that a phone
    connection has already succeeded.

    The existing server/LaunchAgent and saved phone route avoid a new exposure
    mechanism. It is a laptop: keep it awake for the test rather than assuming
    always-on availability. The private operator report retains the exact endpoint.

    Morning sequence:

    1. Confirm the actual iPhone app opens and matches the expected legacy build.
    2. Connect its existing NetBird profile and confirm the phone-to-host policy.
    3. Open the existing old-Mac entry in T3 and use normal reconnect; do not
      delete/re-add or re-pair merely because it says reconnecting.
    4. Verify transport, then authenticated access to existing projects/history
      from that exact environment. Public HTTP200 alone is not authentication.
    5. Only if authorization genuinely needs renewal, obtain approval for a fresh
      phone-specific grant with agreed compatible scopes. Do not reuse Windows
      codes or mint a token while the user is asleep.
    6. With device-use approval, record secret-free connection/reopen evidence and
      a fresh protected response. No provider turn is necessary for this test.

    Generic private-IP pairing already works; #19's optional NetBird integration is
    not a prerequisite. Windows localhost forwards are not phone addresses, and
    one phone connection does not inherit the desktop's other connections.
    NetBird does not provide T3 mobile push delivery.

    To use the six migrated V2 servers, the iPhone first needs a qualified
    physical-device V2 native build, preserving the personal bundle/team/keychain
    identity for an approved in-place upgrade or explicitly choosing a separate
    candidate. Re-signing the old Expo57 binary or loading newer JavaScript alone
    is insufficient. Coordinate the two Mac migrations with that compatibility
    transition so the working V1 phone path is not removed prematurely.

    The primary Windows host is an existing NetBird anchor, but its known T3 port
    timed out from this Mac and earlier UI showed network access off. A V2 phone
    path would require approved private exposure/access policy, not an assumed
    reachable localhost URL or a backend-outage diagnosis. Do not use public
    netbird expose for this private connection.

    Current GitHub backlog

    Snapshot: 24 open issues, including umbrella #1. Older issue bodies/labels
    are not always updated with the later v0.1.4 evidence; no issues were closed
    or relabeled by this inventory.

    Issue Topic Inventory disposition
    #1 Fork workspace roadmap Canonical tracker; reconcile older body with current rollout comments.
    #10 TWS secondary grouping Ready after #9; still a later presentation slice.
    #11 Manual tag storage Ready after #2; prerequisite for tag surfaces.
    #12 Web/desktop tags Blocked on #11.
    #13 Native mobile tags Blocked on #11.
    #14 Derived TWS tags Needs #11; #9 is complete.
    #15 Mobile attention/optional relay Foreground paths demonstrated; physical iPhone V2/background delivery remain separate coverage.
    #16 Provider capability matrix Broader native/SDK/adapter/client comparison still queued.
    #17 Native preview packaging Current preview delivery and scoped Windows/WSL qualification progressed beyond the stale blocked body; review evidence/closeout rather than rebuild blindly.
    #18 Narrow-window send override Modified shortcuts demonstrated; separate persisted plain-Enter override remains.
    #19 Optional NetBird integration Requested evaluation; manual private connectivity does not depend on implementing it.
    #21 Context tiers/compaction Requested; retain effective-runtime versus catalog-budget distinction.
    #22 Windows menu/title-bar dragging Specific native menu/drag/DPI cases still need proof; generic app qualification is not that proof.
    #23 Chat widths Upstream controls adopted and Comfortable/Wide reversal measured; broader native coverage/closeout remains qualified.
    #24 Copilot current-work descriptions Requested; native intent event consumption, not extra polling/model calls.
    #25 Self-hosted/optional notifications Delivery architecture/rollout evaluation remains; connectivity is not background push.
    #26 Copilot quota/session usage GitHub-only backlog; tpatch registration explicitly deferred.
    #27 Bottom settled-turn fold control Requested; existing fold behavior does not implement the specified affordance.
    #28 Client-only mode/ownership Upstream reuse plus scoped reversible-mode qualification exist; update stale premise/evidence, avoid duplicate implementation.
    #29 Herdr read-only session access Discovery/provenance/read-only first; no implicit foreign-session takeover.
    #30 Copilot skills picker Fixed in native V2 workspace-scoped discovery; original host-specific edges and full slash-command parity are not universally qualified.
    #31 Relative-path copying Upstream basename correction verified on actual clipboard; platform edges and ambiguous agent-written paths remain separate.
    #32 Environment display names Evaluate aliases/advertised labels without hostname, identity or credential changes; no tpatch registration yet.
    #33 Copilot CLI session import Decide history/new-conversation/stopped-resume/live-owner/uncertain-owner semantics before implementation.

    Also retained: copilot-fusion-model-selection, requested only on its own
    published feature branch, not deployed. Dynamic model aliases do not prove
    Fusion tier support. No SDK upgrade or Fusion turn was mixed into this work.

    Closed #2-#9 and #20 cover earlier reconciliation, attention, TWS context and
    truthful Copilot lifecycle work; do not recreate those implementations.

    Tpatch and qualification follow-ups

    The last proven v0.1.4 source/file-mode replay uses 13 selected maintained
    roots
    , not every historical ledger record. Today's read-only tpatch 0.16.0
    dashboard contains 50 entries, including historical and pre-implementation work.
    Legacy background-task/custom-agent/resource/tool-detail/skill-UI requests and
    the old system-generated-turns implementing record need upstream V2 re-audit,
    not automatic replay.

    The status read reports one historical metadata warning:
    satisfied_by on copilot-package-payload-pruning -> windows-portable-packaging-tests while that parent is blocked. No repair ran,
    and it is not asserted to be the same issue as tesseracode/tesserapatch#26.
    The accepted exact-replay exception still requires preserving failed verifier
    evidence and behavioral/platform qualification. No fresh all-green verifier
    claim is made.

    Remaining rollout work is therefore: the final client permission entry,
    physical iPhone V2, the two production Mac upgrades, and explicitly approved
    promotion/release decisions. Optional ZIP delivery and unqualified platform
    corners remain labeled rather than hidden. Larger feature work and computer
    use remain deferred.

    Prior evidence

    Inventory and plan: GPT-6 Astra in GitHub Copilot CLI. No new runtime/mobile
    installation, pairing, VPN/firewall change, provider turn or feature
    implementation was performed for this inventory.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    fork-backlogMaintainer backlog for the multi-machine fork

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions