From e555c6ed9404d71f3525d9c3c7dff53d1a059677 Mon Sep 17 00:00:00 2001 From: Wolfgang Schoenberger <221313372+wolfiesch@users.noreply.github.com> Date: Mon, 20 Jul 2026 02:29:04 -0700 Subject: [PATCH 1/2] chore(runtime): pin OMP appserver 9 --- README.md | 4 +-- apps/desktop/test/bundled-runtime.test.ts | 6 ++--- apps/desktop/test/doctor.test.ts | 4 +-- apps/site/src/release.ts | 4 +-- apps/site/test/release.test.ts | 6 ++--- compat/omp-app-matrix.json | 30 ++++++++++++---------- docs/CURRENT_RELEASE_NOTES.md | 2 +- docs/OMP_BRIDGE.md | 2 +- docs/RELEASE_GATE.md | 6 ++--- docs/adr/013-t4-host-ownership.md | 8 +++--- docs/adr/014-transcript-tail-pagination.md | 6 ++--- scripts/check-release-consistency.test.mjs | 2 +- 12 files changed, 42 insertions(+), 38 deletions(-) diff --git a/README.md b/README.md index 03d458f..1117bca 100644 --- a/README.md +++ b/README.md @@ -10,9 +10,9 @@ T4 Code is a free, open-source (MIT) desktop app for [Oh My Pi](https://github.c T4 Code needs an OMP build with desktop appserver support. For v0.1.30, use the public integration build below. -T4 Code v0.1.30 was verified with OMP 17.0.5 built from [`09835b92`](https://github.com/lyc-aon/oh-my-pi/commit/09835b929cd028e7e3f800b3e4203e3d1f37931c), tagged [`t4code-17.0.5-appserver-8`](https://github.com/lyc-aon/oh-my-pi/tree/t4code-17.0.5-appserver-8). That public integration is based on the official upstream [`v17.0.5`](https://github.com/can1357/oh-my-pi/tree/v17.0.5) tag at [`9fd6e971`](https://github.com/can1357/oh-my-pi/commit/9fd6e97113f5ed3a847e66d346970efdf8afcad9). It recovers safely from a crashed backend whose old process ID still appears alive, while preserving a responsive owner. It also includes privacy-safe project reveal, fast lazy session indexing, cross-session attention and transcript search, the negotiated browser-preview command surface, redacted Codex transport diagnostics, the versioned Agent View lifecycle contract, session-owned cancellation, lock-aware session observation, complete transcript reconciliation, the cooperative `/continue-in-t4` handoff, and deterministic session ordering. Fork CI verifies the exact upstream base, ancestry, release gates, and published binaries. The official upstream v17.0.5 tag has no `appserver` command, so it cannot host T4 Code. The verified runtime is a normal build from the public `lyc-aon/oh-my-pi` source. T4 Code vendors `@oh-my-pi/app-wire` 0.6.2 from integration commit [`04229b1f`](https://github.com/lyc-aon/oh-my-pi/commit/04229b1f46547ac7c0617e55a993496ec9725f46), source tree `8400a3af618e8af11cccf6b20aadcf3a22baf9a1`. +T4 Code v0.1.30 was verified with OMP 17.0.5 built from [`073506e5`](https://github.com/lyc-aon/oh-my-pi/commit/073506e5ca278d08037beffd9ee78964f659ef12), tagged [`t4code-17.0.5-appserver-9`](https://github.com/lyc-aon/oh-my-pi/tree/t4code-17.0.5-appserver-9). That public integration is based on the official upstream [`v17.0.5`](https://github.com/can1357/oh-my-pi/tree/v17.0.5) tag at [`9fd6e971`](https://github.com/can1357/oh-my-pi/commit/9fd6e97113f5ed3a847e66d346970efdf8afcad9). It integrates the T4-owned host packages and adds bounded newest-first transcript paging so mobile clients can show the recent conversation before loading older history. It also recovers safely from a crashed backend whose old process ID still appears alive, while preserving a responsive owner. It includes privacy-safe project reveal, fast lazy session indexing, cross-session attention and transcript search, the negotiated browser-preview command surface, redacted Codex transport diagnostics, the versioned Agent View lifecycle contract, session-owned cancellation, lock-aware session observation, complete transcript reconciliation, the cooperative `/continue-in-t4` handoff, and deterministic session ordering. Fork CI verifies the exact upstream base, ancestry, release gates, and published binaries. The official upstream v17.0.5 tag has no `appserver` command, so it cannot host T4 Code. The verified runtime is a normal build from the public `lyc-aon/oh-my-pi` source. T4 Code vendors `@oh-my-pi/app-wire` 0.6.2 from integration commit [`04229b1f`](https://github.com/lyc-aon/oh-my-pi/commit/04229b1f46547ac7c0617e55a993496ec9725f46), source tree `8400a3af618e8af11cccf6b20aadcf3a22baf9a1`. -The development tree now owns the protocol source and generic host service in `@t4-code/host-wire` and `@t4-code/host-service`. The frozen `@oh-my-pi/app-wire` 0.7.0 tarball remains only as a compatibility snapshot for the current OMP bridge. OMP still owns session files, locks, agent execution, and takeover decisions. The verified runtime continues to carry the legacy embedded host copy until a thin bridge release replaces it, so ordinary upstream OMP is not yet compatible. +The development tree owns the protocol source and generic host service in `@t4-code/host-wire` and `@t4-code/host-service`. The frozen `@oh-my-pi/app-wire` 0.7.0 tarball remains only as compatibility evidence. The verified OMP runtime now launches checksum-pinned T4 host artifacts through thin compatibility exports, while OMP still owns session files, locks, agent execution, and takeover decisions. Ordinary upstream OMP is not yet compatible because it does not ship the appserver launcher or authority adapter. | Platform | Arch | Package | | -------- | --------------------- | ----------------------------------------- | diff --git a/apps/desktop/test/bundled-runtime.test.ts b/apps/desktop/test/bundled-runtime.test.ts index c3ec0fb..57e5f1a 100644 --- a/apps/desktop/test/bundled-runtime.test.ts +++ b/apps/desktop/test/bundled-runtime.test.ts @@ -16,7 +16,7 @@ describe("bundled OMP runtime", () => { const sha256 = createHash("sha256").update(bytes).digest("hex"); await writeFile(join(runtimeRoot, "omp"), bytes); await writeFile(join(runtimeRoot, "manifest.json"), JSON.stringify({ - version: 1, tag: "t4code-17.0.5-appserver-8", platform: "darwin", arch: "arm64", + version: 1, tag: "t4code-17.0.5-appserver-9", platform: "darwin", arch: "arm64", executable: "omp", size: bytes.length, sha256, })); @@ -35,7 +35,7 @@ describe("bundled OMP runtime", () => { await mkdir(runtimeRoot, { recursive: true }); await writeFile(join(runtimeRoot, "omp"), "wrong"); await writeFile(join(runtimeRoot, "manifest.json"), JSON.stringify({ - version: 1, tag: "t4code-17.0.5-appserver-8", platform: "darwin", arch: "arm64", + version: 1, tag: "t4code-17.0.5-appserver-9", platform: "darwin", arch: "arm64", executable: "omp", size: 5, sha256: "0".repeat(64), })); @@ -58,7 +58,7 @@ describe("bundled OMP runtime", () => { await writeFile(join(runtimeRoot, "omp"), signedBytes); await writeFile(join(runtimeRoot, "manifest.json"), JSON.stringify({ version: 1, - tag: "t4code-17.0.5-appserver-8", + tag: "t4code-17.0.5-appserver-9", platform: "darwin", arch: "arm64", executable: "omp", diff --git a/apps/desktop/test/doctor.test.ts b/apps/desktop/test/doctor.test.ts index 6a71151..308de7f 100644 --- a/apps/desktop/test/doctor.test.ts +++ b/apps/desktop/test/doctor.test.ts @@ -41,9 +41,9 @@ describe("T4 setup doctor", () => { const source = await readSourceContract(); expect(source.ompVersion).toBe("17.0.5"); - expect(source.ompTag).toBe("t4code-17.0.5-appserver-8"); + expect(source.ompTag).toBe("t4code-17.0.5-appserver-9"); expect(source.ompUrl).toBe( - "https://github.com/lyc-aon/oh-my-pi/tree/t4code-17.0.5-appserver-8", + "https://github.com/lyc-aon/oh-my-pi/tree/t4code-17.0.5-appserver-9", ); }); diff --git a/apps/site/src/release.ts b/apps/site/src/release.ts index cadce8b..dc5edb4 100644 --- a/apps/site/src/release.ts +++ b/apps/site/src/release.ts @@ -6,8 +6,8 @@ export const DOCS_URL = `${SITE_URL}/docs`; export const REPO_URL = "https://github.com/LycaonLLC/t4-code"; export const OMP_URL = "https://github.com/can1357/oh-my-pi"; export const OMP_RUNTIME_VERSION = "17.0.5"; -export const OMP_RUNTIME_COMMIT = "09835b929cd028e7e3f800b3e4203e3d1f37931c"; -export const OMP_RUNTIME_TAG = "t4code-17.0.5-appserver-8"; +export const OMP_RUNTIME_COMMIT = "073506e5ca278d08037beffd9ee78964f659ef12"; +export const OMP_RUNTIME_TAG = "t4code-17.0.5-appserver-9"; export const OMP_RUNTIME_URL = `https://github.com/lyc-aon/oh-my-pi/tree/${OMP_RUNTIME_TAG}`; export const OMP_UPSTREAM_TAG = "v17.0.5"; export const OMP_UPSTREAM_COMMIT = "9fd6e97113f5ed3a847e66d346970efdf8afcad9"; diff --git a/apps/site/test/release.test.ts b/apps/site/test/release.test.ts index 71cab20..349dacc 100644 --- a/apps/site/test/release.test.ts +++ b/apps/site/test/release.test.ts @@ -61,10 +61,10 @@ describe("release assets", () => { describe("OMP integration contract", () => { it("pins the verified runtime tag, commit, and app-wire package", () => { - expect(OMP_RUNTIME_TAG).toBe("t4code-17.0.5-appserver-8"); - expect(OMP_RUNTIME_COMMIT).toBe("09835b929cd028e7e3f800b3e4203e3d1f37931c"); + expect(OMP_RUNTIME_TAG).toBe("t4code-17.0.5-appserver-9"); + expect(OMP_RUNTIME_COMMIT).toBe("073506e5ca278d08037beffd9ee78964f659ef12"); expect(OMP_RUNTIME_URL).toBe( - "https://github.com/lyc-aon/oh-my-pi/tree/t4code-17.0.5-appserver-8", + "https://github.com/lyc-aon/oh-my-pi/tree/t4code-17.0.5-appserver-9", ); expect(OMP_UPSTREAM_TAG).toBe("v17.0.5"); expect(OMP_UPSTREAM_COMMIT).toBe("9fd6e97113f5ed3a847e66d346970efdf8afcad9"); diff --git a/compat/omp-app-matrix.json b/compat/omp-app-matrix.json index 68e4471..0ad99ee 100644 --- a/compat/omp-app-matrix.json +++ b/compat/omp-app-matrix.json @@ -21,14 +21,14 @@ "package": "omp", "version": "17.0.5", "sourceRepository": "https://github.com/lyc-aon/oh-my-pi", - "sourceCommit": "09835b929cd028e7e3f800b3e4203e3d1f37931c", - "sourceUrl": "https://github.com/lyc-aon/oh-my-pi/commit/09835b929cd028e7e3f800b3e4203e3d1f37931c", - "sourceTag": "t4code-17.0.5-appserver-8", + "sourceCommit": "073506e5ca278d08037beffd9ee78964f659ef12", + "sourceUrl": "https://github.com/lyc-aon/oh-my-pi/commit/073506e5ca278d08037beffd9ee78964f659ef12", + "sourceTag": "t4code-17.0.5-appserver-9", "artifacts": { "darwin-arm64": { "name": "omp-darwin-arm64", - "size": 120777424, - "sha256": "3ecb5f40be627f7f0f15035822017f8e2c8afaa4a46978f0874a6be8acb3f2fa" + "size": 120876496, + "sha256": "48138ec0c0329d76d4daa4ddc5ffaf32051c26d8e1ad1898322243d16aac2d5d" } }, "upstreamRepository": "https://github.com/can1357/oh-my-pi", @@ -97,7 +97,9 @@ "hardened-preview-frame-decoding", "complete-preview-command-surface", "privacy-safe-local-project-reveal", - "stale-appserver-owner-recovery" + "stale-appserver-owner-recovery", + "t4-owned-host-package-integration", + "bounded-transcript-tail-paging" ], "upstreamTagContainsIntegrationPatches": false }, @@ -105,14 +107,14 @@ "package": "omp", "version": "17.0.5", "sourceRepository": "https://github.com/lyc-aon/oh-my-pi", - "sourceCommit": "09835b929cd028e7e3f800b3e4203e3d1f37931c", - "sourceUrl": "https://github.com/lyc-aon/oh-my-pi/commit/09835b929cd028e7e3f800b3e4203e3d1f37931c", - "sourceTag": "t4code-17.0.5-appserver-8", + "sourceCommit": "073506e5ca278d08037beffd9ee78964f659ef12", + "sourceUrl": "https://github.com/lyc-aon/oh-my-pi/commit/073506e5ca278d08037beffd9ee78964f659ef12", + "sourceTag": "t4code-17.0.5-appserver-9", "artifacts": { "darwin-arm64": { "name": "omp-darwin-arm64", - "size": 120777424, - "sha256": "3ecb5f40be627f7f0f15035822017f8e2c8afaa4a46978f0874a6be8acb3f2fa" + "size": 120876496, + "sha256": "48138ec0c0329d76d4daa4ddc5ffaf32051c26d8e1ad1898322243d16aac2d5d" } }, "upstreamRepository": "https://github.com/can1357/oh-my-pi", @@ -181,7 +183,9 @@ "hardened-preview-frame-decoding", "complete-preview-command-surface", "privacy-safe-local-project-reveal", - "stale-appserver-owner-recovery" + "stale-appserver-owner-recovery", + "t4-owned-host-package-integration", + "bounded-transcript-tail-paging" ], "upstreamTagContainsIntegrationPatches": false }, @@ -197,7 +201,7 @@ "packages/host-service" ], "runtimeAuthority": "omp", - "deploymentState": "source-owned-legacy-runtime-bridge", + "deploymentState": "source-owned-artifact-runtime-bridge", "migrationInputs": { "repository": "https://github.com/lyc-aon/oh-my-pi", "baseCommit": "09835b929cd028e7e3f800b3e4203e3d1f37931c", diff --git a/docs/CURRENT_RELEASE_NOTES.md b/docs/CURRENT_RELEASE_NOTES.md index d169304..d255b75 100644 --- a/docs/CURRENT_RELEASE_NOTES.md +++ b/docs/CURRENT_RELEASE_NOTES.md @@ -28,7 +28,7 @@ Session-linked Host Browser Previews continue to open in their dedicated workspa T4 Code v0.1.30 vendors app-wire 0.6.2 from integration commit [04229b1f](https://github.com/lyc-aon/oh-my-pi/commit/04229b1f46547ac7c0617e55a993496ec9725f46), source tree `8400a3af618e8af11cccf6b20aadcf3a22baf9a1`. The client contract remains `omp-app/1`. -The verified OMP 17.0.5 runtime is built from commit [09835b92](https://github.com/lyc-aon/oh-my-pi/commit/09835b929cd028e7e3f800b3e4203e3d1f37931c) and tagged [t4code-17.0.5-appserver-8](https://github.com/lyc-aon/oh-my-pi/tree/t4code-17.0.5-appserver-8). It adds stale-owner recovery to the existing appserver capabilities, including privacy-safe local project reveal, lazy session indexing, cross-session attention and transcript search, and the negotiated browser-preview command surface. Unsupported optional capabilities remain hidden when the host does not advertise them. +The verified OMP 17.0.5 runtime is built from commit [073506e5](https://github.com/lyc-aon/oh-my-pi/commit/073506e5ca278d08037beffd9ee78964f659ef12) and tagged [t4code-17.0.5-appserver-9](https://github.com/lyc-aon/oh-my-pi/tree/t4code-17.0.5-appserver-9). It integrates the T4-owned host packages and adds bounded newest-first transcript paging for fast mobile session opens. It preserves stale-owner recovery, privacy-safe local project reveal, lazy session indexing, cross-session attention and transcript search, and the negotiated browser-preview command surface. Unsupported optional capabilities remain hidden when the host does not advertise them. The integration is based on the official upstream [v17.0.5 tag](https://github.com/can1357/oh-my-pi/tree/v17.0.5), commit [9fd6e971](https://github.com/can1357/oh-my-pi/commit/9fd6e97113f5ed3a847e66d346970efdf8afcad9). Official upstream OMP v17.0.5 has no `appserver` command and cannot host T4 Code. diff --git a/docs/OMP_BRIDGE.md b/docs/OMP_BRIDGE.md index 4572940..925ccf1 100644 --- a/docs/OMP_BRIDGE.md +++ b/docs/OMP_BRIDGE.md @@ -34,4 +34,4 @@ The bridge must fail closed when an operation is unavailable or ownership is unc ## Migration state -The source has moved, but the currently verified OMP integration binary still embeds the legacy host implementation. Until the thin OMP adapter consumes the T4-owned packages, T4 keeps the exact runtime tag and hash in the compatibility matrix. This is a compatibility transition, not a claim that the fork has already disappeared. +The verified OMP integration now consumes checksum-pinned T4 host artifacts through thin compatibility exports. The duplicated generic host and wire implementation has been removed from the fork; OMP retains the launcher and its private authority adapter. T4 keeps the exact runtime tag, source commit, artifact size, and hash in the compatibility matrix. Ordinary upstream OMP is still not compatible because it does not ship that launcher or adapter. diff --git a/docs/RELEASE_GATE.md b/docs/RELEASE_GATE.md index 03ba438..81dbb58 100644 --- a/docs/RELEASE_GATE.md +++ b/docs/RELEASE_GATE.md @@ -22,7 +22,7 @@ Every release must pass the layers below. Destructive lifecycle checks use a dis - Use real CDP touch input at 320 pixels for model-list drag scrolling and selection. Check Send and session-management control reachability at 320, 360, and 390 pixels, including a short 390 x 500 viewport. - Open and close the session rail, create a session, reach the Send control, drag-scroll the model list, and select its last available model. -## Legacy bridge continuity proof +## OMP bridge continuity proof Run the deterministic compatibility gate from the T4 repository root with Node 24.13.1 and the pinned Lycaon OMP source: @@ -30,11 +30,11 @@ Run the deterministic compatibility gate from the T4 repository root with Node 2 T4_OMP_SOURCE_DIR=/path/to/lycaon-oh-my-pi pnpm test:legacy-bridge-continuity ``` -The gate intentionally launches the legacy OMP appserver from the pinned authority source, plus a real OMP TUI and multiple production T4 clients. It proves client compatibility across bounded transcript loading, live ownership refusal, concurrent profile isolation, reconnect after an in-flight transport loss, appserver restart recovery, transcript search/read-around, stale-revision rejection, recovered control, and cleanup. It does not claim that `@t4-code/host-service` is deployed; that requires the future thin OMP launcher and authority adapter. +The gate launches the OMP appserver from the pinned authority source, plus a real OMP TUI and multiple production T4 clients. Its historical command name still says `legacy-bridge`, but the verified runtime now launches checksum-pinned T4 host artifacts through thin compatibility exports. The gate proves client compatibility across bounded transcript loading, live ownership refusal, concurrent profile isolation, reconnect after an in-flight transport loss, appserver restart recovery, transcript search/read-around, stale-revision rejection, recovered control, and cleanup. CI resolves the exact OMP authority commit from `provenance/omp-host-migration.json`, checks out the exact T4 pull-request head, runs this gate, and attaches the evidence directory to that commit's check run. -Each successful run writes machine-readable evidence under `artifacts/legacy-bridge-continuity//`: `report.json`, sanitized `wire-events.ndjson`, `failure-matrix.json`, `cleanup-status.json`, and an executable `rollback.sh`. The report names the legacy host implementation, records both source commits and dirty-state fingerprints, and captures bounded snapshot sizes, failure codes, delivered cursor integrity, profile overlap, restart persistence, search/context results, and cleanup state. These artifacts are local and ignored by Git. +Each successful run writes machine-readable evidence under the historical `artifacts/legacy-bridge-continuity//` path: `report.json`, sanitized `wire-events.ndjson`, `failure-matrix.json`, `cleanup-status.json`, and an executable `rollback.sh`. The report names the host implementation, records both source commits and dirty-state fingerprints, and captures bounded snapshot sizes, failure codes, delivered cursor integrity, profile overlap, restart persistence, search/context results, and cleanup state. These artifacts are local and ignored by Git. For a manual failure investigation, rerun with `T4_KEEP_CONTINUITY_SANDBOX=1`. The failed run retains its disposable profile and writes `report.json` plus sanitized `wire-events.ndjson`; successful runs also include `rollback.sh`, which documents the authenticated cleanup request for an explicitly test-mode appserver. Never point the gate or rollback helper at a normal OMP profile. diff --git a/docs/adr/013-t4-host-ownership.md b/docs/adr/013-t4-host-ownership.md index 5c7a4bf..890d031 100644 --- a/docs/adr/013-t4-host-ownership.md +++ b/docs/adr/013-t4-host-ownership.md @@ -5,7 +5,7 @@ - Decision: T4 owns the generic host in `packages/host-service` and its dependency-free wire schema in `packages/host-wire`. `@t4-code/protocol` consumes the workspace-owned wire source. The current `omp-app/1` name stays unchanged during migration so released clients and the legacy OMP bridge remain compatible. - OMP boundary: OMP remains authoritative for session persistence, session locks, agent workers, runtime configuration, credentials, and takeover. The T4 host consumes a structural JSON RPC contract in `omp-rpc-contract.ts`; it does not import `packages/coding-agent/src/**`. The migrated source still includes a bounded OMP JSONL compatibility projector for the current bridge. It is tested against exact OMP fixtures and may read state, but it is not allowed to mutate OMP authority or guess ownership. - Runtime adapters: backend-neutral ACP adapters and Git workspace lifecycle belong to the T4 host. They report explicit availability and never silently fall back to another executable. An OMP adapter may offer the complete first-party experience while other adapters expose only the capabilities they can support honestly. -- Transition: the verified OMP integration binary still embeds the legacy copy of the host while the thin bridge is prepared. T4 therefore continues to publish exact runtime provenance and does not claim that ordinary upstream OMP is compatible yet. The frozen `@oh-my-pi/app-wire` tarball remains as bridge evidence, not as T4's active protocol dependency. The compatibility projector can be removed only after OMP exposes an equally bounded public catalog and event bridge. -- Fork reduction: the next OMP integration change should replace its generic appserver and app-wire implementation with the T4-owned packages, leaving a small launcher and OMP authority adapter. General OMP fixes should continue upstream as independent changes. -- Review and rollback boundaries: the package ownership import, runtime/workspace adapters, artifact and turn-review protocol, and Agent View UI remain separate commit and subsystem boundaries. A UI or protocol rollback does not require restoring OMP source ownership; a host deployment rollback continues to select the legacy embedded bridge until the thin launcher is ready. -- Verification: T4 runs the migrated wire and host suites, package-consumer checks, import-boundary checks, and release consistency checks. A commit-bound legacy bridge continuity job checks the exact T4 head against the OMP authority commit recorded in provenance; it proves compatibility with the legacy OMP appserver, not deployment of the migrated host. The compatibility matrix records the exact source inputs and current deployment state. +- Transition: the verified OMP integration consumes checksum-pinned `@t4-code/host-wire` and `@t4-code/host-service` artifacts through thin compatibility exports. T4 continues to publish exact runtime provenance and does not claim that ordinary upstream OMP is compatible, because upstream does not ship the launcher or authority adapter. The frozen `@oh-my-pi/app-wire` tarball remains as bridge evidence, not as T4's active protocol dependency. The compatibility projector can be removed only after OMP exposes an equally bounded public catalog and event bridge. +- Fork reduction: the generic appserver and app-wire copies have been removed from the fork. The fork retains the small launcher, checksum-pinned T4 artifacts, and OMP authority adapter. General OMP fixes should continue upstream as independent changes. +- Review and rollback boundaries: the package ownership import, runtime/workspace adapters, artifact and turn-review protocol, and Agent View UI remain separate commit and subsystem boundaries. A UI or protocol rollback does not require restoring OMP source ownership; a host deployment rollback selects the previous exact integration tag. +- Verification: T4 runs the migrated wire and host suites, package-consumer checks, import-boundary checks, and release consistency checks. The commit-bound continuity job checks the exact T4 head against the OMP authority commit recorded in provenance. The OMP release additionally verifies source, binary, and packed-tarball installation paths for the pinned T4 artifacts. The compatibility matrix records the exact source inputs and current deployment state. diff --git a/docs/adr/014-transcript-tail-pagination.md b/docs/adr/014-transcript-tail-pagination.md index f6c2fe6..cec2301 100644 --- a/docs/adr/014-transcript-tail-pagination.md +++ b/docs/adr/014-transcript-tail-pagination.md @@ -1,6 +1,6 @@ # ADR 014: Paint the transcript tail before loading older history -- Status: accepted in the T4-owned host; the current legacy OMP bridge does not expose it yet. +- Status: released through OMP integration tag `t4code-17.0.5-appserver-9`. ## The problem @@ -85,8 +85,8 @@ catching up. The bounded projector backscan preserves ordinary tool call/result pairs. A tool pair separated by more than 512 KiB can lose its joined presentation on a page boundary without corrupting pagination. -The current T4-owned host packages also still need the planned thin OMP launcher before this feature -is available in the released legacy OMP bridge. +The verified OMP launcher consumes the T4-owned host artifacts and exposes this feature behind +negotiation. Older hosts continue to use the original attach behavior. ## Verification diff --git a/scripts/check-release-consistency.test.mjs b/scripts/check-release-consistency.test.mjs index 4d9915f..6f3c3b0 100644 --- a/scripts/check-release-consistency.test.mjs +++ b/scripts/check-release-consistency.test.mjs @@ -82,7 +82,7 @@ test("rejects duplicate keys in JSON release contracts", () => { test("keeps verified and published runtime records aligned after promotion", () => { const matrix = JSON.parse(files.get("compat/omp-app-matrix.json")); - assert.equal(matrix.verifiedRuntime.sourceTag, "t4code-17.0.5-appserver-8"); + assert.equal(matrix.verifiedRuntime.sourceTag, "t4code-17.0.5-appserver-9"); assert.deepEqual(matrix.publishedRuntime, matrix.verifiedRuntime); }); From db8aba72fcb1eab82ebbb9477a7e26b1142dfbd0 Mon Sep 17 00:00:00 2001 From: Wolfgang Schoenberger <221313372+wolfiesch@users.noreply.github.com> Date: Mon, 20 Jul 2026 02:36:09 -0700 Subject: [PATCH 2/2] test(host): expect artifact-backed bridge --- scripts/check-host-ownership.test.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/check-host-ownership.test.mjs b/scripts/check-host-ownership.test.mjs index f41493e..2eff581 100644 --- a/scripts/check-host-ownership.test.mjs +++ b/scripts/check-host-ownership.test.mjs @@ -49,13 +49,13 @@ test("generic host source has no private OMP source-tree dependency", () => { assert.deepEqual(violations, []); }); -test("compatibility metadata records the source move without overstating deployment", () => { +test("compatibility metadata records the artifact-backed OMP bridge", () => { const matrix = json("compat/omp-app-matrix.json"); const provenance = json("provenance/omp-host-migration.json"); assert.deepEqual(matrix.t4Host.sourcePaths, ["packages/host-wire", "packages/host-service"]); assert.equal(matrix.t4Host.runtimeAuthority, "omp"); - assert.equal(matrix.t4Host.deploymentState, "source-owned-legacy-runtime-bridge"); + assert.equal(matrix.t4Host.deploymentState, "source-owned-artifact-runtime-bridge"); assert.equal(matrix.t4Host.wireSchemaVersion, "0.7.0"); assert.deepEqual(matrix.t4Host.migrationInputs, { repository: provenance.sourceRepository,