Repository navigation
chore: fix pre-existing main breakages blocking clean overlay composition (#821) - #832
Merged
Merged
Conversation
… overlay files The committed manifest lagged the overlay by three files added in #774 (packages/session-ui/src/v2/components/{diff-gutter-extension, editable-diff-view-core,editable-diff-view}.ts): present in overlay/, absent from manifest.files — the drift gate fails on pristine main with 'stray files in overlay/ not in the manifest'. Repair path per #796: recompute the manifest from the committed overlay against the v1.18.29 upstream tree (scripts/refresh_manifest.mjs).
… shape Canonical's server-session.ts builds its store literal without diff_version (v1.18.29 and current upstream HEAD alike) and passes that draft to dropSessionCaches — which the overlay types with diff_version REQUIRED, so the materialized tree fails typecheck at server-session.ts(497): error TS2741: Property 'diff_version' is missing ... but required in type 'SessionCache' The field is an overlay-only cache-invalidation counter (no canonical wire shape to match), so the reconciliation is to widen the parameter type: diff_version becomes optional on SessionCache and the delete is guarded. The overlay's own global store type (global-sync/types.ts State) still declares diff_version required — only dropSessionCaches' parameter widens.
…ocales The overlay's i18n parity test fails on pristine main: en.ts carries "session.exportTrace" (added at the fork pin) but none of the 17 non-English app locale dicts do — the parity test aborts on the first locale (ar) with missing: ["session.exportTrace"]. The ui and desktop domains are clean. Issue #821 attributes this to the 'am' locale; that attribution traces to PR #819's review notes and does not reproduce: the overlay carries no am dict and its parity test checks the 17 locales it owns. The reproducible failure is the missing key across all 17, restored here following each table's own terminology (br is pt-BR upstream).
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: trueThanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
aarontrowbridge
marked this pull request as ready for review
September 6, 2026 17:27
This was referenced Sep 10, 2026
jeonghun-jj-lee
added a commit
that referenced
this pull request
Sep 12, 2026
…) (#1028) * feat(#1026): Slice 1 — VS Code theme extraction + bridge Add syntax_theme_bridge.ts: resolves the active VS Code color theme to either a Shiki built-in name (fast path, ~30 popular themes) or a full TextMate theme object extracted from the contributing extension's filesystem. Handles include chains (max depth 5, cycle detection) and merges editor.tokenColorCustomizations user overrides. Wire into ChatPanel: postSyntaxTheme() fires on theme change, on workbench.colorTheme change, and on tokenColorCustomizations change. Add 'syntax-theme' to both Lane 2 relay allowlists so the message reaches the framed app. 8 tests covering: built-in matching, custom extraction, include chains, cycle detection, user override merging, and fallback behavior. * chore: sync overlay to opencode a9c4bc736a (Shiki syntax highlighting, #1026) Overlay promotion from opencode fork branch with Slices 2-5: - shiki-theme-state.ts: reactive theme state for the webview - shiki-highlight-worker.ts: dedicated Shiki tokenization Web Worker - shiki-highlight-plugin.ts: CM6 ViewPlugin with Shiki decorations - editor-core.ts: wired Shiki extension + language-data fallback - preview-editor.tsx + editable-diff-view: pass lang to baseExtensions - markdown-shiki.worker.ts: theme-update support - pierre/worker.ts: active theme for @pierre/diffs pools - app.tsx: syntax-theme message handler Plus opencode fork upstream changes included in the full promotion. * fix(#1026): correct Shiki decoration bugs + sync overlay Three bugs fixed in the fork: 1. Empty fallback theme: worker init now uses the actual OpenCodeTheme (30+ TextMate scope rules) instead of an empty stub 2. Worker URL: uses Vite ?worker&url import pattern matching existing markdown-shiki and @pierre/diffs workers 3. Test compat: extracted pure decoration logic to shiki-highlight- decorations.ts; editor-core.ts lazy-imports the plugin module New integration test verifies Shiki produces colored tokens + valid CM6 decorations for Julia, TypeScript, Python, Rust, Go, YAML, and Shell (16 tests, all green). * chore: clean overlay sync from correct upstream base (afc0f1c26a vs 6fa55b660a) Previous incremental syncs used intermediate fork commits as the base, causing new Shiki files to be missing from the overlay. Redo as a full fork-vs-upstream-base delta to get all 18 files correctly. Fixes: shiki-highlight-plugin.ts, shiki-highlight-worker.ts, shiki-highlight-decorations.ts, shiki-theme-state.ts and tests now present in the overlay. The binary was already built from the correct fork commit (afc0f1c26a) — this fixes only the overlay tracking copy. * fix(#1026): deliver VS Code syntax theme after iframe boot The extension previously posted syntax-theme only after a later VS Code theme/configuration change. A newly opened Preview tab therefore stayed on the OpenCode fallback palette forever. Post the resolved syntax theme on the existing app-ready handshake, when the iframe listener is guaranteed to exist. Restore live refreshes for colorTheme and tokenColorCustomizations changes, and admit the message through both Lane 2 relay render paths. Add regression coverage proving a fresh panel receives dark-plus after app-ready and both relays contain syntax-theme. * chore: restore overlay from main — sync deferred to post-fork-merge The overlay sync in earlier commits wiped amicode-side patches (#929, #832, #987, OAuth bridge, titlebar interactions) because the fork's local/amicode branch doesn't carry them yet. Restore the full overlay from main; the proper sync happens after the fork PR merges into local/amicode. * chore: restore app-bundle manifest from main The sync:apply rewrote the manifest to point at the Shiki feature branch (afc0f1c26a) instead of local/amicode. Restore main's manifest so the drift gate passes against local/amicode as-is. * chore: remove leftover Shiki overlay files — overlay now matches main exactly
This was referenced Sep 23, 2026
jeonghun-jj-lee
pushed a commit
that referenced
this pull request
Sep 23, 2026
1 of 4 tasks
jeonghun-jj-lee
added a commit
that referenced
this pull request
Sep 23, 2026
* fix(packaging): enforce known fixes before CI advisory * fix(app): #1466 restore parent Files Changed invalidation * test(app): cover all #1466 file edit events * fix(app): #1467 bound mirror and session warming * fix(packaging): migrate #832 shared-state guard * fix(app): guard session warm scheduler keys * fix(app): repair #1466 review findings --------- Co-authored-by: amicode-ci <ci@amicode.local>
jeonghun-jj-lee
added a commit
that referenced
this pull request
Sep 24, 2026
…MPDIR self-pollution fix) (#1520) * fix: recover session reliability regressions (#1472) * fix(packaging): enforce known fixes before CI advisory * fix(app): #1466 restore parent Files Changed invalidation * test(app): cover all #1466 file edit events * fix(app): #1467 bound mirror and session warming * fix(packaging): migrate #832 shared-state guard * fix(app): guard session warm scheduler keys * fix(app): repair #1466 review findings --------- Co-authored-by: amicode-ci <ci@amicode.local> * ci: publish release VSIXes to Open VSX Registry (#1490) * ci: publish release VSIXes to Open VSX Registry * ci: decouple Open VSX publish from Marketplace step outcome * fix(app): #1458 — the empty-workspace landing's titlebar portals crash every real boot (current-main slice, manifest-clean) (#1473) * fix(app): #1458 — the empty-workspace landing's titlebar portals rendered SessionChatsDropdown/StatusPopoverV2 (per-directory sync-context readers) at the "/" route, which never sits inside a SyncProvider; at real-boot timing the no-directory window renders the landing briefly on EVERY boot and the useSync() throw killed the whole route tree — including the reactive landing effect, so no draft was ever created and the app stayed frozen at "/". Portals removed, content kept; a guard test pins the landing module free of directory-scoped context components (the unit-suite trap: mocked contexts pass while the real boot crashes — caught live by the e2e rig). Manifest: files + classification updated (drift gate PASS). * fix(app): #1458 follow-up — the guard test matched raw text and tripped on the fix's own explanatory comment (which names the removed components); assert the import graph instead. All green: 2 pass, drift gate PASS. * fix(app): render empty landing without directory context --------- Co-authored-by: amicode-ci <ci@amicode.local> * fix(app): retrying dynamic imports — the tunnel-truncation class (#1459b, current-main slice) (#1474) * fix(app): #1459b — retrying dynamic imports, the tunnel-truncation class (current-main slice). The fleet's ssh tunnel restarts on network transitions (launchd KeepAlive) and kills every in-flight tunneled response MID-STREAM; a lazily-imported chunk crossing a restart gets a cleanly-truncated body (observed live: 2,884 of 28,497 bytes) and Chromium's module map caches the failure FOR THE DOCUMENT'S LIFE — every later import of the same URL throws 'Failed to fetch dynamically imported module' WITHOUT a network request: the new-session launch frozen in the loading hold forever (live-verified root cause of the stuck-loading arc; the rig has no tunnel so it never sees the class). retryImport parses the failing URL, re-imports it cache-busted (fresh module-map key) with backoff 1s→2s→4s→8s→16s (~31s of transport-storm ride-out; observed watchdog windows last minutes — a single immediate retry drowned in the storm's first beat); chained busts strip the previous query. Wired at all 8 dynamic-import sites. Transient-only: real errors rethrow. 7 contract tests (importer injected — the engine's import() never runs in the suite). Manifest: files + classification registered, drift gate PASS. * fix(app): bound dynamic import retries --------- Co-authored-by: amicode-ci <ci@amicode.local> * fix: follow up on compaction review findings (#1463) * fix: preserve interrupted compaction output * fix(app): localize compaction failure toast * fix(core): surface compaction runner errors * fix(engine): send final-step directive as user input * test(engine): cover manual compaction runner request * chore(app-bundle): refresh overlay manifest * fix(server): map compact runner failures --------- Co-authored-by: amicode-ci <ci@amicode.local> * fix(app): recover deferred session mirror pruning (#1502) Co-authored-by: amicode-ci <ci@amicode.local> * fix: bound and isolate background session warming (#1501) * fix: bound background session warming * test: cover prewarmer batch scheduling * refactor: share session prewarmer batching * test: cover multi-row prewarmer batches * fix: parallelize bulk lineage warming * fix: release warm slots after prefetch --------- Co-authored-by: amicode-ci <ci@amicode.local> * fix(test): stop instruction.test.ts leaking AGENTS.md into $TMPDIR The 'does not walk past a secondary directory' test wrote AGENTS.md to path.dirname(tmpdirScoped()) === os.tmpdir(), an UNSCOPED file in the shared $TMPDIR root that (a) was never cleaned up and (b) poisoned every sibling test nesting tmp dirs under $TMPDIR — the loader walks up and finds it. Nest the secondary under its own scoped parent so the 'above' AGENTS.md lands in an auto-cleaned dir. findUp for a secondary dir stops at the dir itself (stop=dir), so no git root is needed. Fixes 2 instruction.test.ts failures. --------- Co-authored-by: amicode-ci <ci@amicode.local> Co-authored-by: Jack Champagne <43344745+jack-champagne@users.noreply.github.com> Co-authored-by: Aaron Trowbridge <47730232+aarontrowbridge@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #821. Fixes the two pre-existing breakages that red every overlay composition check on pristine origin/main, verified on a fresh
origin/main(6afdb9d) worktree and materialized tree before and after.Breakage 1 —
server-session.ts(497)diff_versiontype clashRepro: materialize (canonical v1.18.29 + overlay) →
tsgo -binpackages/app:error TS2741: Property 'diff_version' is missing ... but required in type 'SessionCache'.Root cause: canonical's
server-session.tsbuilds its store literal withoutdiff_version(v1.18.29 and current upstream HEAD) and passes that draft todropSessionCaches, which the overlay types withdiff_versionrequired. The field is an overlay-only cache-invalidation counter — there is no canonical wire shape to match — so the reconciliation widens the parameter type:diff_versionbecomes optional onSessionCacheand the delete is guarded. The overlay's own global store type (global-sync/types.tsState) still declares it required; onlydropSessionCaches' parameter widens.Verification: the materialized typecheck error set on the fixed branch is byte-identical to the base set minus exactly this one error (19 → 18; the remaining 18 are the known overlay-vs-v1.18.29 API drift on surfaces PR #819 re-homes — out of scope here, no drive-bys).
Breakage 2 — i18n parity failure
Repro:
bun test packages/app/src/i18n/parity.test.tsin the materialized tree fails withmissing: ["session.exportTrace"](en.ts has the key — added at the fork pin — none of the 17 non-English app locale dicts do; the ui and desktop domains are clean).On the issue's 'am' attribution: it traces to PR #819's review notes and does not reproduce — the overlay carries no
amdict and its parity test checks the 17 locales it owns; the materialized tree's only parity failure is this missing key across all 17. Restored the key in all 17, following each table's own terminology (bris pt-BR upstream). Inventing overlayamdicts was rejected deliberately: in the composed tree they would overwrite canonical's complete Amharic tables with a smaller fork-era keyset — the opposite of restoring keys.Also (third pre-existing main breakage, surfaced by the repo's own tooling)
refresh_manifest.mjs/drift_gate.mjsrevealed that the committed manifest lags the overlay by the three#774session-ui files (diff-gutter-extension.ts,editable-diff-view-core.ts,editable-diff-view.tsx— inoverlay/, absent frommanifest.files), so the drift gate fails on pristine main with "stray files". Commit 1 adopts them via the canonical repair path (refresh_manifest.mjsagainst the v1.18.29 upstream tree). Flagging it here since it's adjacent to #821's scope but not named by it — happy to split it out if reviewers prefer.Commits (each green, drift gate PASS at each)
SessionCachewith canonical server-session shape (optionaldiff_version)session.exportTracein the 17 non-English app localesVerification summary
579 files, overlay and manifest in sync).server-session.ts(497)error gone; parity test 4/4 pass.global-syncunit tests: 37 pass, unchanged from base (the 2 bun-test Solid-server module errors are identical on pristine main — environment artifacts, not touched).session-cache.ts, i18n tables,manifest.jsononly).