docs(B04): record image lifecycle regression and pending native frame acceptance

This commit is contained in:
Codex committed 2026-10-21 15:17:15 +09:00
1 parent 342820690f
commit 1df1861a7a
3 files changed
+1027

No files matched your search

@@ -0,0 +1,763 @@
{
"checks": [
"cold: layout-before-passive-effects: no URI text",
"cold: sync-commit: no URI text",
"safe first commit image",
"layout probe sees image before passive effects",
"stable: no URI text",
"native image error: no image",
"native image error: concise",
"native image error: no URI text",
"error recovery new src: layout-before-passive-effects: no URI text",
"error recovery new src: sync-commit: no URI text",
"new safe src resets prior error synchronously",
"invalid/no-host: layout-before-passive-effects: no URI text",
"invalid/no-host: sync-commit: no URI text",
"invalid/no-host initial: no image",
"invalid/no-host initial: concise",
"invalid/no-host initial: no URI text",
"invalid/no-host settled: no image",
"invalid/no-host settled: concise",
"invalid/no-host settled: no URI text",
"invalid/no-host: layout-before-passive-effects: no URI text",
"invalid/no-host: sync-commit: no URI text",
"invalid/no-host initial: no image",
"invalid/no-host initial: concise",
"invalid/no-host initial: no URI text",
"invalid/no-host settled: no image",
"invalid/no-host settled: concise",
"invalid/no-host settled: no URI text",
"invalid/no-host: layout-before-passive-effects: no URI text",
"invalid/no-host: sync-commit: no URI text",
"invalid/no-host initial: no image",
"invalid/no-host initial: concise",
"invalid/no-host initial: no URI text",
"invalid/no-host settled: no image",
"invalid/no-host settled: concise",
"invalid/no-host settled: no URI text",
"same source first resolver: layout-before-passive-effects: no URI text",
"same source first resolver: sync-commit: no URI text",
"same source second resolver: layout-before-passive-effects: no URI text",
"same source second resolver: sync-commit: no URI text",
"old resolver identity ignored: no image",
"old resolver identity ignored: concise",
"old resolver identity ignored: no URI text",
"new resolver identity wins",
"local direct: layout-before-passive-effects: no URI text",
"local direct: sync-commit: no URI text",
"existing unpreferred local semantics",
"prefer host enabled: layout-before-passive-effects: no URI text",
"prefer host enabled: sync-commit: no URI text",
"host preference removes direct file before effects: no image",
"host preference removes direct file before effects: concise",
"host preference removes direct file before effects: no URI text",
"preferred host result",
"same direct first adapter: layout-before-passive-effects: no URI text",
"same direct first adapter: sync-commit: no URI text",
"direct failed before new adapter: no image",
"direct failed before new adapter: concise",
"direct failed before new adapter: no URI text",
"same direct new adapter: layout-before-passive-effects: no URI text",
"same direct new adapter: sync-commit: no URI text",
"immediate error after adapter reset retained: no image",
"immediate error after adapter reset retained: concise",
"immediate error after adapter reset retained: no URI text",
"A to B: layout-before-passive-effects: no URI text",
"A to B: sync-commit: no URI text",
"B to A retry: layout-before-passive-effects: no URI text",
"B to A retry: sync-commit: no URI text",
"A to B to A resets old failure",
"pending old: layout-before-passive-effects: no URI text",
"pending old: sync-commit: no URI text",
"pending new: layout-before-passive-effects: no URI text",
"pending new: sync-commit: no URI text",
"no old during new: no image",
"no old during new: concise",
"no old during new: no URI text",
"stale success ignored: no image",
"stale success ignored: concise",
"stale success ignored: no URI text",
"stale success has no onResolve",
"latest result wins",
"latest onResolve only",
"pending failure clears previous: layout-before-passive-effects: no URI text",
"pending failure clears previous: sync-commit: no URI text",
"old resolved image removed synchronously: no image",
"old resolved image removed synchronously: concise",
"old resolved image removed synchronously: no URI text",
"safe switch while rejection pending: layout-before-passive-effects: no URI text",
"safe switch while rejection pending: sync-commit: no URI text",
"stale rejection cannot fail new safe image",
"active rejection: layout-before-passive-effects: no URI text",
"active rejection: sync-commit: no URI text",
"active rejection: no image",
"active rejection: concise",
"active rejection: no URI text",
"failure not busy",
"unsafe resolver result: layout-before-passive-effects: no URI text",
"unsafe resolver result: sync-commit: no URI text",
"unsafe resolver rejected: no image",
"unsafe resolver rejected: concise",
"unsafe resolver rejected: no URI text",
"unmount pending: layout-before-passive-effects: no URI text",
"unmount pending: sync-commit: no URI text",
"unmounted: layout-before-passive-effects: no URI text",
"unmounted: sync-commit: no URI text",
"unmounted completion ignored",
"preview: layout-before-passive-effects: no URI text",
"preview: sync-commit: no URI text",
"safe image preview click retained",
"synthetic-A: layout-before-passive-effects: no URI text",
"synthetic-A: sync-commit: no URI text",
"actual CompletedFold header exists",
"synthetic-A: before-toggle-0: no URI text",
"synthetic-A: toggle-0: no URI text",
"actual MessageBubble preserves image",
"actual CompletedFold remounts image across toggle",
"actual CompletedFold header exists",
"synthetic-A: before-toggle-1: no URI text",
"synthetic-A: toggle-1: no URI text",
"actual MessageBubble preserves image",
"actual CompletedFold remounts image across toggle",
"actual CompletedFold header exists",
"synthetic-A: before-toggle-2: no URI text",
"synthetic-A: toggle-2: no URI text",
"actual MessageBubble preserves image",
"actual CompletedFold remounts image across toggle",
"synthetic-B: layout-before-passive-effects: no URI text",
"synthetic-B: sync-commit: no URI text",
"actual CompletedFold header exists",
"synthetic-B: before-toggle-0: no URI text",
"synthetic-B: toggle-0: no URI text",
"actual MessageBubble preserves image",
"actual CompletedFold remounts image across toggle",
"actual CompletedFold header exists",
"synthetic-B: before-toggle-1: no URI text",
"synthetic-B: toggle-1: no URI text",
"actual MessageBubble preserves image",
"actual CompletedFold remounts image across toggle",
"actual CompletedFold header exists",
"synthetic-B: before-toggle-2: no URI text",
"synthetic-B: toggle-2: no URI text",
"actual MessageBubble preserves image",
"actual CompletedFold remounts image across toggle",
"synthetic-A: layout-before-passive-effects: no URI text",
"synthetic-A: sync-commit: no URI text",
"actual CompletedFold header exists",
"synthetic-A: before-toggle-0: no URI text",
"synthetic-A: toggle-0: no URI text",
"actual MessageBubble preserves image",
"actual CompletedFold remounts image across toggle",
"actual CompletedFold header exists",
"synthetic-A: before-toggle-1: no URI text",
"synthetic-A: toggle-1: no URI text",
"actual MessageBubble preserves image",
"actual CompletedFold remounts image across toggle",
"actual CompletedFold header exists",
"synthetic-A: before-toggle-2: no URI text",
"synthetic-A: toggle-2: no URI text",
"actual MessageBubble preserves image",
"actual CompletedFold remounts image across toggle",
"no renderer errors"
],
"samples": [
{
"label": "cold: layout-before-passive-effects",
"textLength": 0,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "cold: sync-commit",
"textLength": 0,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "stable",
"textLength": 0,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "native image error",
"textLength": 6,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "error recovery new src: layout-before-passive-effects",
"textLength": 0,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "error recovery new src: sync-commit",
"textLength": 0,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "invalid/no-host: layout-before-passive-effects",
"textLength": 6,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "invalid/no-host: sync-commit",
"textLength": 6,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "invalid/no-host initial",
"textLength": 6,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "invalid/no-host settled",
"textLength": 6,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "invalid/no-host: layout-before-passive-effects",
"textLength": 6,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "invalid/no-host: sync-commit",
"textLength": 6,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "invalid/no-host initial",
"textLength": 6,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "invalid/no-host settled",
"textLength": 6,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "invalid/no-host: layout-before-passive-effects",
"textLength": 6,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "invalid/no-host: sync-commit",
"textLength": 6,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "invalid/no-host initial",
"textLength": 6,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "invalid/no-host settled",
"textLength": 6,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "same source first resolver: layout-before-passive-effects",
"textLength": 6,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "same source first resolver: sync-commit",
"textLength": 6,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "same source second resolver: layout-before-passive-effects",
"textLength": 6,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "same source second resolver: sync-commit",
"textLength": 6,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "old resolver identity ignored",
"textLength": 6,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "local direct: layout-before-passive-effects",
"textLength": 0,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "local direct: sync-commit",
"textLength": 0,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "prefer host enabled: layout-before-passive-effects",
"textLength": 6,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "prefer host enabled: sync-commit",
"textLength": 6,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "host preference removes direct file before effects",
"textLength": 6,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "same direct first adapter: layout-before-passive-effects",
"textLength": 0,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "same direct first adapter: sync-commit",
"textLength": 0,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "direct failed before new adapter",
"textLength": 6,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "same direct new adapter: layout-before-passive-effects",
"textLength": 0,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "same direct new adapter: sync-commit",
"textLength": 0,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "immediate error after adapter reset retained",
"textLength": 6,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "A to B: layout-before-passive-effects",
"textLength": 0,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "A to B: sync-commit",
"textLength": 0,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "B to A retry: layout-before-passive-effects",
"textLength": 0,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "B to A retry: sync-commit",
"textLength": 0,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "pending old: layout-before-passive-effects",
"textLength": 6,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "pending old: sync-commit",
"textLength": 6,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "pending new: layout-before-passive-effects",
"textLength": 6,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "pending new: sync-commit",
"textLength": 6,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "no old during new",
"textLength": 6,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "stale success ignored",
"textLength": 6,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "pending failure clears previous: layout-before-passive-effects",
"textLength": 6,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "pending failure clears previous: sync-commit",
"textLength": 6,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "old resolved image removed synchronously",
"textLength": 6,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "safe switch while rejection pending: layout-before-passive-effects",
"textLength": 0,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "safe switch while rejection pending: sync-commit",
"textLength": 0,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "active rejection: layout-before-passive-effects",
"textLength": 6,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "active rejection: sync-commit",
"textLength": 6,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "active rejection",
"textLength": 6,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "unsafe resolver result: layout-before-passive-effects",
"textLength": 6,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "unsafe resolver result: sync-commit",
"textLength": 6,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "unsafe resolver rejected",
"textLength": 6,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "unmount pending: layout-before-passive-effects",
"textLength": 6,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "unmount pending: sync-commit",
"textLength": 6,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "unmounted: layout-before-passive-effects",
"textLength": 5,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "unmounted: sync-commit",
"textLength": 5,
"imageCount": 0,
"height": 0,
"imageHeight": 0
},
{
"label": "preview: layout-before-passive-effects",
"textLength": 0,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "preview: sync-commit",
"textLength": 0,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "synthetic-A: layout-before-passive-effects",
"textLength": 35,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "synthetic-A: sync-commit",
"textLength": 35,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "synthetic-A: before-toggle-0",
"textLength": 35,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "synthetic-A: toggle-0",
"textLength": 35,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "synthetic-A: before-toggle-1",
"textLength": 35,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "synthetic-A: toggle-1",
"textLength": 35,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "synthetic-A: before-toggle-2",
"textLength": 35,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "synthetic-A: toggle-2",
"textLength": 35,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "synthetic-B: layout-before-passive-effects",
"textLength": 35,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "synthetic-B: sync-commit",
"textLength": 35,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "synthetic-B: before-toggle-0",
"textLength": 35,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "synthetic-B: toggle-0",
"textLength": 35,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "synthetic-B: before-toggle-1",
"textLength": 35,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "synthetic-B: toggle-1",
"textLength": 35,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "synthetic-B: before-toggle-2",
"textLength": 35,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "synthetic-B: toggle-2",
"textLength": 35,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "synthetic-A: layout-before-passive-effects",
"textLength": 35,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "synthetic-A: sync-commit",
"textLength": 35,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "synthetic-A: before-toggle-0",
"textLength": 35,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "synthetic-A: toggle-0",
"textLength": 35,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "synthetic-A: before-toggle-1",
"textLength": 35,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "synthetic-A: toggle-1",
"textLength": 35,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "synthetic-A: before-toggle-2",
"textLength": 35,
"imageCount": 1,
"height": 0,
"imageHeight": 0
},
{
"label": "synthetic-A: toggle-2",
"textLength": 35,
"imageCount": 1,
"height": 0,
"imageHeight": 0
}
],
"errors": [],
"limits": "DOM lifecycle only; jsdom heights are not layout acceptance. Synthetic data only.",
"codeSha": "342820690f644fb1cb3b0a76b143dbcd41aac8c4"
}
@@ -0,0 +1,205 @@
B04 verification
Code SHA: 342820690f644fb1cb3b0a76b143dbcd41aac8c4
Base: 0b613e522d444cbd8cd44ca17e9b1be498517978
Linux x64 / Node24.19.0 / npm11.9.0 / jsdom30.1.3
All images synthetic. No original app, user history, real provider or native browser execution.
159 DOM assertions /85 DOM samples passed; heights are NOT native layout evidence.
Independent review repeated media and final lifecycle checks; no blocking finding.
===== image-lifecycle.txt: exit 0 =====
npm warn Unknown env config "http-proxy". This will stop working in the next major version of npm.
> ycode@0.0.7 test:image-lifecycle
> node scripts/test-image-lifecycle.mjs
{"result":"PASS","checks":159,"samples":85,"output":"/workspace/scratch/0aaa9774aecc/single-package-staging/ycode/.tmp/b04-image-uu7ShO","limits":"DOM lifecycle only; jsdom heights are not layout acceptance. Synthetic data only."}
===== media.txt: exit 0 =====
npm warn Unknown env config "http-proxy". This will stop working in the next major version of npm.
> ycode@0.0.7 test:media
> esbuild scripts/mermaid-regression.ts --bundle --platform=node --format=esm --packages=external --jsx=automatic --loader:.css=empty --outfile=.tmp/media-tests/mermaid-regression.mjs --log-level=warning && node .tmp/media-tests/mermaid-regression.mjs && esbuild scripts/image-renderer-regression.tsx scripts/path-renderer-regression.tsx --bundle --platform=node --format=cjs --jsx=automatic --loader:.css=empty --out-extension:.js=.cjs --outdir=.tmp/media-tests --log-level=warning && node .tmp/media-tests/image-renderer-regression.cjs && node .tmp/media-tests/path-renderer-regression.cjs
Mermaid cache, sanitizer, queue, and abort regression checks passed
image-renderer-regression: all checks passed
Path renderer regression checks passed (23).
===== core.txt: exit 0 =====
npm warn Unknown env config "http-proxy". This will stop working in the next major version of npm.
> ycode@0.0.7 test
> npm run test:core
npm warn Unknown env config "http-proxy". This will stop working in the next major version of npm.
> ycode@0.0.7 test:core
> npm run typecheck && npm run test:chat && npm run test:sessions && npm run test:persistence && npm run test:conversation
npm warn Unknown env config "http-proxy". This will stop working in the next major version of npm.
> ycode@0.0.7 typecheck
> tsc --noEmit -p tsconfig.node.json && tsc --noEmit -p tsconfig.web.json
npm warn Unknown env config "http-proxy". This will stop working in the next major version of npm.
> ycode@0.0.7 test:chat
> esbuild scripts/message-order-regression.ts scripts/chat-store-regression.ts scripts/chat-stream-committer-regression.ts --bundle --platform=node --format=esm --out-extension:.js=.mjs --outdir=.tmp/chat-tests --log-level=warning && node .tmp/chat-tests/message-order-regression.mjs && node .tmp/chat-tests/chat-store-regression.mjs && node .tmp/chat-tests/chat-stream-committer-regression.mjs
message-order-regression: all checks passed
chat-store-regression: all checks passed
chat-stream-committer-regression: all checks passed
npm warn Unknown env config "http-proxy". This will stop working in the next major version of npm.
> ycode@0.0.7 test:sessions
> esbuild scripts/session-store-regression.ts --bundle --platform=node --format=esm --external:esbuild --outfile=.tmp/session-store-regression.mjs --log-level=warning && node .tmp/session-store-regression.mjs
session-store-regression: all checks passed
npm warn Unknown env config "http-proxy". This will stop working in the next major version of npm.
> ycode@0.0.7 test:persistence
> esbuild scripts/chat-persistence-regression.ts --bundle --platform=node --format=esm --external:esbuild --outfile=.tmp/chat-persistence-regression.mjs --log-level=warning && node .tmp/chat-persistence-regression.mjs
chat-persistence-regression: all checks passed
npm warn Unknown env config "http-proxy". This will stop working in the next major version of npm.
> ycode@0.0.7 test:conversation
> esbuild scripts/conversation-renderer-regression.tsx scripts/composer-regression.tsx scripts/completed-fold-regression.tsx scripts/streaming-footer-regression.tsx --bundle --platform=node --format=cjs --jsx=automatic --loader:.css=text --out-extension:.js=.cjs --outdir=.tmp/conversation-tests --log-level=error && node .tmp/conversation-tests/conversation-renderer-regression.cjs && node .tmp/conversation-tests/composer-regression.cjs && node .tmp/conversation-tests/streaming-footer-regression.cjs && node .tmp/conversation-tests/completed-fold-regression.cjs
Conversation specialized renderer SSR regression checks passed
Composer/message action regression cases passed
streaming-footer-regression: persistent stream status, delayed/paused rotation, brand/locale mapping, source CSS, and completed model footer passed
Completed-fold model and SSR regression checks passed
npm notice
npm notice New major version of npm available! 11.9.0 -> 12.2.0
npm notice Changelog: https://github.com/npm/cli/releases/tag/v12.2.0
npm notice To update run: npm install -g npm@12.2.0
npm notice
npm notice
npm notice New major version of npm available! 11.9.0 -> 12.2.0
npm notice Changelog: https://github.com/npm/cli/releases/tag/v12.2.0
npm notice To update run: npm install -g npm@12.2.0
npm notice
===== alignment-dom.txt: exit 0 =====
npm warn Unknown env config "http-proxy". This will stop working in the next major version of npm.
> ycode@0.0.7 test:alignment:dom
> node scripts/run-alignment-regression.mjs --require-dom
PASS model alignment: fresh/legacy migration, new/edit/default/delete/reload, valid selection (offline host fixtures)
PASS model settings: deferred owner switch, rename mapping, addition selection, empty deletion, immutable history
PASS session factory: first-send preference, mode preservation, invalid permission rejection (isolated ports)
{"historyMessages":10000,"bytes":747781,"parseMs":2.913390000000007,"storeHydrationMs":0.17233299999999474,"note":"Node parsing/store benchmark only, not browser rendering or Windows IPC performance"}
session-composer-alignment: loading/cache/retry/races/model/permissions/modes/SSR passed
alignment-conversation: local groups, original expanded order, question projection and truthful status passed
A01 native MessageBubble identity aliases, immutable inputs and ordinary raw output passed
A01 imported native card, linked dedup and unknown-position compatibility passed
question-answer-shell: structural and recovered CSS contracts passed
question-answer-shell: DOM hierarchy, controls linkage, click, Enter, Space and inert contracts passed
Runtime progress, session-grant scope and approval lifecycle regressions passed
Permission intercept static rendering passed; interactive keyboard/focus remains UI acceptance
[claude-permission] {"permissionMode":"default-sandbox","agentMode":"craft","sdkMode":"unknown","sdkModeSource":"host-query-or-acknowledged-control","policyTransition":false,"source":"callback","toolCall":"e3b98a4da31a127d","decisionCategory":"unknown","decisionCode":"unknown","decisionCodePresent":false,"matchedAskRule":false,"branch":"permission-approval"}
[claude-permission] {"permissionMode":"default-sandbox","agentMode":"craft","sdkMode":"unknown","sdkModeSource":"host-query-or-acknowledged-control","policyTransition":false,"source":"callback","toolCall":"e3b98a4da31a127d","decisionCategory":"unknown","decisionCode":"unknown","decisionCodePresent":false,"matchedAskRule":false,"branch":"permission-approval"}
[claude-permission] {"permissionMode":"default-sandbox","agentMode":"craft","sdkMode":"unknown","sdkModeSource":"host-query-or-acknowledged-control","policyTransition":false,"source":"callback","toolCall":"e3b98a4da31a127d","decisionCategory":"unknown","decisionCode":"unknown","decisionCodePresent":false,"matchedAskRule":false,"branch":"permission-approval"}
[claude-permission] {"permissionMode":"full-access","agentMode":"ask","sdkMode":"unknown","sdkModeSource":"host-query-or-acknowledged-control","policyTransition":false,"source":"callback","toolCall":"e3b98a4da31a127d","decisionCategory":"unknown","decisionCode":"unknown","decisionCodePresent":false,"matchedAskRule":false,"branch":"mode-or-inactive-deny"}
[claude-permission] {"permissionMode":"full-access","agentMode":"plan","sdkMode":"unknown","sdkModeSource":"host-query-or-acknowledged-control","policyTransition":false,"source":"callback","toolCall":"e3b98a4da31a127d","decisionCategory":"unknown","decisionCode":"unknown","decisionCodePresent":false,"matchedAskRule":false,"branch":"mode-or-inactive-deny"}
[claude-permission] {"permissionMode":"full-access","agentMode":"craft","sdkMode":"unknown","sdkModeSource":"host-query-or-acknowledged-control","policyTransition":false,"source":"callback","toolCall":"e3b98a4da31a127d","decisionCategory":"unknown","decisionCode":"unknown","decisionCodePresent":false,"matchedAskRule":false,"branch":"full-access-preauthorized"}
[claude-permission] {"permissionMode":"full-access","agentMode":"craft","sdkMode":"unknown","sdkModeSource":"host-query-or-acknowledged-control","policyTransition":false,"source":"callback","toolCall":"e3b98a4da31a127d","decisionCategory":"unknown","decisionCode":"unknown","decisionCodePresent":false,"matchedAskRule":true,"branch":"full-access-preauthorized"}
[claude-permission] {"permissionMode":"full-access","agentMode":"craft","sdkMode":"unknown","sdkModeSource":"host-query-or-acknowledged-control","policyTransition":false,"source":"callback","toolCall":"e3b98a4da31a127d","decisionCategory":"unknown","decisionCode":"unknown","decisionCodePresent":false,"matchedAskRule":false,"branch":"full-access-preauthorized"}
[claude-permission] {"permissionMode":"full-access","agentMode":"craft","sdkMode":"unknown","sdkModeSource":"host-query-or-acknowledged-control","policyTransition":false,"source":"callback","toolCall":"e3b98a4da31a127d","decisionCategory":"subcommandResults","decisionCode":"unknown","decisionCodePresent":false,"matchedAskRule":false,"branch":"full-access-preauthorized"}
[claude-permission] {"permissionMode":"full-access","agentMode":"craft","sdkMode":"unknown","sdkModeSource":"host-query-or-acknowledged-control","policyTransition":false,"source":"callback","toolCall":"e3b98a4da31a127d","decisionCategory":"safetyCheck","decisionCode":"unknown","decisionCodePresent":false,"matchedAskRule":false,"branch":"full-access-preauthorized"}
[claude-permission] {"permissionMode":"full-access","agentMode":"craft","sdkMode":"unknown","sdkModeSource":"host-query-or-acknowledged-control","policyTransition":false,"source":"callback","toolCall":"e3b98a4da31a127d","decisionCategory":"unknown","decisionCode":"unknown","decisionCodePresent":true,"matchedAskRule":false,"branch":"full-access-preauthorized"}
[claude-permission] {"permissionMode":"full-access","agentMode":"craft","sdkMode":"unknown","sdkModeSource":"host-query-or-acknowledged-control","policyTransition":false,"source":"callback","toolCall":"e3b98a4da31a127d","decisionCategory":"unknown","decisionCode":"unknown","decisionCodePresent":false,"matchedAskRule":false,"branch":"full-access-preauthorized"}
[claude-permission] {"permissionMode":"full-access","agentMode":"craft","sdkMode":"unknown","sdkModeSource":"host-query-or-acknowledged-control","policyTransition":false,"source":"callback","toolCall":"e3b98a4da31a127d","decisionCategory":"unknown","decisionCode":"unknown","decisionCodePresent":false,"matchedAskRule":false,"branch":"full-access-preauthorized"}
[claude-permission] {"permissionMode":"default-sandbox","agentMode":"craft","sdkMode":"unknown","sdkModeSource":"host-query-or-acknowledged-control","policyTransition":false,"source":"callback","toolCall":"e3b98a4da31a127d","decisionCategory":"unknown","decisionCode":"unknown","decisionCodePresent":false,"matchedAskRule":true,"branch":"rule-approval"}
[claude-permission] {"permissionMode":"default-sandbox","agentMode":"craft","sdkMode":"unknown","sdkModeSource":"host-query-or-acknowledged-control","policyTransition":false,"source":"callback","toolCall":"e3b98a4da31a127d","decisionCategory":"unknown","decisionCode":"unknown","decisionCodePresent":false,"matchedAskRule":false,"branch":"permission-approval"}
[claude-permission] {"permissionMode":"default-sandbox","agentMode":"craft","sdkMode":"unknown","sdkModeSource":"host-query-or-acknowledged-control","policyTransition":false,"source":"callback","toolCall":"e3b98a4da31a127d","decisionCategory":"unknown","decisionCode":"unknown","decisionCodePresent":false,"matchedAskRule":false,"branch":"error-deny"}
[claude-permission] {"permissionMode":"default-sandbox","agentMode":"craft","sdkMode":"unknown","sdkModeSource":"host-query-or-acknowledged-control","policyTransition":false,"source":"callback","toolCall":"e3b98a4da31a127d","decisionCategory":"unknown","decisionCode":"unknown","decisionCodePresent":false,"matchedAskRule":false,"branch":"permission-approval"}
[claude-permission] {"permissionMode":"default-sandbox","agentMode":"craft","sdkMode":"unknown","sdkModeSource":"host-query-or-acknowledged-control","policyTransition":false,"source":"callback","toolCall":"85aafbf52a5144b5","decisionCategory":"unknown","decisionCode":"unknown","decisionCodePresent":false,"matchedAskRule":false,"branch":"business-question"}
[claude-permission] {"permissionMode":"default-sandbox","agentMode":"craft","sdkMode":"unknown","sdkModeSource":"host-query-or-acknowledged-control","policyTransition":false,"source":"callback","toolCall":"85aafbf52a5144b5","decisionCategory":"unknown","decisionCode":"unknown","decisionCodePresent":false,"matchedAskRule":false,"branch":"business-question"}
Claude host approval policy unit checks passed (no SDK process/application/matching verification)
[claude-permission] {"permissionMode":"full-access","agentMode":"plan","sdkMode":"plan","sdkModeSource":"host-query-or-acknowledged-control","policyTransition":false,"source":"hook","toolCall":"unknown","decisionCategory":"unknown","decisionCode":"unknown","decisionCodePresent":false,"matchedAskRule":"unknown","branch":"mode-or-inactive-deny"}
Mock SDK replay lifecycle passed: fail closed, retry, session isolation, independent mode guard
B03 offline host policy: 276 checks passed; no real SDK/CLI/model execution.
task popconfirm DOM regression: 34 checks passed (jsdom, not pixel validation)
question-interaction: 24 DOM behavioral checks passed
question-identity: 30 A01 DOM checks passed (not Electron/pixel/SDK acceptance)
completed-fold-nested: real question/tool/thinking/local-summary remount, event, keyboard and identity contracts passed
completed-fold-native-identity: real reducer done correction, native IDs, insertion/reorder, repeated outer toggles, message isolation and legacy fallback passed
Permission intercept DOM: 43 checks passed (not pixel/SDK verification)
{"checks":37,"passed":true,"scope":"Isolated React DOM and CSS contracts; no native keyboard/layout/pixel acceptance"}
{"result":"PASS","phase":"alignment-offline","suites":11}
{"result":"PASS","phase":"alignment-dom","suites":7}
npm notice
npm notice New major version of npm available! 11.9.0 -> 12.2.0
npm notice Changelog: https://github.com/npm/cli/releases/tag/v12.2.0
npm notice To update run: npm install -g npm@12.2.0
npm notice
===== frame-fixture-build.txt: exit 0 =====
{"result":"BUILD_ONLY","output":"/workspace/scratch/0aaa9774aecc/single-package-staging/ycode/.tmp/b04-image-ksu9Gc","limits":"Not executed in a native browser; open index.html in a permitted browser for synthetic consecutive-frame probe."}
===== baseline-negative.txt: exit 0 =====
Error: cold: layout-before-passive-effects: no URI text
at check (eval at <anonymous> (file:///workspace/scratch/0aaa9774aecc/single-package-staging/ycode/[eval1]:5:7), <anonymous>:270772:24)
at sample (eval at <anonymous> (file:///workspace/scratch/0aaa9774aecc/single-package-staging/ycode/[eval1]:5:7), <anonymous>:270784:5)
at eval (eval at <anonymous> (file:///workspace/scratch/0aaa9774aecc/single-package-staging/ycode/[eval1]:5:7), <anonymous>:270791:7)
at Object.react_stack_bottom_frame (eval at <anonymous> (file:///workspace/scratch/0aaa9774aecc/single-package-staging/ycode/[eval1]:5:7), <anonymous>:21620:23)
at runWithFiberInDEV (eval at <anonymous> (file:///workspace/scratch/0aaa9774aecc/single-package-staging/ycode/[eval1]:5:7), <anonymous>:2438:17)
at commitHookEffectListMount (eval at <anonymous> (file:///workspace/scratch/0aaa9774aecc/single-package-staging/ycode/[eval1]:5:7), <anonymous>:11076:165)
at commitHookLayoutEffects (eval at <anonymous> (file:///workspace/scratch/0aaa9774aecc/single-package-staging/ycode/[eval1]:5:7), <anonymous>:11056:62)
at commitLayoutEffectOnFiber (eval at <anonymous> (file:///workspace/scratch/0aaa9774aecc/single-package-staging/ycode/[eval1]:5:7), <anonymous>:11982:28)
at recursivelyTraverseLayoutEffects (eval at <anonymous> (file:///workspace/scratch/0aaa9774aecc/single-package-staging/ycode/[eval1]:5:7), <anonymous>:13021:15)
at commitLayoutEffectOnFiber (eval at <anonymous> (file:///workspace/scratch/0aaa9774aecc/single-package-staging/ycode/[eval1]:5:7), <anonymous>:12041:15)
An error occurred in the <CommitProbe> component.
Consider adding an error boundary to your tree to customize error handling behavior.
Visit https://react.dev/link/error-boundaries to learn more about error boundaries.
{"baseline":"0b613e522d444cbd8cd44ca17e9b1be498517978","expectedFailure":true,"error":"Error: safe first commit image","scope":"Same lifecycle fixture with baseline MarkdownImage only"}
===== build.txt: exit 0 =====
Successful full build including typecheck, tail:
out/renderer/assets/cytoscape.esm-bVGYt-iW.js 869.69 kB
out/renderer/assets/ArtifactPierreDiff-D5xhRc5y.js 1,119.58 kB
out/renderer/assets/chunk-FOHPRMQF-BCllzKJD.js 1,154.18 kB
out/renderer/assets/index-BYPIoTxk.js 3,766.11 kB
out/renderer/assets/editor.api2-dPwET-7w-BYIQ9bT3.js 4,889.23 kB
✓ built in 2.38s
npm notice
npm notice New major version of npm available! 11.9.0 -> 12.2.0
npm notice Changelog: https://github.com/npm/cli/releases/tag/v12.2.0
npm notice To update run: npm install -g npm@12.2.0
npm notice
===== tokens.txt: exit 1 =====
npm warn Unknown env config "http-proxy". This will stop working in the next major version of npm.
> ycode@0.0.7 check:tokens
> node scripts/check-design-tokens.mjs
设计 token 漂移检查(静态)
扫描:src/renderer/src 共 367 个文件(用时 46 ms)
baseline:scripts/design-token-baseline.json(334 个文件)
门禁分类:adapter 8 | core 6 | local 279(合计 293 个文件)
合计:裸 hex=611 裸 px=2680 !important=6 --wb-* 定义=525 var(--yc-*) 使用=1651 var(--wb-*) 使用=1209
非门禁分类:vendor 2 | recovered 22 | source 47 | tokenSource 3(合计 74 个文件,仅记录不阻塞)
合计:裸 hex=10642 裸 px=13642 !important=920 --wb-* 定义=17966 var(--yc-*) 使用=77 var(--wb-*) 使用=19638
非门禁相对 baseline:文件 +0;裸 hex +78 裸 px +64 !important +0 --wb-* 定义 +0 var(--yc-*) 使用 +22 var(--wb-*) 使用 -120
结果:失败,共 6 项:
[新增门禁文件] src/renderer/src/capabilities/recommended-flow.css(local):裸 px=21
[新增门禁文件] src/renderer/src/capabilities/skill-detail-shell.css(local):裸 px=21
[回归] src/renderer/src/capabilities/skills-host.css(local):裸 px 25 → 45(+20)
[新增门禁文件] src/renderer/src/workbuddy/composer/capability-picker.css(local):裸 hex=26,裸 px=48
[回归] src/renderer/src/workbuddy/composer/composer.css(local):裸 hex 23 → 38(+15);裸 px 83 → 139(+56)
[新增门禁文件] src/renderer/src/workbuddy/composer/prompt-queue.css(local):裸 hex=8,裸 px=35
提示:确认变更符合预期后运行 `node scripts/check-design-tokens.mjs --update-baseline` 刷新 baseline;
否则请改用 --yc-* token、复用现有值,或去掉重复的 --wb-* 定义。
提示(不失败,仅记录):3 个门禁文件 token 使用数上升:
src/renderer/src/capabilities/skills-host.css(local):var(--wb-*) 使用 12 → 19(+7)
src/renderer/src/workbuddy/composer/composer.css(local):var(--yc-*) 使用 35 → 48(+13);var(--wb-*) 使用 0 → 1(+1)
src/renderer/src/workbuddy/conversation/conversation.css(local):var(--yc-*) 使用 0 → 4(+4)
提示(不失败):baseline 中 8 个文件已不存在:src/renderer/src/components/ReportedRunUsage.tsx;src/renderer/src/workbuddy/subagents/SourceMemberIcon.tsx;src/renderer/src/workbuddy/subagents/SubagentCollaboration.tsx;src/renderer/src/workbuddy/subagents/SubagentDetailPanel.tsx;src/renderer/src/workbuddy/subagents/adapters.css;src/renderer/src/workbuddy/subagents/member-view.ts;src/renderer/src/workbuddy/subagents/source.css;src/renderer/src/workbuddy/subagents/theme.css
提示:新增门禁文件 36 个且无受控计数(允许):src/renderer/src/capabilities/CapabilityMaintenance.tsx(local);src/renderer/src/capabilities/RecommendedSkills.tsx(local);src/renderer/src/capabilities/SkillAvatar.tsx(local);src/renderer/src/capabilities/SkillDetailShell.tsx(local);src/renderer/src/capabilities/SkillModalPortal.tsx(local);src/renderer/src/capabilities/skill-modal-focus.ts(local);src/renderer/src/components/SessionLoading.tsx(local);src/renderer/src/components/TaskPopconfirm.tsx(local);src/renderer/src/components/session-loading.css(local);src/renderer/src/components/task-popconfirm.css(local);src/renderer/src/components/updates/UpdateSidebarCard.tsx(local);src/renderer/src/components/updates/update-ui-model.ts(local);src/renderer/src/components/updates/update-ui-store.ts(local);src/renderer/src/components/updates/updates-ui.css(local);src/renderer/src/ui/Button.tsx(local);src/renderer/src/ui/IconButton.tsx(local);src/renderer/src/ui/Input.tsx(local);src/renderer/src/ui/Popover.tsx(local);src/renderer/src/ui/Select.tsx(local);src/renderer/src/ui/Switch.tsx(local);…(还有 16 项,详见 --json)