Repository navigation
Establish Chromium/AppScene visual and geometry regression gates for unchanged Code OSS #259
Description
Activity
- addedvscode-oss/plannedPlanned for the AppScene/WebScene VS Code OSS integrationPlanned for the AppScene/WebScene VS Code OSS integration
on Sep 17, 2026 CSS ownership/dependency audit against #235:
- This issue owns the shared release-wide manifest, readiness protocol, Chromium/AppScene semantic/geometry/pixel capture, and compact diff evidence.
- Profile unchanged VS Code CSS and visual-tree workloads with bounded performance gates #243 owns unchanged-product CSS/visual-tree profiling, while Bound visual-tree churn, idle publication, and memory across panel mutations #258 owns the reusable panel-mutation counters, idle-publication, retained-node, latency, and RSS-slope workload. Consume their measurements rather than duplicating those harnesses here.
- Qualify forced-colors, system colors, focus visuals, and motion preferences #255 owns forced-colors/focus/reduced-motion CSS behavior; Implement CSS containment, container queries, and content visibility for dynamic panels #254 owns containment/content-visibility behavior; Render CSS masks, filters, clip paths, and backdrop effects in retained scenes #256 owns masks/filters/clips/backdrop paint; Render generated icon-font pseudo-elements correctly in tabs and list rows #246 remains the focused tab/list SVG parity gate. Qualify Code OSS accessibility semantics, keyboard navigation, and native exposure #262 owns accessibility semantics/native exposure, and Publish a Code OSS Web API capability ledger and expand WPT coverage #263 owns the global capability ledger. Route a failed capture to those owners.
Missing cross-cutting gate to carry in the manifest: where a focused owner exposes retained-scene/resource checksums, store and compare those alongside DOM, geometry, focus/accessibility, and pixels. Report explicit pass/fail/skipped/unavailable/total denominators and exact source/browser/font/platform revisions; a missing required mark or baseline fails closed.
Wave 0 manifest foundation committed locally
vscode-demolocal commitc367693adds the fail-closed release inventory required by this issue without changing VS Code OSS:config/visual-scenarios.jsondeclares 16 deterministic states across editor, navigation, workspace, panels, webviews, Chat, and dialogs;- every state names its owning AppScene/WebScene issues, capture state, acceptance state, theme/DPR/focus variants, and semantic/geometry/pixel/focus/accessibility/performance/lifecycle evidence;
- the manifest is pinned to the exact VS Code revision in
config/upstream.lock.jsonand rejects stale provenance; scripts/visual_scenario_manifest.pyrejects missing/duplicate evidence dimensions, silent skips, invalid issue ownership, missing or mismatched active contracts, undeclared group membership, invalid paths, and oversized reports;- the machine report exposes explicit scenario denominators (1 passing / 4 partial / 6 blocked / 5 pending / 16 total) and evidence denominators (11 gate / 101 planned / 0 not-applicable / 112 total);
- existing editor, Command Palette, and Settings gates can now select their active contract with
visual-parity.py --scenario ...; selecting a planned state such as Markdown fails instead of pretending a capture exists; - per-run/report/retained-run artifact budgets are versioned in the manifest.
Validation on exact local inputs:
- Python repository suite: 141/141 passed;
- Node repository suite under required Node 24.18.1: 65/65 passed;
- focused manifest + visual tests: 22/22 passed;
- generated report: 3,539 bytes, inside its 1 MiB budget.
The system
/usr/local/bin/nodeis Node 16 and predictably cannot run this repository's modern Node tests; the pinned Node 24.18.1 result is the valid gate. The commit remains local/unpushed under the consolidation policy. Next #259 work is implementing deterministic readiness/capture contracts for the planned scenarios rather than loosening existing baselines.Welcome scenario capture contract implemented locally
vscode-demolocal commitec6f0b2advances the #259 manifest from three to four implemented capture scenarios without modifying the pinned VS Code OSS source.The new
code-oss-welcome-parity-v1lane:- waits for the real
code/didLoadExtensionsworkbench mark before opening the upstream Welcome editor; - requires three stable semantic samples with
Code - OSS,Editing evolved,New File..., at least two start actions, at least one walkthrough, and the exact startup checkbox label; - compares named geometry for the Welcome container, header, left/right columns, start list, walkthrough list, and footer;
- evaluates pixel drift only inside the measured Welcome container;
- binds the capture to the existing transient-profile, exact-payload, clean AppScene/WebScene provenance, artifact-hash, and disk-budget audit;
- marks Welcome capture as implemented while leaving acceptance pending until a fresh current-head Chromium/AppScene package run passes.
Current manifest denominators are 1 passing / 4 partial / 6 blocked / 5 pending / 16 total and 14 gate / 98 planned / 0 not-applicable / 112 total evidence obligations.
Validation:
- complete Python suite: 158/158 passed;
- complete Node suite on exact packaged Node 24.18.1: 66/66 passed;
- focused visual/manifest/packaging Python suite: 56/56 passed;
- Welcome-aware browser/overlay Node suite: 20/20 passed;
- overlay applied to pinned unchanged VS Code OSS
645f29cc, full TypeScript no-emit compile passed, and the overlay reverted to a clean submodule; git diff --checkpassed.
The commit remains local and unpushed under the consolidation policy. The next #259 step is a fresh package after the active upstream stacks merge, followed by retained Chromium/native Welcome evidence and the remaining focus/accessibility/performance/lifecycle obligations.
- waits for the real
Local vscode-demo commit
9721499adds a deterministic Chromium/AppScene visual lane for the reported malformed document-tab background. It remains intentionally unpushed onintegration/appscene-webscene-code-ossuntil the next consolidated update.The query-gated unchanged-Code state now:
- closes the startup editor and creates three real dirty untitled Monaco editors;
- requires the exact ordered labels
Untitled-1,Untitled-2,Untitled-3, with the third active, all three dirty, and three stable samples; - records named geometry for the complete tab strip, each tab, the active tab, and surrounding workbench surfaces;
- restricts pixel metrics to the measured editor tab strip, so the path-like SVG/background artifact cannot disappear into a whole-window tolerance;
- adds a fail-closed
code-oss-editor-tabs-parity-v1contract and package marker.
The visual inventory now contains 17 scenarios and 119 evidence obligations; six captures are implemented. Focused and complete validation passes: Python 164/164, exact Node 24.18.1 68/68, manifest audit, and the applied pinned VS Code TypeScript no-emit build. The VS Code submodule was reverted byte-exactly and is clean.
Acceptance remains partial until a fresh current-head Chromium/native capture supplies semantic, geometry, and pixel evidence. Focus, accessibility, dynamic performance, and lifecycle remain owned by their existing #258/#260/#262 lanes.
#246 changes the product acceptance target based on direct Chromium inspection. The visible active-tab and Explorer artwork is generated Seti icon-font content, not an SVG background. A diagnostic post-#251/#128 capture still shows both shapes while the old whole-window contract passes at MAE
0.005242, RMSE0.048151, and changed-pixel ratio0.010378.Keep
code-oss-editor-tabs-parity-v1as the tab acceptance lane, but require the active tab icon slot as named geometry/pixel evidence. Add a separate deterministic Explorer selected-row/icon region: the current three-tab region ends at the tab strip and cannot qualify the cyan Explorer glyph. Run both only from a fresh exact current-main AppScene/WebScene package after the WebScene pseudofont-familyfix and its product-neutral native/WPT gates pass. Full primitive, source-path, revision, and hash evidence is on #246.Issue #246's underlying generated-icon defect now has local WebScene candidate
6e6d5568. Exact main fails the dedicated PUA native reftest by 21,796 pixels while Chromium passes at zero; the candidate passes native and Chromium with exact per-renderer test/reference hashes. After focused review/integration, schedule one exact-package run forcode-oss-editor-tabs-parity-v1and a separate deterministic Explorer selected-row/icon region. Keep #246 open until both product regions pass; no AppScene or VS Code stylesheet change is needed.The generic fix for the fresh Explorer path-like artifact is merged through #418 at
eb3cfe38f13dfe1243404ed87af39bf77eaf902a(child #417 of #246).Root cause: the pre-fix WebScene package retained Code OSS's pseudo
font-size:150%as 150px instead of resolving it from the 13px originating label to 19.5px. The Explorer row's 22px clip made the oversized icon glyph look like a row-spanning path. This was not a row background/clip defect.The reduced browser oracle is pixel exact and the native scene gate now asserts 19.5px with the existing 4,096-icon mutation/performance/lifecycle coverage. Please use a WebScene build at/after
eb3cfe38for the next unchanged-Code-OSS Explorer and editor-tab package capture. The pinned pre-fixvscode-democheckout was left unchanged.
Current visual-gate checkpoint — 20 September 2026
Exact merged heads: WebScene
a46b62e14eb197603f7e227c1558afb9088633b0; AppScene97702daeb9ad71341ced7226f0aa966dc77ea53c; unchanged Code OSS645f29cc3176500b4b5762ba887cf2a7f0ffdf2c; local vscode-demo123ad63a345dd77ceb0d75aed4c8eda244cf1288(clean, intentionally unpushed). Open consolidations remain WebScene #76085bba760fa571c8f08ea866dc5dd1ec27c4d376, AppScene #65ce66ef6ceb776b3f14e129f853bfc08b5c5e608c, and vscode-demo #1; do not merge them. One-agent mode is active.#799/#806 is merged for the 52
touch-actiondeclarations across 27 unchanged Code OSS files. Exact visual/geometry qualification must cover contact scrolling and cancellation on tabs, editors, split views, sliders, terminal, and Chat while proving mouse rendering remains unchanged. No exact product visual, package, hardware-contact, accessibility, lifecycle, memory, or performance execution ran.Parent epic: #227.
Problem
The integration has focused screenshot checks for individual fixes, but it does not yet have one revisioned Chromium/AppScene oracle covering every unchanged Code OSS surface. Without a shared harness, a feature can become functional while geometry, fonts, clipping, focus, or retained-scene output regresses elsewhere.
Investigation first
Before implementation:
SceneTech/vscode-demoand WebScene;Proposed direction
Build a data-driven acceptance manifest that drives the unchanged Code OSS server in Chromium and the same payload in AppScene. Compare semantic DOM state and named-region geometry before bounded perceptual/pixel comparison. Retain compact crops, measurements, hashes, and failure diffs; delete superseded full traces and packages.
Dependencies and boundaries
Acceptance gates
Proposed PR stack
Validate the cumulative top of each dependent group and merge focused WebScene fixes separately from the
vscode-democonsolidation PR.