docs(acceptance): record B01 follow-up and B02 Windows verification

This commit is contained in:
xiaohan.yuan committed 2026-10-21 13:46:57 +08:00
1 parent 0bc9faa129
commit bac89daf87
37 files changed
+5332

No files matched your search

@@ -0,0 +1,25 @@
> ycode@0.0.7 test:alignment
> node scripts/run-alignment-regression.mjs
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":5.6311999999999784,"storeHydrationMs":0.28300000000001546,"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 host approval policy unit checks passed (no SDK process/application/matching verification)
Mock SDK replay lifecycle passed: fail closed, retry, session isolation, independent mode guard
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: 14 checks passed (not pixel/SDK verification)
{"checks":37,"passed":true,"scope":"Isolated React DOM and CSS contracts; no native keyboard/layout/pixel acceptance"}
Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

@@ -0,0 +1,660 @@
> ycode@0.0.7 build
> npm run typecheck && electron-vite build
> ycode@0.0.7 typecheck
> tsc --noEmit -p tsconfig.node.json && tsc --noEmit -p tsconfig.web.json
vite v8.3.4 building ssr environment for production...
transforming...
✓ 444 modules transformed.
rendering chunks...
out/main/index.mjs 1,596.10 kB
✓ built in 400ms
vite v8.3.4 building ssr environment for production...
transforming...
✓ 2 modules transformed.
rendering chunks...
out/preload/index.cjs 15.89 kB
✓ built in 23ms
vite v8.3.4 building client environment for production...
transforming...
✓ 3039 modules transformed.
rendering chunks...
out/renderer/settings.html 1.57 kB
out/renderer/index.html 1.75 kB
out/renderer/assets/KaTeX_Size3-Regular-CTq5MqoE.woff 4.42 kB
out/renderer/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 4.92 kB
out/renderer/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 5.20 kB
out/renderer/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 5.46 kB
out/renderer/assets/KaTeX_Size4-Regular-BF-4gkZK.woff 5.98 kB
out/renderer/assets/KaTeX_Size2-Regular-oD1tc_U0.woff 6.18 kB
out/renderer/assets/KaTeX_Size1-Regular-C195tn64.woff 6.49 kB
out/renderer/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 6.90 kB
out/renderer/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 6.91 kB
out/renderer/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf 7.58 kB
out/renderer/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff 7.65 kB
out/renderer/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff 7.71 kB
out/renderer/assets/archify-owner-avatar-BdE-HOjX.jpg 9.46 kB
out/renderer/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 9.64 kB
out/renderer/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 10.34 kB
out/renderer/assets/KaTeX_Size4-Regular-DWFBv043.ttf 10.36 kB
out/renderer/assets/KaTeX_Script-Regular-D5yQViql.woff 10.58 kB
out/renderer/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 11.31 kB
out/renderer/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 11.34 kB
out/renderer/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf 11.50 kB
out/renderer/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 12.02 kB
out/renderer/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 12.21 kB
out/renderer/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf 12.22 kB
out/renderer/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff 12.31 kB
out/renderer/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf 12.34 kB
out/renderer/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf 12.36 kB
out/renderer/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff 13.20 kB
out/renderer/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff 13.29 kB
out/renderer/assets/workbuddy-buddy-thumbnail-2713ed5b-CUhW0EYr.png 13.42 kB
out/renderer/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 13.56 kB
out/renderer/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff 14.11 kB
out/renderer/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff 14.40 kB
out/renderer/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff 16.02 kB
out/renderer/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 16.40 kB
out/renderer/assets/KaTeX_Math-Italic-t53AETM-.woff2 16.44 kB
out/renderer/assets/KaTeX_Script-Regular-C5JkGWo-.ttf 16.64 kB
out/renderer/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 16.78 kB
out/renderer/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 16.98 kB
out/renderer/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff 18.66 kB
out/renderer/assets/KaTeX_Math-Italic-DA0__PXp.woff 18.74 kB
out/renderer/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff 19.41 kB
out/renderer/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf 19.43 kB
out/renderer/assets/KaTeX_Fraktur-Regular-CB_wures.ttf 19.57 kB
out/renderer/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf 19.58 kB
out/renderer/assets/KaTeX_Main-Italic-BMLOBm91.woff 19.67 kB
out/renderer/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf 22.36 kB
out/renderer/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf 24.50 kB
out/renderer/assets/KaTeX_Main-Bold-Cx986IdX.woff2 25.32 kB
out/renderer/assets/KaTeX_Main-Regular-B22Nviop.woff2 26.27 kB
out/renderer/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf 27.55 kB
out/renderer/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 28.07 kB
out/renderer/assets/KaTeX_Main-Bold-Jm3AIy58.woff 29.91 kB
out/renderer/assets/KaTeX_Main-Regular-Dr94JaBh.woff 30.77 kB
out/renderer/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf 31.19 kB
out/renderer/assets/KaTeX_Math-Italic-flOr_0UB.ttf 31.30 kB
out/renderer/assets/design-case-3-DaIvrslH.png 32.76 kB
out/renderer/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf 32.96 kB
out/renderer/assets/KaTeX_AMS-Regular-DMm9YOAa.woff 33.51 kB
out/renderer/assets/KaTeX_Main-Italic-3WenGoN9.ttf 33.58 kB
out/renderer/assets/design-case-4-0hVdAJQR.png 45.16 kB
out/renderer/assets/design-case-2-BH_iQ5r3.png 45.56 kB
out/renderer/assets/KaTeX_Main-Bold-waoOVXN0.ttf 51.33 kB
out/renderer/assets/design-case-1-DOYiafVz.png 52.97 kB
out/renderer/assets/KaTeX_Main-Regular-ypZvNtVU.ttf 53.58 kB
out/renderer/assets/KaTeX_AMS-Regular-DRggAlZN.ttf 63.63 kB
out/renderer/assets/workbuddy-appearance-dark-CXQX3TZX.png 109.34 kB
out/renderer/assets/workbuddy-appearance-light-BbpPCukh.png 113.02 kB
out/renderer/assets/codicon-ngg6Pgfi-ngg6Pgfi.ttf 121.97 kB
out/renderer/assets/kimi-DiLyRSiJ.svg 129.22 kB
out/renderer/assets/json.worker-DEWrzUkU-FVRG9O7E.js 438.21 kB
out/renderer/assets/worker-portable-D1lwTqsk-Dg0RNmO0.js 456.22 kB
out/renderer/assets/landing-hero-B6659kdy.png 629.28 kB
out/renderer/assets/html.worker-BC4B-9NY-BDdNc3ca.js 756.63 kB
out/renderer/assets/css.worker-D7wyZb8r-YRw1jg-F.js 1,086.92 kB
out/renderer/assets/ts.worker-BsXRl7a--BbqraoNr.js 8,187.30 kB
out/renderer/assets/ArtifactPierreDiff-CNAfnhAF.css 1.16 kB
out/renderer/assets/GeneralSettingsPanel-CntDyB52.css 1.25 kB
out/renderer/assets/AgentsSettingsPanel-R0teGDyD.css 2.56 kB
out/renderer/assets/AboutHelpSettingsPanel-ksqGLObi.css 5.72 kB
out/renderer/assets/updates-ui-COSnOGKS.css 6.84 kB
out/renderer/assets/AppearanceSettingsPanel-DcaRECSa.css 8.03 kB
out/renderer/assets/ShortcutsSettingsPanel-Bu_5_488.css 18.05 kB
out/renderer/assets/MemorySettingsPanel-C3dtDAif.css 32.49 kB
out/renderer/assets/ModelSettingsPanel-BjNmxQAH.css 88.98 kB
out/renderer/assets/PersonalizationSettingsPanel-DnAyzaM6.css 98.77 kB
out/renderer/assets/app-DH7L1ZF2.css 259.93 kB
out/renderer/assets/index-CvX53u9X.css 2,683.62 kB
out/renderer/assets/pie-WAS4IAKB-1a9lbjhh.js 0.11 kB
out/renderer/assets/info-A6RAGUB7-Dsq8pPGK.js 0.11 kB
out/renderer/assets/radar-RG4KPBEZ-BwNT2qWb.js 0.11 kB
out/renderer/assets/packet-AYTQ26CC-C-iOIVQo.js 0.11 kB
out/renderer/assets/cynefin-OW5HDTMX-CTYbUR58.js 0.11 kB
out/renderer/assets/treemap-WGGIJYW6-CWek0LQD.js 0.11 kB
out/renderer/assets/wardley-WFR3VGLG-BnrEXTnU.js 0.11 kB
out/renderer/assets/gitGraph-4MIJSDKK-NHpEvzKf.js 0.12 kB
out/renderer/assets/railroad-74A4TZTK-CyYHr3KR.js 0.12 kB
out/renderer/assets/treeView-Q6P3EWNA-CzdWA6Mh.js 0.12 kB
out/renderer/assets/railroad-peg-WCYAUIDC-DyA9P8dX.js 0.12 kB
out/renderer/assets/architecture-7GRP2DOG-VyF0wzFW.js 0.12 kB
out/renderer/assets/railroad-abnf-HS5TGJTU-DWOH6PDU.js 0.12 kB
out/renderer/assets/railroad-ebnf-LZEXJU2U-B8jXqV-T.js 0.12 kB
out/renderer/assets/eventmodeling-NTZA5JFV-Dmu4IHsI.js 0.12 kB
out/renderer/assets/array-75Ih5Qg4.js 0.16 kB
out/renderer/assets/channel-Bye_tFRR.js 0.25 kB
out/renderer/assets/init-DHdG6DHP.js 0.27 kB
out/renderer/assets/chunk-Y2CYZVJY-CrOJDJJy.js 0.38 kB
out/renderer/assets/chunk-JWPE2WC7-BWmaSNkB.js 0.42 kB
out/renderer/assets/chunk-2Q5K7J3B-BBOGhvIe.js 0.44 kB
out/renderer/assets/prism-tsx-BJWEHjlk.js 0.48 kB
out/renderer/assets/chunk-5VM5RSS4-D50WUAUX.js 0.52 kB
out/renderer/assets/chunk-XXDRQBXY-BsO966Nz.js 0.58 kB
out/renderer/assets/flowDiagram-HODETNUW-BZrFLTC0.js 0.59 kB
out/renderer/assets/prism-json-DxLGXN1o.js 0.62 kB
out/renderer/assets/codeowners-C7Y3CTAA-BmB2_gvY.js 0.75 kB
out/renderer/assets/prism-clike-BcH_eOfE.js 0.89 kB
out/renderer/assets/tsv-DVa1_Ovr-BeS2kE5e.js 0.94 kB
out/renderer/assets/shellsession-C0HwRpr0-B630Ulnl.js 0.96 kB
out/renderer/assets/javascript-DGySzfUB-CQaVVFGk.js 0.99 kB
out/renderer/assets/settings-CauUETdq.js 1.01 kB
out/renderer/assets/infoDiagram-27XIBGKW-Bulf8uQR.js 1.09 kB
out/renderer/assets/swimlanesDiagram-VR7AAH4N-BSjvAxa9.js 1.09 kB
out/renderer/assets/html-derivative-D3Jld805-D0QQ5MTi.js 1.10 kB
out/renderer/assets/prism-go-Cw8Jg9YT.js 1.11 kB
out/renderer/assets/classDiagram-ZZMXUADV-B5IckmXo.js 1.16 kB
out/renderer/assets/classDiagram-v2-VYDZK3BY-pNfhH-ZZ.js 1.16 kB
out/renderer/assets/stateDiagram-v2-MP3YSRHH-DhZlJKgF.js 1.16 kB
out/renderer/assets/qmldir-DIq06gp2-CFVtueeV.js 1.20 kB
out/renderer/assets/git-rebase-CgwCWTNR-Cpss9r90.js 1.23 kB
out/renderer/assets/chunk-POPQ4Y6H-7RcIGbEp.js 1.23 kB
out/renderer/assets/azcli-Bsxmaz-H-Dgh56k5-.js 1.26 kB
out/renderer/assets/personalization-prefs-DASR3vwn.js 1.28 kB
out/renderer/assets/csv-BRhERoQG-DKrQczXm.js 1.36 kB
out/renderer/assets/prism-latex-CHSuA_Lo.js 1.38 kB
out/renderer/assets/jsx-runtime-C48wkPcG.js 1.41 kB
out/renderer/assets/git-commit-DGtBy1vY-s2uHofP2.js 1.47 kB
out/renderer/assets/AgentsSettingsPanel-CMYBwUKH.js 1.56 kB
out/renderer/assets/xsl-DV28r3Jw-B8bWzO_h.js 1.59 kB
out/renderer/assets/dotenv-DXc2fSbR-CUbEjgJq.js 1.62 kB
out/renderer/assets/general-settings-icons-DOmPIusw.js 1.64 kB
out/renderer/assets/prism-scala-CRTYzCpy.js 1.65 kB
out/renderer/assets/ini-D4-1Iswn-DaNDgFS8.js 1.65 kB
out/renderer/assets/prism-typescript-D-7ZUUQ-.js 1.65 kB
out/renderer/assets/sizeCapture-INFHLROL-CCEMv_MJ.js 1.68 kB
out/renderer/assets/csp-Bsbijh2H-033SDyRW.js 1.69 kB
out/renderer/assets/sparql-Mj-YIaDH-DAUou2oc.js 1.71 kB
out/renderer/assets/prism-css-Cmyw76Xa.js 1.73 kB
out/renderer/assets/ini-DMSv7OY2-xgSkktY4.js 1.74 kB
out/renderer/assets/rolldown-runtime-BJCASTsb-DKQFAHUF.js 1.78 kB
out/renderer/assets/line-D_yBR5ay.js 1.89 kB
out/renderer/assets/fortran-fixed-form-D91DiZLE-NxoUlVkB.js 1.91 kB
out/renderer/assets/docker-B7J3eHK7-C3FNXPS_.js 1.96 kB
out/renderer/assets/hxml-938TheZ7-pE5ojWPT.js 1.97 kB
out/renderer/assets/desktop-BwI-o01e-Da9rFJOd.js 2.03 kB
out/renderer/assets/ordinal-CmpyCcm_.js 2.22 kB
out/renderer/assets/prism-c-B7tsC1jE.js 2.23 kB
out/renderer/assets/rolldown-runtime-EITvVbkG.js 2.32 kB
out/renderer/assets/erb-BgMB3Uiw-CLkRQ9Hf.js 2.40 kB
out/renderer/assets/prism-kotlin-Bc2NQYRR.js 2.43 kB
out/renderer/assets/jssm-CIisorE2-ggX0kbSA.js 2.44 kB
out/renderer/assets/prism-python-CTkfasgb.js 2.48 kB
out/renderer/assets/reg-mzCtpvUf-BHC3bGU6.js 2.54 kB
out/renderer/assets/bat-2PwuskcT-BbFmQdFU.js 2.55 kB
out/renderer/assets/prism-mermaid-DSoNsh6-.js 2.56 kB
out/renderer/assets/pla-HAHcX3CH-DHyEyFew.js 2.57 kB
out/renderer/assets/sb-O6mPt74--_nMcDiF8.js 2.60 kB
out/renderer/assets/chunk-GVQU2GXP-Wi49q5c7.js 2.61 kB
out/renderer/assets/edge-DcEd3r9D-ZJX3cnY_.js 2.62 kB
out/renderer/assets/scheme-C-yCXfo--BHhgh59u.js 2.66 kB
out/renderer/assets/flow9-z3HgHIql-qOic_Sv2.js 2.72 kB
out/renderer/assets/prism-yaml-cmjQ_1eD.js 2.77 kB
out/renderer/assets/gleam-DEEAoY6G-DgJJp7nh.js 2.78 kB
out/renderer/assets/railroadDiagram-O6MQD6OU-DqFNIv2D.js 2.78 kB
out/renderer/assets/diff-lAxbRYdS--5gtlmD4.js 2.79 kB
out/renderer/assets/hy-BKymZdC0-4uNvYh3y.js 2.86 kB
out/renderer/assets/dockerfile-CnkhFuxG-CfXHMZr-.js 3.01 kB
out/renderer/assets/openscad-BRTETpP_-BThzc9qL.js 3.03 kB
out/renderer/assets/pascaligo-DI1dd1Zd-D23AoFdQ.js 3.03 kB
out/renderer/assets/log-Cn1ZE6kb-BE4srnlV.js 3.05 kB
out/renderer/assets/objective-c-gNYZndaF-4hkcNMcE.js 3.06 kB
out/renderer/assets/sparql-DxWbGozt-B7qTmycl.js 3.08 kB
out/renderer/assets/prism-markup-templating-D4pSJIpH.js 3.11 kB
out/renderer/assets/prism-cpp-CEgmwlDT.js 3.11 kB
out/renderer/assets/cameligo-B6LDhzzR-DSNRk43W.js 3.12 kB
out/renderer/assets/wenyan-BVgiL1tD-C7ph_xMt.js 3.12 kB
out/renderer/assets/cairo-D_LzMZ4I-C21twps2.js 3.17 kB
out/renderer/assets/prism-rust-Du0Qa8GC.js 3.18 kB
out/renderer/assets/lua-CJt09SGy-3O0VAMVx.js 3.19 kB
out/renderer/assets/graphql-C0cKWTiE-BQOKksLE.js 3.20 kB
out/renderer/assets/berry-DTcSbIs7-DsDdtWdB.js 3.20 kB
out/renderer/assets/jsonl-Cn_fzNA8-cIG9lf61.js 3.21 kB
out/renderer/assets/json-CKKhFIOr-DuiQFrCF.js 3.29 kB
out/renderer/assets/mips-Df5bwPtM-DJn7b529.js 3.29 kB
out/renderer/assets/jsonc-Bf3Xcgeq-BGBJ2TDY.js 3.31 kB
out/renderer/assets/logo-BxqPaaID-DK9gUnx4.js 3.33 kB
out/renderer/assets/abnfDiagram-VCTEODGH-BcjOgNTo.js 3.36 kB
out/renderer/assets/go-BejFoqvR-BnGoIlsY.js 3.42 kB
out/renderer/assets/po-DI6EG-tz-DIkePE8T.js 3.44 kB
out/renderer/assets/lexon-5NyrCfQ6-B1bdOCGH.js 3.45 kB
out/renderer/assets/prism-sql-BggiY1Ht.js 3.45 kB
out/renderer/assets/json5-BlijqrwT-Ci88mndw.js 3.45 kB
out/renderer/assets/mipsasm-U3SQfJCQ-kat_Vj1M.js 3.46 kB
out/renderer/assets/sophia-foSZ3xPI-DGYIHURw.js 3.47 kB
out/renderer/assets/tasl-C74Cvwdf-se1Ptgso.js 3.49 kB
out/renderer/assets/genie-CjS3m_gh-DHydh9_z.js 3.56 kB
out/renderer/assets/prism-swift-xplGsQ1n.js 3.56 kB
out/renderer/assets/vala-DMgevQbf-ByJQiTkp.js 3.57 kB
out/renderer/assets/pegDiagram-XKGWAZYB-C8lDnYYb.js 3.59 kB
out/renderer/assets/rel-D6dNeDZv-CUAJzmkw.js 3.60 kB
out/renderer/assets/prism-java-6uFEGwWz.js 3.63 kB
out/renderer/assets/fsharp-Ba-cvOiG-BoxQhS9v.js 3.64 kB
out/renderer/assets/chunk-P2QGCYS3-HlyjybPv.js 3.65 kB
out/renderer/assets/ebnfDiagram-PWID7BFC-CcIdRN64.js 3.66 kB
out/renderer/assets/qsharp-78iLGMHs-Dbh3PRIx.js 3.68 kB
out/renderer/assets/m3-Bu81_nWr-4t51Qx0i.js 3.69 kB
out/renderer/assets/chunk-F27PBJKO-CSIxpenx.js 3.70 kB
out/renderer/assets/pascal-DyPgZbsX-Ba58YM7a.js 3.71 kB
out/renderer/assets/path-CSWwviF2.js 3.79 kB
out/renderer/assets/fluent-BSSEgVQa-BCOQigl1.js 3.81 kB
out/renderer/assets/splunk-BdqSfgpd-BtOEh0Mo.js 3.81 kB
out/renderer/assets/jsonnet-Bn71vRY8-QjPNMWdY.js 3.82 kB
out/renderer/assets/ssh-config-BO51LXox-DkFt_ueS.js 3.82 kB
out/renderer/assets/bicep-DujF3y-4-DHww3ZLF.js 3.87 kB
out/renderer/assets/narrat-DdgkgBr0-CSyxDqta.js 3.87 kB
out/renderer/assets/redis-Bo427DT4-DBDF4ZWx.js 3.88 kB
out/renderer/assets/turtle-DAmmiOda-C48PN72o.js 3.92 kB
out/renderer/assets/dist-CE9GMTNb.js 3.97 kB
out/renderer/assets/prism-jsx-BO0yI1A3.js 3.97 kB
out/renderer/assets/xml-BBFzlEmT-CqLnJtYa.js 3.99 kB
out/renderer/assets/java-Z7anYNQ6-DdC7WVZS.js 4.01 kB
out/renderer/assets/r-Xh-gXEK4-DKEPC8dA.js 4.02 kB
out/renderer/assets/ron-CdysqNkW-BG7UwPdX.js 4.11 kB
out/renderer/assets/zenscript-XbBI4c9W-C-aTQo6e.js 4.12 kB
out/renderer/assets/glsl-CZF-bvQV-UaBdSZy0.js 4.14 kB
out/renderer/assets/shell-DGp7WuK3-X00pamiI.js 4.15 kB
out/renderer/assets/gn-DJxfXStl-BD_k0CWf.js 4.20 kB
out/renderer/assets/kotlin-C61BvWgT-B7MkJpdU.js 4.20 kB
out/renderer/assets/typespec-B704GmX3-f1l-QmOw.js 4.26 kB
out/renderer/assets/kdl-YTd72GVl-DLkP_pAB.js 4.27 kB
out/renderer/assets/AppearanceSettingsPanel-B_352Jrg.js 4.28 kB
out/renderer/assets/hurl-CDXCvJNd-Xd5k76nE.js 4.28 kB
out/renderer/assets/cypher-CjfQI0Y9-9gjOyi6P.js 4.33 kB
out/renderer/assets/pascal-CLPA94yO-C11lM2uy.js 4.35 kB
out/renderer/assets/powershell-CaPzBwIT-C9KgMPOP.js 4.50 kB
out/renderer/assets/tcl-D-NiFh9X-CYwv4uzi.js 4.63 kB
out/renderer/assets/apex-BE-040ts-wdfiR7V6.js 4.65 kB
out/renderer/assets/tcl-DowxIvU4-Bbhzqrsw.js 4.65 kB
out/renderer/assets/rosmsg-DDyuMVTo-DSHWRdSZ.js 4.72 kB
out/renderer/assets/nextflow-DVTlkzu9-Cis-JUmb.js 4.75 kB
out/renderer/assets/http-DhxVjYFh-CjwVOaui.js 4.76 kB
out/renderer/assets/hcl-CbjaVS9i-DCS43mBd.js 4.79 kB
out/renderer/assets/rust-Ij2gfGoT-DLzaBWYs.js 4.83 kB
out/renderer/assets/polar-CwTxzzWE-DygHL4ZA.js 4.87 kB
out/renderer/assets/prism-ruby-PgHh3fQm.js 4.91 kB
out/renderer/assets/fennel-COJTUo2O-DYh8-dep.js 4.97 kB
out/renderer/assets/bibtex-yEKRWsaj-xHthw1sC.js 5.00 kB
out/renderer/assets/coffee-CcgZJF1B-DkN4xoBX.js 5.04 kB
out/renderer/assets/llvm-DiFwU398-BQjCVu39.js 5.25 kB
out/renderer/assets/less-CXux59mP-BM7SkPLH.js 5.27 kB
out/renderer/assets/msdax-DEyWhkWP-CwdIr_-P.js 5.29 kB
out/renderer/assets/prism-javascript-B6zosBCV.js 5.31 kB
out/renderer/assets/wgsl-Ds7VVNHP-yP3bMkfO.js 5.34 kB
out/renderer/assets/markdown-CBag5COD-B_1rbk64.js 5.36 kB
out/renderer/assets/dart-DK8_VUW5-Bnb_Tn57.js 5.39 kB
out/renderer/assets/zig-BBWfbOQ5-B8x_JL1P.js 5.54 kB
out/renderer/assets/restructuredtext-D2p7PcFG-DDHAm_JI.js 5.55 kB
out/renderer/assets/dax-CmrIxjmL-CDTyHmZ_.js 5.56 kB
out/renderer/assets/gdresource-4lq4eh4q-CjhvlVte.js 5.56 kB
out/renderer/assets/qml-D6gd64uC-_ykXVPoZ.js 5.57 kB
out/renderer/assets/bicep-wTwvD1CI-C568hcwN.js 5.58 kB
out/renderer/assets/cssMode-Z-o80aSY-Crw7T5pi.js 5.59 kB
out/renderer/assets/awk-DTjcVAOD-BmfaVU4m.js 5.66 kB
out/renderer/assets/liquid-Dv-zz5BA-D9ukCDuL.js 5.71 kB
out/renderer/assets/csharp-DpS7Vfy9-CbQzv1ql.js 5.76 kB
out/renderer/assets/coq-BFytDJOI-C5vNmx0q.js 5.81 kB
out/renderer/assets/swift-C3A42nmX-BBVToPkN.js 5.83 kB
out/renderer/assets/xml-bIkPj5aH-Bx1v5u6-.js 5.89 kB
out/renderer/assets/ecl-CYzojQ6a-C8m0_osY.js 5.91 kB
out/renderer/assets/jinja-Dl-Ji_JA-BBL5sTd0.js 5.92 kB
out/renderer/assets/lean-Cu10prRO-BUTVAAdc.js 6.03 kB
out/renderer/assets/yaml-GEMDST6R-D-0AGe4F.js 6.09 kB
out/renderer/assets/moonbit-B8-g2u5v-CGBFUznC.js 6.10 kB
out/renderer/assets/powerquery-tKWDTKOo-CejxekA_.js 6.11 kB
out/renderer/assets/SourceCodePreview-Czir01Qu.js 6.11 kB
out/renderer/assets/python-CHafhQyI-DmJIfgbV.js 6.14 kB
out/renderer/assets/shaderlab-Df7nOKvI-0G488FSx.js 6.16 kB
out/renderer/assets/css-sG8ozMHf-pZGexMoj.js 6.17 kB
out/renderer/assets/cpp-CipCPBaT-7uQRIwsC.js 6.17 kB
out/renderer/assets/vb-BKV3Sgm5-D5ytx6Ln.js 6.29 kB
out/renderer/assets/htmlMode-BDZbYlMj-2xcr-6-m.js 6.40 kB
out/renderer/assets/red-CYaKK_PD-iiAMl8iL.js 6.45 kB
out/renderer/assets/min-dark-DGPfDRqJ-gZu6HtcU.js 6.48 kB
out/renderer/assets/pug-EKWpNZSi-oQ708bsr.js 6.51 kB
out/renderer/assets/prisma-CdZyz3OC-ChFCtYaa.js 6.53 kB
out/renderer/assets/gdshader-ryZhEIxg-DpcQqwXn.js 6.55 kB
out/renderer/assets/ara-_lrJyEFe-qigo-wGx.js 6.56 kB
out/renderer/assets/clojure-WSq30mUj-Bswhoa1y.js 6.61 kB
out/renderer/assets/toml-DPP887_3-aOuHoLTy.js 6.62 kB
out/renderer/assets/postcss-CcIp2ENG-DpmxBCXW.js 6.64 kB
out/renderer/assets/verilog-bragEGMk-CemzLugw.js 6.64 kB
out/renderer/assets/solarized-light-BIMszn7B-vPMkTTwP.js 6.68 kB
out/renderer/assets/cypher-COYrq2Yy-BtVrfsLp.js 6.75 kB
out/renderer/assets/arc-LpCwTDer.js 6.75 kB
out/renderer/assets/proto-CQIfhs_g-Deqofbl3.js 6.77 kB
out/renderer/assets/smalltalk-BLGdLDJX-BKGgemER.js 6.79 kB
out/renderer/assets/vb-D1Cw85Ss-BSz-V9M4.js 6.86 kB
out/renderer/assets/talonscript-DA9pg7Tj-CPXKQ95R.js 6.96 kB
out/renderer/assets/r-Bb2Mu7Fo-Dq0URONw.js 7.00 kB
out/renderer/assets/solarized-dark-D_I-4EGa-BZbeAUhW.js 7.04 kB
out/renderer/assets/diagram-Z3DM3KII-CRFA9WLO.js 7.08 kB
out/renderer/assets/riscv-CQHqXr1Z-BFlZFId-.js 7.11 kB
out/renderer/assets/soy-DybHqX1A-DOhErZPj.js 7.15 kB
out/renderer/assets/min-light-BF0EjVgr-DvViuJW_.js 7.16 kB
out/renderer/assets/scheme-Dn0tgEWN-BK64z0tZ.js 7.37 kB
out/renderer/assets/prism-bash-B2ETaHUm.js 7.43 kB
out/renderer/assets/typescript-sfPIqb8J-DtIl1kXb.js 7.44 kB
out/renderer/assets/hlsl-CAmjcFpk-B3FZWMVz.js 7.48 kB
out/renderer/assets/mdx-Bdu4uO-C-BrzgNjCw.js 7.58 kB
out/renderer/assets/qss-DkzwWM0J-04JPp7d-.js 7.67 kB
out/renderer/assets/html-DKbmsqz6-Cnkf6ew3.js 7.69 kB
out/renderer/assets/systemd-CS6mVasZ-HbzlQlDs.js 8.07 kB
out/renderer/assets/monokai-CYqILLdj-CEXuJ8HO.js 8.08 kB
out/renderer/assets/twig-r8vgPZrm-D2l24YwI.js 8.18 kB
out/renderer/assets/updates-ui-BoiWSsup.js 8.22 kB
out/renderer/assets/wgsl-D_5Qxf6T-D508aVGZ.js 8.27 kB
out/renderer/assets/sdbl-BXfz6d3_-C4Qk7OPN.js 8.42 kB
out/renderer/assets/regexp-Dv0OUts_-BqK6b4KR.js 8.46 kB
out/renderer/assets/prism-php-dzcOOH50.js 8.49 kB
out/renderer/assets/systemverilog-BreNGkRs-RIXr4hNf.js 8.65 kB
out/renderer/assets/plsql-C-xpsZfV-frBdohcC.js 8.71 kB
out/renderer/assets/vue-html-DvuHo2mm-b7I-opwf.js 8.71 kB
out/renderer/assets/haml-CIYwkycC-3fSMp7m2.js 8.81 kB
out/renderer/assets/scss-CLoW-2dr-BBC_GO_6.js 8.86 kB
out/renderer/assets/dart-CBkkDIWs-ezKLFP5s.js 8.94 kB
out/renderer/assets/horizon-CELVL8Ba-x0NmpRb6.js 8.97 kB
out/renderer/assets/horizon-bright-DBDyMeUQ-Bhh-QDk3.js 8.98 kB
out/renderer/assets/julia-DvNkK6LK-Bi3Rlfah.js 9.04 kB
out/renderer/assets/clojure-886L7m2N-BhGJsUM7.js 9.14 kB
out/renderer/assets/make-CsAfL-jc-DaQVAww0.js 9.18 kB
out/renderer/assets/andromeeda--j5Bq-48-DxyWS_fJ.js 9.21 kB
out/renderer/assets/dark-plus-FAPM6M6c-DKexDF--.js 9.29 kB
out/renderer/assets/sas-BQIEUTPQ-Bwx-ZPYU.js 9.31 kB
out/renderer/assets/slack-dark-nDxLkSCC-C5pzIEPN.js 9.31 kB
out/renderer/assets/perl-Bec3eWyr-CDmSu3_s.js 9.32 kB
out/renderer/assets/plastic-DY_h9Vzh-CZzPFkTC.js 9.49 kB
out/renderer/assets/sass-Ysv8HTNa-CHNQIGaT.js 9.49 kB
out/renderer/assets/st-BrgXZ-Ag-BUs-RRgp.js 9.58 kB
out/renderer/assets/typst-Co5rZla4-COemceoz.js 9.61 kB
out/renderer/assets/slack-ochin-7zJWY-K--C7KFpXik.js 9.63 kB
out/renderer/assets/defaultLocale-QNqK0iCN.js 9.84 kB
out/renderer/assets/handlebars-CIJAyfa9-6toBlNYk.js 9.94 kB
out/renderer/assets/jison-Cbw0l5It-BNek_9Kq.js 9.95 kB
out/renderer/assets/sql-DviNlDJO-CwV6bDIP.js 9.97 kB
out/renderer/assets/kotlin-DIw6ua6F-CdVnL0aF.js 10.01 kB
out/renderer/assets/cmake-CyNDuJo8-2Hk4zQCd.js 10.07 kB
out/renderer/assets/light-plus-DkScKIB5-e8Q5AKjf.js 10.14 kB
out/renderer/assets/hcl-DoJdlYjN-DdpM5wFm.js 10.25 kB
out/renderer/assets/scala-Dj45wWzI-CAMCqIXS.js 10.40 kB
out/renderer/assets/postiats-SaHD9Qcv-FPvOr1pn.js 10.45 kB
out/renderer/assets/beancount-CyZf3Huc-C4n-y8pc.js 10.58 kB
out/renderer/assets/tex-gcnXexI3-BUpeblVA.js 10.60 kB
out/renderer/assets/php-Bn8AF0uj-CBbpr2vs.js 10.62 kB
out/renderer/assets/nextflow-groovy-D4ZyOBoZ-C7jziUwg.js 10.63 kB
out/renderer/assets/dream-maker-5oXa1Z51-CLRrQkBL.js 10.67 kB
out/renderer/assets/ts-tags-xeTAUNHG-CG_gr3En.js 10.70 kB
out/renderer/assets/raku-Bfr41qeN-C7t9XlCj.js 10.72 kB
out/renderer/assets/mysql-CZJtil0v-CP4gK9vT.js 10.73 kB
out/renderer/assets/task-menu-icons-BRdNqJF0.js 10.78 kB
out/renderer/assets/prism-csharp-D9xOwbIN.js 10.91 kB
out/renderer/assets/yaml-CsitfczK-Cu7vbJZs.js 10.97 kB
out/renderer/assets/diagram-UQ7AKVKN-BXObzj4d.js 11.05 kB
out/renderer/assets/elm-Dl1XrIiD-CwXBAFKd.js 11.18 kB
out/renderer/assets/just-He7qscmV-Bkq-0zku.js 11.19 kB
out/renderer/assets/redshift-Djb4PK3z-9Ar4PFWD.js 11.35 kB
out/renderer/assets/github-light-B_J7N1HZ-DWSXFnsf.js 11.38 kB
out/renderer/assets/ruby-CxOCB7_P-BzsjPJ6Z.js 11.48 kB
out/renderer/assets/prolog-DAqMMM08-BFKdnH0S.js 11.56 kB
out/renderer/assets/terraform-BW8B2WXV-zeRjs0zr.js 11.59 kB
out/renderer/assets/github-dark-BgqEY2WG-C9QbkZU3.js 11.60 kB
out/renderer/assets/puppet-CaR8DEdW-Biai9WKX.js 11.65 kB
out/renderer/assets/pkl-DrXR3Dxy-Bno7kqPT.js 11.67 kB
out/renderer/assets/laserwave-Clkc4Pj8-DOjuqF9n.js 11.69 kB
out/renderer/assets/pieDiagram-E7YTZNPT-D3EPLKnW.js 11.95 kB
out/renderer/assets/rst-BJFdabDk-Cv-fSo2B.js 12.04 kB
out/renderer/assets/linear-WS155L0r.js 12.11 kB
out/renderer/assets/wasm-DYwNZ-r4-BrA6oOvM.js 12.21 kB
out/renderer/assets/hjson-CmvCiVhY-BdH9CbZ2.js 12.25 kB
out/renderer/assets/razor-D5kquflS-CWY5AfCS.js 12.39 kB
out/renderer/assets/abap-BJyKdrbp-hWIyERPx.js 12.52 kB
out/renderer/assets/handlebars-B1z64YSt-MC-VEvxc.js 12.52 kB
out/renderer/assets/apache-BUbWdjM2-2Zu7IlVl.js 12.66 kB
out/renderer/assets/vesper-B5lCMuIY-CXGQHRuW.js 12.88 kB
out/renderer/assets/pgsql-BYm17UA1-Cvj1smQI.js 12.93 kB
out/renderer/assets/protobuf-BOGxqb2m-yTWn-oM_.js 12.98 kB
out/renderer/assets/bat-D2y8Uewi-CEJzP2ue.js 13.09 kB
out/renderer/assets/fish-CaZR_ofm-BcO_q5kQ.js 13.24 kB
out/renderer/assets/elixir-Lipcswxh-DnZCznfr.js 13.27 kB
out/renderer/assets/v-wnWoBHkK-CzCOTyIp.js 13.41 kB
out/renderer/assets/AboutHelpSettingsPanel-Ui_VOvh7.js 13.48 kB
out/renderer/assets/vitesse-light-DQXFiRFx-Ct7fN8pJ.js 13.81 kB
out/renderer/assets/aurora-x-9vUYYjHV-CImifmUW.js 13.85 kB
out/renderer/assets/vitesse-black-cwK5rWgD-BGrq81WC.js 13.87 kB
out/renderer/assets/vitesse-dark-CsfgW0oH-Dx8cqxrm.js 13.96 kB
out/renderer/assets/ShortcutsSettingsPanel-KgJeI7QZ.js 14.15 kB
out/renderer/assets/pug-D0UckVoV-BTWU19Nk.js 14.16 kB
out/renderer/assets/synthwave-84-LX1B8mRG-yuUErnSx.js 14.23 kB
out/renderer/assets/github-light-default-BRmIzqWc-B3gMi7zW.js 14.36 kB
out/renderer/assets/clarity-AxkJPY5c-DfVHSVIk.js 14.48 kB
out/renderer/assets/github-light-high-contrast-BUKIZOxn-DL0r2b0z.js 14.49 kB
out/renderer/assets/github-dark-dimmed-DoIdqTey-CDc6YqEM.js 14.64 kB
out/renderer/assets/github-dark-default-CwWjzI40-_0bgyJYv.js 14.64 kB
out/renderer/assets/chunk-PWAF6VOD-DuIRO4kt.js 14.76 kB
out/renderer/assets/github-dark-high-contrast-bFLNMLvK-BUp3HmXY.js 14.80 kB
out/renderer/assets/diagram-S7CK7UJ4-DV_ERwD-.js 14.98 kB
out/renderer/assets/gnuplot-Dw3FRha5-D6o75ylb.js 14.98 kB
out/renderer/assets/rust-C0Ih6nmc-Bm01RMLz.js 15.27 kB
out/renderer/assets/actionscript-3-O8jnLcvn-C7OtofMN.js 15.41 kB
out/renderer/assets/luau-BzxGbjcn-aQpsBeQB.js 15.64 kB
out/renderer/assets/nix-zl191KBb-CxSq6jsB.js 15.85 kB
out/renderer/assets/lua-BwTLfNCK-IuSxl8fO.js 16.04 kB
out/renderer/assets/abap-FvPUHv8B-BVQp86jh.js 16.05 kB
out/renderer/assets/solidity-96fhzG-Q-CZEni-ZB.js 16.28 kB
out/renderer/assets/matlab-8ZQqHKQX-g_ODc8QU.js 16.29 kB
out/renderer/assets/cue-eHSfcyUV-BO0bCEDm.js 16.40 kB
out/renderer/assets/kusto-D8vBBISG-C0y2Wtyy.js 16.45 kB
out/renderer/assets/powerquery-B7BjLMcF-BkVSWPtX.js 16.49 kB
out/renderer/assets/elixir-B1NaQxrO-Ba6X-FuW.js 16.50 kB
out/renderer/assets/react-DrereneL.js 16.50 kB
out/renderer/assets/odin-B-YqhW9I-B-ZI05Ll.js 16.71 kB
out/renderer/assets/solidity-Dpt2BLAA-BD_YSA0r.js 16.98 kB
out/renderer/assets/bird2-BMkLvc4r-CyoW3El7.js 17.17 kB
out/renderer/assets/kanagawa-wave-CM_o6oKV-VzWuxPSA.js 17.32 kB
out/renderer/assets/kanagawa-lotus-Cj3XDpoG-cmeMwVaD.js 17.32 kB
out/renderer/assets/kanagawa-dragon-D_NPnIy_-Cyd8MANv.js 17.33 kB
out/renderer/assets/cynefinDiagram-5FMLGOSQ-4X_-lqaW.js 17.61 kB
out/renderer/assets/stateDiagram-D77RDMKH-B5Qv9-kY.js 18.11 kB
out/renderer/assets/chunk-L3NEJ4N5-MEgGvnk-.js 18.16 kB
out/renderer/assets/liquid-D_7zu7XR-BZ3z6-Mj.js 18.46 kB
out/renderer/assets/svelte-DUGqPubT-CAfIEh4G.js 18.60 kB
out/renderer/assets/graphql-ObxcfEHH-9pUo2yjR.js 18.65 kB
out/renderer/assets/jsonMode-DdQpkp6D-Bsga_9WC.js 18.79 kB
out/renderer/assets/material-theme-q28j4V_0-s4HtqlFv.js 18.81 kB
out/renderer/assets/material-theme-ocean-DAvlEnSm-Cyw7qD-l.js 18.83 kB
out/renderer/assets/material-theme-darker-CHEuMVX9-D-hz3EEt.js 18.83 kB
out/renderer/assets/material-theme-lighter-DY4T1_JG-C0HwKluR.js 18.84 kB
out/renderer/assets/material-theme-palenight-CqDFvQ-v-RoTowTME.js 18.84 kB
out/renderer/assets/gherkin-BcjDDslM-BdnbjalD.js 19.20 kB
out/renderer/assets/gdscript-CekKc1U_-DVmAmHvE.js 19.21 kB
out/renderer/assets/groovy-DH3arekX-StnUgJL0.js 19.38 kB
out/renderer/assets/mdc-D-U85KZE-DPbAVRTg.js 19.85 kB
out/renderer/assets/diagram-VSXAHHWV-BjMahNBE.js 20.01 kB
out/renderer/assets/move-CmExnPjU-DPj_eIaE.js 20.22 kB
out/renderer/assets/ayu-dark-BeByMiYw-CS3MEELg.js 20.27 kB
out/renderer/assets/ayu-mirage-C1jJ6Jfs-CnA8kJ7r.js 20.28 kB
out/renderer/assets/ayu-light-DmTZeN54-CDULCKqM.js 20.35 kB
out/renderer/assets/glimmer-js-D9ZnrcNN-BS431Ogg.js 20.44 kB
out/renderer/assets/glimmer-ts-DuhFj6qR-CsFesiaT.js 20.44 kB
out/renderer/assets/viml-DPVJ_KYe-De3CdqgJ.js 20.56 kB
out/renderer/assets/nushell-Cd8Dwa1M-Dhf9XkYz.js 20.62 kB
out/renderer/assets/snazzy-light-B8znOqT6-B1FX3-IF.js 20.97 kB
out/renderer/assets/dagre-GXQ25YYZ-DHWBBxAd.js 21.01 kB
out/renderer/assets/dracula-DeMffiYO-Bl4juROY.js 21.26 kB
out/renderer/assets/dracula-soft-BnfvpcDv-CYsUeSum.js 21.27 kB
out/renderer/assets/twig-7zjsCqYg-CMujKsZl.js 21.44 kB
out/renderer/assets/freemarker2-enkimFXA-0bWMkoTL.js 21.73 kB
out/renderer/assets/PersonalizationSettingsPanel-B06BA6F_.js 21.87 kB
out/renderer/assets/rose-pine-CEVQiaW0-DaA_4NNK.js 21.94 kB
out/renderer/assets/rose-pine-moon-B9bum7Ik-B6_AhIsD.js 21.96 kB
out/renderer/assets/rose-pine-dawn-2Q5fMoJp-DxMkAwKM.js 21.96 kB
out/renderer/assets/powershell-ycAdP1r9-B7r4Hnhz.js 22.11 kB
out/renderer/assets/common-lisp-DcFHcTKh-CWH5diwh.js 22.81 kB
out/renderer/assets/gruvbox-dark-hard-gOzMLqif-DDlcfu4q.js 22.83 kB
out/renderer/assets/gruvbox-dark-soft-CKvURktN-C6MJezBg.js 22.83 kB
out/renderer/assets/gruvbox-light-hard-CMa_c48J-BUQ67Msp.js 22.84 kB
out/renderer/assets/gruvbox-light-soft-yfAGJYsX-DNM2qqWB.js 22.84 kB
out/renderer/assets/gruvbox-dark-medium-BQSVGwWb-qh8C4DPZ.js 22.84 kB
out/renderer/assets/gruvbox-light-medium-B9S5UNr1-DZxV_o-P.js 22.84 kB
out/renderer/assets/nim-CD961Jl3-CuyTrDpQ.js 22.91 kB
out/renderer/assets/cadence-C2JmJjDr-B-b63Epg.js 23.87 kB
out/renderer/assets/sql-C_oMiPb0-CRnSOxMo.js 23.87 kB
out/renderer/assets/wit-CXpQol8Q-D2NEDOhy.js 24.11 kB
out/renderer/assets/templ-gFcHJbF7-BqIwRUQe.js 24.38 kB
out/renderer/assets/astro-kV3HjkbP-CH6o6jKA.js 24.46 kB
out/renderer/assets/vhdl-Ci4REirV-D-qSzcJD.js 24.46 kB
out/renderer/assets/purescript-DCsDAdnX-DsynrkKe.js 24.97 kB
out/renderer/assets/vue-Cuk7Vimg-CFbFXIr8.js 25.25 kB
out/renderer/assets/surrealql-GFjNBdcm-Vm68TOTE.js 25.34 kB
out/renderer/assets/one-light-CMfGrl_P-B-1jUQM9.js 25.49 kB
out/renderer/assets/night-owl-light-CAEa42tO-TPCLv7z5.js 26.10 kB
out/renderer/assets/system-verilog-D_bVVpLE-C_dvOlr3.js 26.41 kB
out/renderer/assets/angular-html-BrLPO2Fv-DJgz5E5d.js 26.48 kB
out/renderer/assets/typespec-D5WYs8C4-AaOHagqW.js 26.72 kB
out/renderer/assets/nord-DlCAGdjr-Div2jUYm.js 26.91 kB
out/renderer/assets/codeql-DidIlXer-D6RBJOzg.js 27.08 kB
out/renderer/assets/scss-BhK8Ovpn-DfDLQi2C.js 27.52 kB
out/renderer/assets/coffee-DrMWXxy6-BoavQsuh.js 27.68 kB
out/renderer/assets/java-DaupjRFz-zQd9RZAc.js 27.69 kB
out/renderer/assets/razor-B2hRAVmz-Dj7TOgY5.js 27.72 kB
out/renderer/assets/apl-C42PBett-BNW4FTmO.js 27.87 kB
out/renderer/assets/chunk-SVP7TREG-Dxm-4rnd.js 28.38 kB
out/renderer/assets/fsharp-BHFgIxsY-CvR6tsY8.js 28.48 kB
out/renderer/assets/marko-DXKHPFnH-C0z2-ucz.js 28.74 kB
out/renderer/assets/GeneralSettingsPanel-CA6yOnsk.js 29.10 kB
out/renderer/assets/night-owl-DegwdXaM-6ZGfBB7K.js 29.11 kB
out/renderer/assets/c3-BOs4FlGA-BuhFXrRY.js 29.17 kB
out/renderer/assets/MemorySettingsPanel-cqwWfj-O.js 29.75 kB
out/renderer/assets/crystal-DlzoxO28-BWa_t1Io.js 29.84 kB
out/renderer/assets/applescript-ij24h7OO-_xHQcvud.js 29.87 kB
out/renderer/assets/tsMode-SiG-Sp2b-WC-zK_wx.js 30.55 kB
out/renderer/assets/pierre-dark-Daa2n9wr-D7rla9B_.js 30.74 kB
out/renderer/assets/pierre-light-D_hZXvUj-DJnIOKLO.js 30.75 kB
out/renderer/assets/pierre-dark-soft-BhNM3pgh-Dp_VeHWv.js 30.76 kB
out/renderer/assets/pierre-light-soft-BVrSv6ZG-C6Na39F-.js 30.76 kB
out/renderer/assets/ishikawaDiagram-5VMMS53U-BtIQYepA.js 30.78 kB
out/renderer/assets/pierre-dark-tritanopia-CGKuoAZi-C0HpbU3l.js 30.78 kB
out/renderer/assets/pierre-light-tritanopia-BiDEaWaH-wWduIsi3.js 30.78 kB
out/renderer/assets/pierre-dark-protanopia-deuteranopia-Cs1lz9lE-enlgPsHw.js 30.82 kB
out/renderer/assets/pierre-light-protanopia-deuteranopia-BM0RLBB_-Dz5iBHkO.js 30.82 kB
out/renderer/assets/stylus-ZCryC73G-urFW3_yk.js 31.29 kB
out/renderer/assets/diagram-VX7I27RA-CAJ5TuHp.js 31.44 kB
out/renderer/assets/scala-BBsC3Oz3-VCjyobQG.js 31.48 kB
out/renderer/assets/mermaid-D6CQfUGU-C6DHNxVz.js 33.37 kB
out/renderer/assets/poimandres-EIt_jotH-DHKFQj5Q.js 33.69 kB
out/renderer/assets/kanban-definition-UXKFOSKX-BLcNSZUB.js 33.91 kB
out/renderer/assets/one-dark-pro-DR9QpZM3-BA4d4lw2.js 33.98 kB
out/renderer/assets/mermaid-parser.core-CstzWfPU.js 34.66 kB
out/renderer/assets/haxe-BWT5wSyZ-BuUsQb-h.js 35.38 kB
out/renderer/assets/nginx-DhtViCEk-C18zABFg.js 35.58 kB
out/renderer/assets/houston-BdS5A_yD-NUige_z1.js 35.61 kB
out/renderer/assets/tokyo-night-BS1_DFu7-CYsPn2J-.js 35.86 kB
out/renderer/assets/erlang-Dd62d0xZ-DHVWwcKa.js 37.71 kB
out/renderer/assets/rough.esm-BX5QqLti.js 38.33 kB
out/renderer/assets/mindmap-definition-YA3MSWOX-B-zior9K.js 38.59 kB
out/renderer/assets/cobol-D7RZfOK--CEk2iYO9.js 39.37 kB
out/renderer/assets/journeyDiagram-3NMN7TZE-dygzCaXh.js 40.13 kB
out/renderer/assets/julia-ZzkUXm0W-BIm_zTAN.js 40.32 kB
out/renderer/assets/lspLanguageFeatures-DK9zifhE-DeEqLmGO.js 40.76 kB
out/renderer/assets/asm-DYVIzeEk-Byg5xzam.js 40.91 kB
out/renderer/assets/haskell-Ba6HbLj8-D0OYaIy8.js 41.78 kB
out/renderer/assets/sankeyDiagram-P5KCCOFB-D1WB71c9.js 41.83 kB
out/renderer/assets/shellscript-B69gKcss-49Zm6IyC.js 41.97 kB
out/renderer/assets/wardleyDiagram-VM6X3IG4-DCbKgC_S.js 42.40 kB
out/renderer/assets/perl-Dv6Cq_FS-DIORmO5G.js 43.55 kB
out/renderer/assets/pierre-dark-vibrant-BMsyYliQ-84Eeh-Uj.js 44.96 kB
out/renderer/assets/pierre-light-vibrant-CWzM4Pa_-QZvTkTJe.js 44.97 kB
out/renderer/assets/ruby-DWcdJvcx-q0K84ieK.js 46.50 kB
out/renderer/assets/go-BOpYl7fu-BiT4MB-v.js 47.02 kB
out/renderer/assets/apex-B48ZHHzN-BBt8sSNQ.js 47.18 kB
out/renderer/assets/catppuccin-mocha-cPsH7Lup-SVLZehhk.js 47.46 kB
out/renderer/assets/catppuccin-latte-DcEecI7n-jo2cPJyK.js 47.46 kB
out/renderer/assets/catppuccin-frappe-BdOW2tdI-BI0Hc9cS.js 47.46 kB
out/renderer/assets/catppuccin-macchiato-Bvz_yAZY-DWewRa4S.js 47.47 kB
out/renderer/assets/ada-BT0j8ine-CLTLBE8n.js 48.28 kB
out/renderer/assets/d-B1HbH29p-Bi6t8Ck6.js 49.10 kB
out/renderer/assets/css-NFwnoVns-BvwuZkcY.js 49.49 kB
out/renderer/assets/imba-C-oGt11l-CqKI0OVw.js 50.13 kB
out/renderer/assets/requirementDiagram-BXWQKSXE-C3ERdAvT.js 51.39 kB
out/renderer/assets/erDiagram-RLTQ6QDP-DVzk9HUA.js 52.41 kB
out/renderer/assets/browserify-C9uP_nIr.js 52.80 kB
out/renderer/assets/gitGraphDiagram-WWUBYQGX-gZr6P8x8.js 53.82 kB
out/renderer/assets/everforest-dark-gCM8XhEI-DzRrg06U.js 53.94 kB
out/renderer/assets/everforest-light-DhK35DkL-BEDtvHw1.js 53.95 kB
out/renderer/assets/timeline-definition-24CTP7MA-DuvjToaj.js 54.31 kB
out/renderer/assets/wikitext-CQNrXTmv-DJ18wIlO.js 56.09 kB
out/renderer/assets/stata-BUONSdsT-BPnapjPC.js 57.23 kB
out/renderer/assets/quadrantDiagram-AXDQQJYC-D8rBdZOq.js 58.21 kB
out/renderer/assets/html-Dq1ixqYb-okJOhOmu.js 58.25 kB
out/renderer/assets/chunk-OSK3NFVY-DeXYmBeV.js 58.56 kB
out/renderer/assets/ocaml-CUdGm1iq-BKX30YEX.js 62.65 kB
out/renderer/assets/model-settings-source-JYisGYmM.js 63.03 kB
out/renderer/assets/ballerina-CpYcPBJI-D9ac3462.js 64.89 kB
out/renderer/assets/markdown-BSrOIEaF-BFwOzGIM.js 65.52 kB
out/renderer/assets/chunk-IMKFNOWR-20hk4CFt.js 67.22 kB
out/renderer/assets/mojo-BNaitZ-7-E_psDM2x.js 70.00 kB
out/renderer/assets/python-Cld0Iwtn-tcCJ5L_g.js 70.17 kB
out/renderer/assets/blockDiagram-I7D4REHJ-BEOA2O5R.js 71.01 kB
out/renderer/assets/bsl-CtP8370o-Pi14XlIU.js 71.07 kB
out/renderer/assets/c-B4augMcT-B5ncIjy5.js 72.57 kB
out/renderer/assets/chunk-75Z2AOVW-D7MfFP0x.js 72.67 kB
out/renderer/assets/latex-g2Pus_l2-CP0G7LTN.js 72.85 kB
out/renderer/assets/vyper-C1nscAY5-BTAKd5p2.js 74.85 kB
out/renderer/assets/ModelSettingsPanel-Bq69xf7M.js 76.64 kB
out/renderer/assets/xychartDiagram-S5SC5T6Z-BLJZsQxl.js 76.79 kB
out/renderer/assets/chunk-GMAD6QVW-Cutm-G6X.js 77.76 kB
out/renderer/assets/hack-B1ag3l4X-CEYIfPfg.js 80.58 kB
out/renderer/assets/src-DsgKm1PY.js 83.16 kB
out/renderer/assets/chunk-TICWLB2K-BF9Dr4eB.js 83.88 kB
out/renderer/assets/fortran-free-form-CsgtTAg3-Dm0PhuY8.js 89.20 kB
out/renderer/assets/vennDiagram-4TSXK5OY-rjTACDc3.js 89.26 kB
out/renderer/assets/csharp-YOPVljXo-CBjcozlW.js 89.91 kB
out/renderer/assets/racket--xYIV9-n-NDM2V4Sc.js 92.62 kB
out/renderer/assets/swift-CgzYrGBX-CaMD6i-j.js 94.14 kB
out/renderer/assets/less-BGhX8xko-CbSvNyvq.js 99.00 kB
out/renderer/assets/chunk-SHT3W25Y-CG3rN0Mp.js 104.10 kB
out/renderer/assets/objective-c-CmcWiAft-DY5tZuMk.js 105.62 kB
out/renderer/assets/blade-Bq8WPf0E-BehdttJf.js 105.98 kB
out/renderer/assets/c4Diagram-7LVT6UL2--i1UKJXs.js 107.96 kB
out/renderer/assets/php-X15vsN4N-ChBJUzAp.js 111.49 kB
out/renderer/assets/dagre-CzI-C3sx.js 122.98 kB
out/renderer/assets/ganttDiagram-EL5Y4UJY-B2ep6Zsp.js 123.77 kB
out/renderer/assets/graphlib-CoAzpIqe.js 127.44 kB
out/renderer/assets/asciidoc-DJWalVNM-Daa-Gl9r.js 146.30 kB
out/renderer/assets/mdx-C_Ato9sK-CDV72_N0.js 146.49 kB
out/renderer/assets/editor.main-POO0Vbhx-DgMLeBiB.js 161.32 kB
out/renderer/assets/cose-bilkent-JH36ORCC-CA60tZpq.js 165.63 kB
out/renderer/assets/objective-cpp-BggTCHV8-BRaaCyEF.js 172.18 kB
out/renderer/assets/javascript-AfZCJ9Uc-C_GZREFb.js 175.31 kB
out/renderer/assets/tsx-BOlKGefW-D7XVyutE.js 176.00 kB
out/renderer/assets/jsx-CPd9p36x-D5Ck2u9I.js 178.26 kB
out/renderer/assets/sequenceDiagram-WJ2MYXX4-DrQZvAZS.js 190.05 kB
out/renderer/assets/typescript-4sRsPriL-Ce01imBq.js 191.16 kB
out/renderer/assets/mermaid.core-CzJUxOu4.js 191.57 kB
out/renderer/assets/angular-ts-YduEkmVa-936ueej5.js 193.82 kB
out/renderer/assets/vue-vine-DXhYlaTf-C8MW7tnI.js 201.27 kB
out/renderer/assets/SourceSelect-Dd7kI5iL.js 203.20 kB
out/renderer/assets/chunk-4HAMMTFA-CZEROUgO.js 210.32 kB
out/renderer/assets/swimlanes-42K2YHIH-Bejk4_Vq.js 265.51 kB
out/renderer/assets/wolfram-BVoTES0L-W3A5YqXk.js 267.14 kB
out/renderer/assets/chunk-DU6HZSFF-BsNLw-4v.js 271.07 kB
out/renderer/assets/architectureDiagram-5GKGNRK7-BXf_ZoM6.js 318.23 kB
out/renderer/assets/katex-Y9ra-ykP.js 497.35 kB
out/renderer/assets/texmath-Bkeg3ZLn.js 594.25 kB
out/renderer/assets/wasm-CVjZL0jK-DcJkdGs4.js 622.62 kB
out/renderer/assets/cpp-9jHBA231-DB3feGjZ.js 626.73 kB
out/renderer/assets/app-4914IQSi.js 675.57 kB
out/renderer/assets/emacs-lisp-DjtOxg4j-CzQ0CKOn.js 780.06 kB
out/renderer/assets/cytoscape.esm-bVGYt-iW.js 869.69 kB
out/renderer/assets/ArtifactPierreDiff-DpqRTCz8.js 1,119.58 kB
out/renderer/assets/chunk-FOHPRMQF-BCllzKJD.js 1,154.18 kB
out/renderer/assets/index-iOggdyqw.js 3,760.13 kB
out/renderer/assets/editor.api2-dPwET-7w-BYIQ9bT3.js 4,889.23 kB
✓ built in 4.77s
Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

@@ -0,0 +1,769 @@
{
"result": "PASS",
"scope": "Real isolated YCode App/preload/IPC/native filesystem. No upstream calls. Original expectations come from fixed REA archive ev_f5e9d71a676c453daab40928acfb33aeabae68ba57ffda342380cead7f1a1fe2.",
"sourceEvidence": [
"ev_f5e9d71a676c453daab40928acfb33aeabae68ba57ffda342380cead7f1a1fe2"
],
"snapshots": {
"menu": {
"rect": [
226,
378,
170,
250
],
"background": "rgb(255, 255, 255)",
"borderRadius": "16px",
"padding": "8px",
"items": [
{
"label": "置顶",
"width": 152,
"height": 32,
"fontSize": "14px",
"lineHeight": "22px",
"borderRadius": "8px",
"color": "rgba(0, 0, 0, 0.9)",
"icon": [
16,
16
]
},
{
"label": "重命名",
"width": 152,
"height": 32,
"fontSize": "14px",
"lineHeight": "22px",
"borderRadius": "8px",
"color": "rgba(0, 0, 0, 0.9)",
"icon": [
16,
16
]
},
{
"label": "在独立窗口中打开",
"width": 152,
"height": 32,
"fontSize": "14px",
"lineHeight": "22px",
"borderRadius": "8px",
"color": "rgba(0, 0, 0, 0.9)",
"icon": [
16,
16
]
},
{
"label": "打开文件夹",
"width": 152,
"height": 32,
"fontSize": "14px",
"lineHeight": "22px",
"borderRadius": "8px",
"color": "rgba(0, 0, 0, 0.9)",
"icon": [
16,
16
]
},
{
"label": "归档",
"width": 152,
"height": 32,
"fontSize": "14px",
"lineHeight": "22px",
"borderRadius": "8px",
"color": "rgba(0, 0, 0, 0.9)",
"icon": [
16,
16
]
},
{
"label": "删除任务",
"width": 152,
"height": 32,
"fontSize": "14px",
"lineHeight": "22px",
"borderRadius": "8px",
"color": "rgb(180, 44, 63)",
"icon": [
16,
16
]
}
],
"dividers": [
{
"width": 152,
"height": 1,
"margin": "6px 0px"
},
{
"width": 152,
"height": 1,
"margin": "6px 0px"
}
]
}
},
"checks": [
{
"label": "menu labels match the implemented subset",
"pass": true,
"actual": [
"置顶",
"重命名",
"在独立窗口中打开",
"打开文件夹",
"归档",
"删除任务"
],
"expected": [
"置顶",
"重命名",
"在独立窗口中打开",
"打开文件夹",
"归档",
"删除任务"
]
},
{
"label": "menu uses two dividers like the original",
"pass": true,
"actual": 2,
"expected": 2
},
{
"label": "items are 32 high like the original",
"pass": true,
"actual": true,
"expected": true
},
{
"label": "item font is 14/22 like the original",
"pass": true,
"actual": true,
"expected": true
},
{
"label": "item radius is 8 like the original",
"pass": true,
"actual": true,
"expected": true
},
{
"label": "icon box is 16x16 like the original",
"pass": true,
"actual": true,
"expected": true
},
{
"label": "menu padding is 8 like the original",
"pass": true,
"actual": "8px",
"expected": "8px"
},
{
"label": "menu radius is 16 like the original",
"pass": true,
"actual": "16px",
"expected": "16px"
},
{
"label": "danger item keeps the original danger colour",
"pass": true,
"actual": "rgb(180, 44, 63)",
"expected": "rgb(180, 44, 63)"
},
{
"label": "normal items keep the original text colour",
"pass": true,
"actual": "rgba(0, 0, 0, 0.9)",
"expected": "rgba(0, 0, 0, 0.9)"
},
{
"label": "menu minimum width is 160 like the original",
"pass": true,
"actual": true,
"expected": true
},
{
"label": "menu sits on the original anchor offset (button left - 17, bottom + 4)",
"pass": true,
"actual": [
0,
0
],
"expected": [
0,
0
]
},
{
"label": "divider height is 1 like the original",
"pass": true,
"actual": true,
"expected": true
},
{
"label": "overlay click closes the menu",
"pass": true,
"actual": false,
"expected": false
},
{
"label": "right-click opens the same implemented menu",
"pass": true,
"actual": [
"置顶",
"重命名",
"在独立窗口中打开",
"打开文件夹",
"归档",
"删除任务"
],
"expected": [
"置顶",
"重命名",
"在独立窗口中打开",
"打开文件夹",
"归档",
"删除任务"
]
},
{
"label": "right-click opens the menu for the row under the pointer",
"pass": true,
"actual": "d77f13ed-f42d-481d-8b5f-071ccbedbdcb",
"expected": "d77f13ed-f42d-481d-8b5f-071ccbedbdcb"
},
{
"label": "right-click does not switch the active conversation",
"pass": true,
"actual": "964a214e-45c8-47bf-b2f5-acc21232cca5",
"expected": "964a214e-45c8-47bf-b2f5-acc21232cca5"
},
{
"label": "right-click anchors the menu at the pointer",
"pass": true,
"actual": [
220,
420
],
"expected": [
220,
420
]
},
{
"label": "pin adds the original pinned-item class",
"pass": true,
"actual": true,
"expected": true
},
{
"label": "pin shows a persistent pin badge",
"pass": true,
"actual": true,
"expected": true
},
{
"label": "pin persists to the session store",
"pass": true,
"actual": true,
"expected": true
},
{
"label": "pinned row offers 取消置顶 first",
"pass": true,
"actual": true,
"expected": true
},
{
"label": "unpin clears the pinned marker",
"pass": true,
"actual": false,
"expected": false
},
{
"label": "unpin persists",
"pass": true,
"actual": true,
"expected": true
},
{
"label": "menu exposes an inline rename input",
"pass": true,
"actual": true,
"expected": true
},
{
"label": "rename input closes after Enter",
"pass": true,
"actual": false,
"expected": false
},
{
"label": "rename updates the row title",
"pass": true,
"actual": "Menu Renamed",
"expected": "Menu Renamed"
},
{
"label": "rename persists to the session store",
"pass": true,
"actual": true,
"expected": true
},
{
"label": "open folder targets the real session cwd",
"pass": true,
"actual": "C:\\Users\\Administrator\\.codex\\worktrees\\b01-accept-01\\YCode\\.tmp\\task-menu-9cdgdF\\fixture-workspace",
"expected": "C:\\Users\\Administrator\\.codex\\worktrees\\b01-accept-01\\YCode\\.tmp\\task-menu-9cdgdF\\fixture-workspace"
},
{
"label": "open window creates exactly one extra window",
"pass": true,
"actual": 2,
"expected": 2
},
{
"label": "open window loads the task query for that session",
"pass": true,
"actual": "?window=task&taskId=964a214e-45c8-47bf-b2f5-acc21232cca5",
"expected": "?window=task&taskId=964a214e-45c8-47bf-b2f5-acc21232cca5"
},
{
"label": "archive opens a confirmation before changing the task",
"pass": true,
"actual": "归档任务",
"expected": "归档任务"
},
{
"label": "archive restores the documented original destination",
"pass": true,
"actual": "确认将该任务归档吗?归档后可在“系统设置-数据管理”中查看。",
"expected": "确认将该任务归档吗?归档后可在“系统设置-数据管理”中查看。"
},
{
"label": "archive does not append unrequested compatibility copy",
"pass": true,
"actual": false,
"expected": false
},
{
"label": "archive confirmation actions use the recovered labels",
"pass": true,
"actual": [
"取消",
"确认归档"
],
"expected": [
"取消",
"确认归档"
]
},
{
"label": "archive confirmation uses the plan-defined 240px popconfirm",
"pass": true,
"actual": [
240,
"16px",
"16px"
],
"expected": [
240,
"16px",
"16px"
]
},
{
"label": "archive light secondary background/border",
"pass": true,
"actual": [
"rgb(255, 255, 255)",
[
"1px",
"solid",
"rgb(222, 222, 222)"
]
],
"expected": [
"rgb(255, 255, 255)",
[
"1px",
"solid",
"rgb(222, 222, 222)"
]
]
},
{
"label": "archive light primary/danger background",
"pass": true,
"actual": "rgba(0, 0, 0, 0.9)",
"expected": "rgba(0, 0, 0, 0.9)"
},
{
"label": "archive light confirmation foreground",
"pass": true,
"actual": "rgb(255, 255, 255)",
"expected": "rgb(255, 255, 255)"
},
{
"label": "archive light confirm geometry",
"pass": true,
"actual": [
"66px",
"19px",
"19px",
"28px",
"6px",
"12px"
],
"expected": [
"66px",
"19px",
"19px",
"28px",
"6px",
"12px"
]
},
{
"label": "archive light cancel geometry",
"pass": true,
"actual": [
"66px",
"19px",
"19px",
"28px",
"6px",
"12px"
],
"expected": [
"66px",
"19px",
"19px",
"28px",
"6px",
"12px"
]
},
{
"label": "archive light title weight",
"pass": true,
"actual": "600",
"expected": "600"
},
{
"label": "archive dark secondary background/border",
"pass": true,
"actual": [
"rgb(38, 38, 38)",
[
"1px",
"solid",
"rgb(61, 61, 61)"
]
],
"expected": [
"rgb(38, 38, 38)",
[
"1px",
"solid",
"rgb(61, 61, 61)"
]
]
},
{
"label": "archive dark primary/danger background",
"pass": true,
"actual": "rgba(255, 255, 255, 0.9)",
"expected": "rgba(255, 255, 255, 0.9)"
},
{
"label": "archive dark confirmation foreground",
"pass": true,
"actual": "rgba(0, 0, 0, 0.9)",
"expected": "rgba(0, 0, 0, 0.9)"
},
{
"label": "archive dark confirm geometry",
"pass": true,
"actual": [
"66px",
"19px",
"19px",
"28px",
"6px",
"12px"
],
"expected": [
"66px",
"19px",
"19px",
"28px",
"6px",
"12px"
]
},
{
"label": "archive dark cancel geometry",
"pass": true,
"actual": [
"66px",
"19px",
"19px",
"28px",
"6px",
"12px"
],
"expected": [
"66px",
"19px",
"19px",
"28px",
"6px",
"12px"
]
},
{
"label": "archive dark title weight",
"pass": true,
"actual": "600",
"expected": "600"
},
{
"label": "cancelling archive keeps the task visible",
"pass": true,
"actual": 2,
"expected": 2
},
{
"label": "archive hides exactly one row",
"pass": true,
"actual": 1,
"expected": 1
},
{
"label": "archive keeps both sessions in the archived listing",
"pass": true,
"actual": 2,
"expected": 2
},
{
"label": "archived session keeps its archivedAt marker",
"pass": true,
"actual": 1,
"expected": 1
},
{
"label": "delete uses the idle confirmation title",
"pass": true,
"actual": "删除任务?",
"expected": "删除任务?"
},
{
"label": "delete uses the idle confirmation description",
"pass": true,
"actual": "删除后,这些任务将从你的所有设备中移除,且无法恢复。",
"expected": "删除后,这些任务将从你的所有设备中移除,且无法恢复。"
},
{
"label": "delete confirmation actions use the recovered idle labels",
"pass": true,
"actual": [
"取消",
"确认"
],
"expected": [
"取消",
"确认"
]
},
{
"label": "idle delete is not marked as running",
"pass": true,
"actual": null,
"expected": null
},
{
"label": "delete light secondary background/border",
"pass": true,
"actual": [
"rgb(255, 255, 255)",
[
"1px",
"solid",
"rgb(222, 222, 222)"
]
],
"expected": [
"rgb(255, 255, 255)",
[
"1px",
"solid",
"rgb(222, 222, 222)"
]
]
},
{
"label": "delete light primary/danger background",
"pass": true,
"actual": "rgb(232, 92, 92)",
"expected": "rgb(232, 92, 92)"
},
{
"label": "delete light confirmation foreground",
"pass": true,
"actual": "rgb(255, 255, 255)",
"expected": "rgb(255, 255, 255)"
},
{
"label": "delete light confirm geometry",
"pass": true,
"actual": [
"66px",
"19px",
"19px",
"28px",
"6px",
"12px"
],
"expected": [
"66px",
"19px",
"19px",
"28px",
"6px",
"12px"
]
},
{
"label": "delete light cancel geometry",
"pass": true,
"actual": [
"66px",
"19px",
"19px",
"28px",
"6px",
"12px"
],
"expected": [
"66px",
"19px",
"19px",
"28px",
"6px",
"12px"
]
},
{
"label": "delete light title weight",
"pass": true,
"actual": "600",
"expected": "600"
},
{
"label": "delete dark secondary background/border",
"pass": true,
"actual": [
"rgb(38, 38, 38)",
[
"1px",
"solid",
"rgb(61, 61, 61)"
]
],
"expected": [
"rgb(38, 38, 38)",
[
"1px",
"solid",
"rgb(61, 61, 61)"
]
]
},
{
"label": "delete dark primary/danger background",
"pass": true,
"actual": "rgb(175, 25, 26)",
"expected": "rgb(175, 25, 26)"
},
{
"label": "delete dark confirmation foreground",
"pass": true,
"actual": "rgb(255, 255, 255)",
"expected": "rgb(255, 255, 255)"
},
{
"label": "delete dark confirm geometry",
"pass": true,
"actual": [
"66px",
"19px",
"19px",
"28px",
"6px",
"12px"
],
"expected": [
"66px",
"19px",
"19px",
"28px",
"6px",
"12px"
]
},
{
"label": "delete dark cancel geometry",
"pass": true,
"actual": [
"66px",
"19px",
"19px",
"28px",
"6px",
"12px"
],
"expected": [
"66px",
"19px",
"19px",
"28px",
"6px",
"12px"
]
},
{
"label": "delete dark title weight",
"pass": true,
"actual": "600",
"expected": "600"
},
{
"label": "delete removes that session from the store",
"pass": true,
"actual": false,
"expected": false
},
{
"label": "delete leaves only the archived session",
"pass": true,
"actual": 1,
"expected": 1
},
{
"label": "no renderer error logs",
"pass": true,
"actual": [],
"expected": []
}
],
"rendererErrors": []
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

@@ -0,0 +1,45 @@
// Acceptance-only CJS harness for the unchanged supplied component fixture.
// Same assertions and native inputs, without ESM top-level await or rebuilding inside Electron.
const fs=require('fs'),path=require('path'),assert=require('assert/strict');
const {createHash}=require('crypto');
const electronModule=require('electron');
const base=path.resolve('.tmp');
const file='src/renderer/src/workbuddy/composer/ModeChip.tsx';
if(!process.versions.electron){const env={...process.env};delete env.ELECTRON_RUN_AS_NODE;delete env.ELECTRON_RENDERER_URL;const child=require('child_process').spawn(electronModule,[__filename,process.argv.at(-1)],{env,windowsHide:true,stdio:'inherit'});const timer=setTimeout(()=>child.kill(),60000);child.once('exit',(code,signal)=>{clearTimeout(timer);console.log(JSON.stringify({exitCode:code,signal}));process.exitCode=code===0?0:1});}else{;(async()=>{
const { app, BrowserWindow } = electronModule, output = path.resolve(process.argv.at(-1))
assert.ok(path.dirname(output) === base && path.basename(output).startsWith('mode-chip-native-'))
fs.mkdirSync(path.join(output, 'data'), {recursive:true}); app.setPath('userData', path.join(output, 'data')); app.disableHardwareAcceleration()
let win; const checks = [], samples = [], errors = []
try {
await app.whenReady(); win = new BrowserWindow({ width: 800, height: 300, show: false, webPreferences: { contextIsolation: true, nodeIntegration: false, backgroundThrottling: false } })
win.webContents.on('console-message', event => { if (event.level === 'error' || event.level >= 3) errors.push(event.message) })
await win.loadFile(path.join(output, 'index.html')); win.showInactive()
const read = code => win.webContents.executeJavaScript(code), pause = () => new Promise(resolve => setTimeout(resolve, 80))
const check = (label, actual, expected = true) => { assert.deepEqual(actual, expected, label); checks.push(label) }
const key = async keyCode => { win.focus();win.webContents.focus();await pause();win.webContents.sendInputEvent({type:'keyDown',keyCode});if(keyCode==='Enter'||keyCode==='Space')win.webContents.sendInputEvent({type:'char',keyCode:keyCode==='Enter'?'\r':' '});win.webContents.sendInputEvent({type:'keyUp',keyCode});await pause() }
const sample = () => read(`(()=>{const c=document.querySelector('.yc-mode-chip'),i=c.querySelector('.yc-mode-chip__mode-icon'),b=c.querySelector('button'),s=getComputedStyle(c),r=e=>{const x=e.getBoundingClientRect();return{x:x.x,y:x.y,width:x.width,height:x.height}};return{chip:r(c),icon:r(i),button:b?r(b):null,background:s.backgroundColor,radius:s.borderRadius,color:s.color,expectedColor:s.getPropertyValue('--cr-text-secondary').trim(),font:s.fontSize,weight:s.fontWeight,line:s.lineHeight,padding:s.paddingLeft,iconOpacity:getComputedStyle(i).opacity,clearOpacity:b?getComputedStyle(b).opacity:null}})()`)
await pause()
for (const theme of ['light', 'dark']) for (const mode of ['plan', 'ask']) {
await read(`document.documentElement.dataset.theme='${theme}'; document.querySelector('.chat-pane').dataset.crTheme='${theme}'; qa.setMode('${mode}');qa.setDisabled(false);document.querySelector('#before').focus()`)
win.webContents.sendInputEvent({ type: 'mouseMove', x: 1, y: 1 }); await pause()
const normal = await sample(); samples.push({ theme, mode, state: 'normal', ...normal })
check('transparent', normal.background, 'rgba(0, 0, 0, 0)'); check('pill', parseFloat(normal.radius) >= normal.chip.height / 2)
check('height', normal.chip.height, 32); check('font', normal.font, '13px'); check('weight', normal.weight, '500'); check('line', normal.line, '20px'); check('padding', normal.padding, '8px')
check('same slot', normal.icon, normal.button); check('icon width', normal.icon.width, 16); check('default icon', normal.iconOpacity, '1'); check('default close', normal.clearOpacity, '0')
check('secondary color', await read(`(()=>{const c=document.querySelector('.yc-mode-chip'),p=document.createElement('span');p.style.color='var(--cr-text-secondary)';c.append(p);const ok=getComputedStyle(p).color===getComputedStyle(c).color;p.remove();return ok})()`))
win.webContents.sendInputEvent({ type: 'mouseMove', x: Math.round(normal.chip.x + normal.chip.width / 2), y: Math.round(normal.chip.y + normal.chip.height / 2) }); await pause()
const hover = await sample(); samples.push({ theme, mode, state: 'hover', ...hover }); check('hover icon hidden', hover.iconOpacity, '0'); check('hover X', hover.clearOpacity, '1'); check('no hover layout shift', hover.chip, normal.chip)
win.webContents.sendInputEvent({ type: 'mouseMove', x: 1, y: 1 }); await read(`document.querySelector('.yc-mode-chip').focus()`); await pause()
const focus = await sample(); check('focus icon hidden', focus.iconOpacity, '0'); check('focus X', focus.clearOpacity, '1'); check('no focus layout shift', focus.chip, normal.chip)
await fs.promises.writeFile(path.join(output, `${theme}-${mode}-focus.png`), (await win.webContents.capturePage()).toPNG())
await key('Tab'); check('Tab reaches native clear', await read(`document.activeElement.matches('.yc-mode-chip__clear')`))
const before = await read('qa.clears'); await key(mode === 'plan' ? 'Enter' : 'Space'); check('native keyboard exit', await read('qa.clears'), before + 1); check('craft hidden', await read(`!document.querySelector('.yc-mode-chip')`))
await read(`qa.setMode('${mode}');qa.setDisabled(true)`); await pause(); check('disabled has no clear', await read(`!document.querySelector('.yc-mode-chip button')`)); check('disabled not tabbable', await read(`document.querySelector('.yc-mode-chip').tabIndex`), -1)
}
win.setSize(320, 300); await read(`qa.setMode('ask');qa.setDisabled(false)`); await pause(); const narrow = await sample(); check('narrow slot preserved', narrow.icon, narrow.button); check('narrow no overflow', narrow.chip.x + narrow.chip.width <= 320)
await fs.promises.writeFile(path.join(output, 'narrow.png'), (await win.webContents.capturePage()).toPNG()); check('no renderer errors', errors, [])
fs.writeFileSync(path.join(output, 'report.json'), JSON.stringify({ checks, samples, errors, sourceSha256: createHash('sha256').update(fs.readFileSync(file)).digest('hex'), scope: 'Own-YCode isolated component browser test, not full app/store integration or original-app pixel acceptance' }, null, 2)); app.exit(0)
} catch (error) { fs.writeFileSync(path.join(output, 'failure.txt'), String(error.stack || error)); console.error(error); app.exit(1) }
})().catch(error=>{console.error(error);electronModule.app.exit(1)});
}
@@ -0,0 +1,2 @@
{"exitCode":0,"signal":null}
@@ -0,0 +1,84 @@
const fs = require('node:fs/promises')
const path = require('node:path')
const { pathToFileURL } = require('node:url')
if (!process.versions.electron) {
;(async () => {
const dir = await fs.mkdtemp(path.resolve('.tmp/alignment-window-'))
const data = path.join(dir, 'data'), home = path.join(dir, 'home'), cwd = path.join(dir, 'workspace')
for (const folder of [data, home, cwd]) await fs.mkdir(folder)
const now = Date.now()
const model = { id:'audit-model', name:'Audit Model', providerId:'custom', model:'fixture', baseUrl:'http://127.0.0.1:1', authMode:'none', protocol:'anthropic', supportsToolCall:true }
await fs.writeFile(path.join(data,'models.json'), JSON.stringify({version:1, models:[model], selectedModelId:model.id}))
await fs.writeFile(path.join(data,'workspaces.json'),JSON.stringify({selectedWorkspaceId:'audit-space',workspaces:[{id:'audit-space',name:'Audit Workspace',root:cwd,createdAt:now}]}))
const question = { id:'q1', question:'Which target should be inspected?', answers:['Local fixture'] }
const messages = [
{id:'u1',role:'user',content:'Inspect the local fixture.',createdAt:now-10000,status:'done'},
{id:'a1',role:'assistant',content:'The local fixture is ready.',createdAt:now-9000,status:'done',turnStartedAt:now-10000,turnFinishedAt:now,turnDurationMs:10000,
tools:[{id:'q-tool',name:'AskUserQuestion',args:{questions:[question]},argsRaw:'{}',status:'ok',output:'ANSWER_RAW_SENTINEL',metadata:{questionAnswer:{questions:[question]}}}],
parts:[{type:'reasoning',id:'r1',text:'I need the target.',finished:true},{type:'tool',toolId:'q-tool'},{type:'reasoning',id:'r2',text:'The target is selected.',finished:true},{type:'text',text:'The local fixture is ready.'}]}
]
const session = (id,agentMode,ms) => ({id,title:`Audit ${agentMode}`,cwd,workspaceId:'audit-space',modelId:model.id,agentMode,permissionMode:'full-access',createdAt:ms,updatedAt:ms,messages})
await fs.writeFile(path.join(data,'sessions.json'),JSON.stringify({sessions:[session('audit-plan','plan',now+1),session('audit-ask','ask',now)]}))
const env={...process.env,YCODE_USER_DATA_DIR:data,YCODE_QA_DIRECTORY:dir,YCODE_QA_OFFSCREEN:'1',YCODE_DISABLE_GPU:'1',YCODE_DISABLE_SYSTEM_INTEGRATION:'1',AUDIT_WINDOW_DIR:dir}
delete env.ELECTRON_RUN_AS_NODE; delete env.ELECTRON_RENDERER_URL
const child=require('node:child_process').spawn(require('electron'),['--no-sandbox','--disable-gpu-sandbox',__filename],{env,windowsHide:true,stdio:['ignore','pipe','pipe']})
let log='';child.stdout.on('data',x=>{log+=x});child.stderr.on('data',x=>{log+=x})
const timeout=setTimeout(()=>child.kill(),90000)
child.on('exit',async code=>{clearTimeout(timeout);await fs.writeFile(path.join(dir,'process.log'),log);console.log(JSON.stringify({directory:dir,exitCode:code}));if(code)console.error(log.slice(-7000));process.exitCode=code??1})
})().catch(e=>{console.error(e);process.exitCode=1})
} else {
const {app,BrowserWindow,ipcMain}=require('electron')
const dir=process.env.AUDIT_WINDOW_DIR
app.disableHardwareAcceleration();app.setPath('home',path.join(dir,'home'))
const originalHandle=ipcMain.handle.bind(ipcMain)
ipcMain.handle=(channel,listener)=>originalHandle(channel,async(...args)=>{if(channel==='session:messages')await new Promise(r=>setTimeout(r,1200));return listener(...args)})
let win
const pause=ms=>new Promise(r=>setTimeout(r,ms))
const read=code=>win.webContents.executeJavaScript(code)
async function wait(code){for(let i=0;i<250;i++){const x=await read(code);if(x)return x;await pause(40)}throw new Error('Timeout '+code)}
async function shot(name){await read('document.fonts.ready');await pause(80);await fs.writeFile(path.join(dir,name+'.png'),(await win.webContents.capturePage()).toPNG())}
const styleProbe=`(selector)=>{const e=document.querySelector(selector);if(!e)return null;const c=getComputedStyle(e),r=e.getBoundingClientRect();return {selector,text:e.textContent,width:r.width,height:r.height,fontSize:c.fontSize,fontWeight:c.fontWeight,lineHeight:c.lineHeight,padding:c.padding,borderRadius:c.borderRadius,background:c.backgroundColor,color:c.color,display:c.display,opacity:c.opacity}}`
const styles=selectors=>read(`(()=>{const p=${styleProbe};return ${JSON.stringify(selectors)}.map(p)})()`)
;(async()=>{
await import(pathToFileURL(path.resolve('out/main/index.mjs')).href);await app.whenReady();win=BrowserWindow.getAllWindows()[0];win.setSize(1336,902);win.showInactive()
const errors=[];win.webContents.on('console-message',(_e,level,message)=>{if(level>=3)errors.push(message)})
await wait('!!document.querySelector(".yc-session-skeleton")')
const skeleton=await styles(['.yc-session-skeleton','.yc-session-skeleton__avatar','.yc-session-skeleton__name','.yc-session-skeleton__user','.yc-session-skeleton__line','.yc-session-skeleton__line--short'])
await shot('loading')
await wait('!!document.querySelector(".yc-mode-chip") && !!document.querySelector(".msg--assistant")')
await pause(350)
const mode=await styles(['.yc-mode-chip','.yc-mode-chip__mode-icon','.yc-mode-chip__clear'])
await shot('plan')
await read('document.querySelector(".yc-mode-chip").focus()')
const focusedMode=await styles(['.yc-mode-chip','.yc-mode-chip__mode-icon','.yc-mode-chip__clear'])
await shot('plan-focus')
const checks=[];
for(const agentMode of ['plan','ask']){
const sessionId='audit-'+agentMode;
if(agentMode==='ask'){
await read('document.querySelector("[data-session-id=\\"audit-ask\\"]").click()');
await wait('!!document.querySelector(".yc-mode-chip") && !document.querySelector(".yc-session-skeleton") && document.querySelector(".yc-mode-chip").textContent.includes("仅问答")');
}
await read('document.querySelector(".wb-composer textarea").focus()');
await win.webContents.insertText('KEEP_'+agentMode+'_DRAFT');
await wait('document.querySelector(".wb-composer textarea").value.includes("KEEP_'+agentMode+'_DRAFT")');
const before=await read('({draft:document.querySelector(".wb-composer textarea").value,permissionDisabled:document.querySelector(".yc-source-permission-trigger > button").disabled})');
const metadataBefore=await read('window.ycode.session.list().then(list=>list.find(item=>item.id==='+JSON.stringify(sessionId)+'))');
await read('document.querySelector(".yc-mode-chip__clear").focus()');
win.focus();win.webContents.focus();await pause(100);
win.webContents.sendInputEvent({type:'keyDown',keyCode:'Enter'});
win.webContents.sendInputEvent({type:'char',keyCode:'\r'});
win.webContents.sendInputEvent({type:'keyUp',keyCode:'Enter'});
await wait('!document.querySelector(".yc-mode-chip")');
const after=await read('({draft:document.querySelector(".wb-composer textarea").value,permissionDisabled:document.querySelector(".yc-source-permission-trigger > button").disabled})');
const metadataAfter=await read('window.ycode.session.list().then(list=>list.find(item=>item.id==='+JSON.stringify(sessionId)+'))');
if(before.draft!==after.draft||!before.permissionDisabled||after.permissionDisabled||metadataBefore.permissionMode!=='full-access'||metadataAfter.permissionMode!=='full-access'||metadataAfter.agentMode!=='craft')throw Error('Mode host state mismatch '+agentMode);
checks.push({agentMode,before,after,savedPermissionBefore:metadataBefore.permissionMode,savedPermissionAfter:metadataAfter.permissionMode,savedModeAfter:metadataAfter.agentMode});
await shot(agentMode+'-craft-draft-kept');
}
await fs.writeFile(path.join(dir,'report.json'),JSON.stringify({codeSha:'1ed71b63b5af9a98b942ff47c66df5799d4d2c8a',scope:'Actual isolated app; native keyboard exits plan/ask with draft and saved permission retained; no model requests',checks,errors},null,2));
if(errors.length)throw Error('Renderer errors');app.exit(0);
})().catch(async e=>{console.error(e);if(win)await shot('failure').catch(()=>{});await fs.writeFile(path.join(dir,'failure.txt'),String(e));app.exit(1)})
}
@@ -0,0 +1,35 @@
{
"codeSha": "1ed71b63b5af9a98b942ff47c66df5799d4d2c8a",
"scope": "Actual isolated app; native keyboard exits plan/ask with draft and saved permission retained; no model requests",
"checks": [
{
"agentMode": "plan",
"before": {
"draft": "KEEP_plan_DRAFT",
"permissionDisabled": true
},
"after": {
"draft": "KEEP_plan_DRAFT",
"permissionDisabled": false
},
"savedPermissionBefore": "full-access",
"savedPermissionAfter": "full-access",
"savedModeAfter": "craft"
},
{
"agentMode": "ask",
"before": {
"draft": "KEEP_ask_DRAFT",
"permissionDisabled": true
},
"after": {
"draft": "KEEP_ask_DRAFT",
"permissionDisabled": false
},
"savedPermissionBefore": "full-access",
"savedPermissionAfter": "full-access",
"savedModeAfter": "craft"
}
],
"errors": []
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

@@ -0,0 +1,368 @@
{
"checks": [
"transparent",
"pill",
"height",
"font",
"weight",
"line",
"padding",
"same slot",
"icon width",
"default icon",
"default close",
"secondary color",
"hover icon hidden",
"hover X",
"no hover layout shift",
"focus icon hidden",
"focus X",
"no focus layout shift",
"Tab reaches native clear",
"native keyboard exit",
"craft hidden",
"disabled has no clear",
"disabled not tabbable",
"transparent",
"pill",
"height",
"font",
"weight",
"line",
"padding",
"same slot",
"icon width",
"default icon",
"default close",
"secondary color",
"hover icon hidden",
"hover X",
"no hover layout shift",
"focus icon hidden",
"focus X",
"no focus layout shift",
"Tab reaches native clear",
"native keyboard exit",
"craft hidden",
"disabled has no clear",
"disabled not tabbable",
"transparent",
"pill",
"height",
"font",
"weight",
"line",
"padding",
"same slot",
"icon width",
"default icon",
"default close",
"secondary color",
"hover icon hidden",
"hover X",
"no hover layout shift",
"focus icon hidden",
"focus X",
"no focus layout shift",
"Tab reaches native clear",
"native keyboard exit",
"craft hidden",
"disabled has no clear",
"disabled not tabbable",
"transparent",
"pill",
"height",
"font",
"weight",
"line",
"padding",
"same slot",
"icon width",
"default icon",
"default close",
"secondary color",
"hover icon hidden",
"hover X",
"no hover layout shift",
"focus icon hidden",
"focus X",
"no focus layout shift",
"Tab reaches native clear",
"native keyboard exit",
"craft hidden",
"disabled has no clear",
"disabled not tabbable",
"narrow slot preserved",
"narrow no overflow",
"no renderer errors"
],
"samples": [
{
"theme": "light",
"mode": "plan",
"state": "normal",
"chip": {
"x": 88.125,
"y": 40,
"width": 62,
"height": 32
},
"icon": {
"x": 96.125,
"y": 48,
"width": 16,
"height": 16
},
"button": {
"x": 96.125,
"y": 48,
"width": 16,
"height": 16
},
"background": "rgba(0, 0, 0, 0)",
"radius": "9999px",
"color": "rgba(0, 0, 0, 0.7)",
"expectedColor": "#000000b3",
"font": "13px",
"weight": "500",
"line": "20px",
"padding": "8px",
"iconOpacity": "1",
"clearOpacity": "0"
},
{
"theme": "light",
"mode": "plan",
"state": "hover",
"chip": {
"x": 88.125,
"y": 40,
"width": 62,
"height": 32
},
"icon": {
"x": 96.125,
"y": 48,
"width": 16,
"height": 16
},
"button": {
"x": 96.125,
"y": 48,
"width": 16,
"height": 16
},
"background": "rgba(0, 0, 0, 0)",
"radius": "9999px",
"color": "rgba(0, 0, 0, 0.7)",
"expectedColor": "#000000b3",
"font": "13px",
"weight": "500",
"line": "20px",
"padding": "8px",
"iconOpacity": "0",
"clearOpacity": "1"
},
{
"theme": "light",
"mode": "ask",
"state": "normal",
"chip": {
"x": 88.125,
"y": 40,
"width": 75,
"height": 32
},
"icon": {
"x": 96.125,
"y": 48,
"width": 16,
"height": 16
},
"button": {
"x": 96.125,
"y": 48,
"width": 16,
"height": 16
},
"background": "rgba(0, 0, 0, 0)",
"radius": "9999px",
"color": "rgba(0, 0, 0, 0.7)",
"expectedColor": "#000000b3",
"font": "13px",
"weight": "500",
"line": "20px",
"padding": "8px",
"iconOpacity": "1",
"clearOpacity": "0"
},
{
"theme": "light",
"mode": "ask",
"state": "hover",
"chip": {
"x": 88.125,
"y": 40,
"width": 75,
"height": 32
},
"icon": {
"x": 96.125,
"y": 48,
"width": 16,
"height": 16
},
"button": {
"x": 96.125,
"y": 48,
"width": 16,
"height": 16
},
"background": "rgba(0, 0, 0, 0)",
"radius": "9999px",
"color": "rgba(0, 0, 0, 0.7)",
"expectedColor": "#000000b3",
"font": "13px",
"weight": "500",
"line": "20px",
"padding": "8px",
"iconOpacity": "0",
"clearOpacity": "1"
},
{
"theme": "dark",
"mode": "plan",
"state": "normal",
"chip": {
"x": 88.125,
"y": 40,
"width": 62,
"height": 32
},
"icon": {
"x": 96.125,
"y": 48,
"width": 16,
"height": 16
},
"button": {
"x": 96.125,
"y": 48,
"width": 16,
"height": 16
},
"background": "rgba(0, 0, 0, 0)",
"radius": "9999px",
"color": "rgba(255, 255, 255, 0.65)",
"expectedColor": "#ffffffa6",
"font": "13px",
"weight": "500",
"line": "20px",
"padding": "8px",
"iconOpacity": "1",
"clearOpacity": "0"
},
{
"theme": "dark",
"mode": "plan",
"state": "hover",
"chip": {
"x": 88.125,
"y": 40,
"width": 62,
"height": 32
},
"icon": {
"x": 96.125,
"y": 48,
"width": 16,
"height": 16
},
"button": {
"x": 96.125,
"y": 48,
"width": 16,
"height": 16
},
"background": "rgba(0, 0, 0, 0)",
"radius": "9999px",
"color": "rgba(255, 255, 255, 0.65)",
"expectedColor": "#ffffffa6",
"font": "13px",
"weight": "500",
"line": "20px",
"padding": "8px",
"iconOpacity": "0",
"clearOpacity": "1"
},
{
"theme": "dark",
"mode": "ask",
"state": "normal",
"chip": {
"x": 88.125,
"y": 40,
"width": 75,
"height": 32
},
"icon": {
"x": 96.125,
"y": 48,
"width": 16,
"height": 16
},
"button": {
"x": 96.125,
"y": 48,
"width": 16,
"height": 16
},
"background": "rgba(0, 0, 0, 0)",
"radius": "9999px",
"color": "rgba(255, 255, 255, 0.65)",
"expectedColor": "#ffffffa6",
"font": "13px",
"weight": "500",
"line": "20px",
"padding": "8px",
"iconOpacity": "1",
"clearOpacity": "0"
},
{
"theme": "dark",
"mode": "ask",
"state": "hover",
"chip": {
"x": 88.125,
"y": 40,
"width": 75,
"height": 32
},
"icon": {
"x": 96.125,
"y": 48,
"width": 16,
"height": 16
},
"button": {
"x": 96.125,
"y": 48,
"width": 16,
"height": 16
},
"background": "rgba(0, 0, 0, 0)",
"radius": "9999px",
"color": "rgba(255, 255, 255, 0.65)",
"expectedColor": "#ffffffa6",
"font": "13px",
"weight": "500",
"line": "20px",
"padding": "8px",
"iconOpacity": "0",
"clearOpacity": "1"
}
],
"errors": [],
"sourceSha256": "805cb1c06baf00480f2cbfad8e432d0c984a3b2cce2e12683a9db2defbbe6110",
"scope": "Own-YCode isolated component browser test, not full app/store integration or original-app pixel acceptance"
}
@@ -0,0 +1,2 @@
{"output":"C:\\Users\\Administrator\\.codex\\worktrees\\b01-accept-01\\YCode\\.tmp\\mode-chip-native-iW7Uhk","exitCode":null}
@@ -0,0 +1,817 @@
{
"pass": true,
"results": [
{
"label": "light/archive/false geometry",
"actual": [
"66px",
"19px",
"19px",
"28px",
"6px",
"12px"
],
"expected": [
"66px",
"19px",
"19px",
"28px",
"6px",
"12px"
]
},
{
"label": "light/archive/false geometry",
"actual": [
"66px",
"19px",
"19px",
"28px",
"6px",
"12px"
],
"expected": [
"66px",
"19px",
"19px",
"28px",
"6px",
"12px"
]
},
{
"label": "light/archive/false primary/danger colors",
"actual": [
"rgba(0, 0, 0, 0.9)",
"rgb(255, 255, 255)"
],
"expected": [
"rgba(0, 0, 0, 0.9)",
"rgb(255, 255, 255)"
]
},
{
"label": "light/archive/false secondary colors/border",
"actual": [
"rgb(255, 255, 255)",
"1px",
"solid",
"rgb(222, 222, 222)"
],
"expected": [
"rgb(255, 255, 255)",
"1px",
"solid",
"rgb(222, 222, 222)"
]
},
{
"label": "light/archive/false shell",
"actual": [
"240px",
"16px",
"600"
],
"expected": [
"240px",
"16px",
"600"
]
},
{
"label": "light/archive/false shell background",
"actual": "rgb(255, 255, 255)",
"expected": "rgb(255, 255, 255)"
},
{
"label": "light/archive/false initial focus",
"actual": true,
"expected": true
},
{
"label": "light/archive/false busy prevents duplicates",
"actual": [
1,
true,
true,
"处理中…"
],
"expected": [
1,
true,
true,
"处理中…"
]
},
{
"label": "light/archive/false busy cannot dismiss",
"actual": 0,
"expected": 0
},
{
"label": "light/archive/false failure retained",
"actual": "fixture failure",
"expected": "fixture failure"
},
{
"label": "light/archive/false retry enabled",
"actual": false,
"expected": false
},
{
"label": "light/archive/false retry success",
"actual": [
2,
1,
false
],
"expected": [
2,
1,
false
]
},
{
"label": "light/delete/false geometry",
"actual": [
"66px",
"19px",
"19px",
"28px",
"6px",
"12px"
],
"expected": [
"66px",
"19px",
"19px",
"28px",
"6px",
"12px"
]
},
{
"label": "light/delete/false geometry",
"actual": [
"66px",
"19px",
"19px",
"28px",
"6px",
"12px"
],
"expected": [
"66px",
"19px",
"19px",
"28px",
"6px",
"12px"
]
},
{
"label": "light/delete/false primary/danger colors",
"actual": [
"rgb(232, 92, 92)",
"rgb(255, 255, 255)"
],
"expected": [
"rgb(232, 92, 92)",
"rgb(255, 255, 255)"
]
},
{
"label": "light/delete/false secondary colors/border",
"actual": [
"rgb(255, 255, 255)",
"1px",
"solid",
"rgb(222, 222, 222)"
],
"expected": [
"rgb(255, 255, 255)",
"1px",
"solid",
"rgb(222, 222, 222)"
]
},
{
"label": "light/delete/false shell",
"actual": [
"240px",
"16px",
"600"
],
"expected": [
"240px",
"16px",
"600"
]
},
{
"label": "light/delete/false shell background",
"actual": "rgb(255, 255, 255)",
"expected": "rgb(255, 255, 255)"
},
{
"label": "light/delete/false initial focus",
"actual": true,
"expected": true
},
{
"label": "light/delete/false busy prevents duplicates",
"actual": [
1,
true,
true,
"处理中…"
],
"expected": [
1,
true,
true,
"处理中…"
]
},
{
"label": "light/delete/false busy cannot dismiss",
"actual": 0,
"expected": 0
},
{
"label": "light/delete/false danger busy background",
"actual": "rgb(245, 185, 185)",
"expected": "rgb(245, 185, 185)"
},
{
"label": "light/delete/false failure retained",
"actual": "fixture failure",
"expected": "fixture failure"
},
{
"label": "light/delete/false retry enabled",
"actual": false,
"expected": false
},
{
"label": "light/delete/false retry success",
"actual": [
2,
1,
false
],
"expected": [
2,
1,
false
]
},
{
"label": "light/delete/true geometry",
"actual": [
"66px",
"19px",
"19px",
"28px",
"6px",
"12px"
],
"expected": [
"66px",
"19px",
"19px",
"28px",
"6px",
"12px"
]
},
{
"label": "light/delete/true geometry",
"actual": [
"66px",
"19px",
"19px",
"28px",
"6px",
"12px"
],
"expected": [
"66px",
"19px",
"19px",
"28px",
"6px",
"12px"
]
},
{
"label": "light/delete/true primary/danger colors",
"actual": [
"rgb(232, 92, 92)",
"rgb(255, 255, 255)"
],
"expected": [
"rgb(232, 92, 92)",
"rgb(255, 255, 255)"
]
},
{
"label": "light/delete/true secondary colors/border",
"actual": [
"rgb(255, 255, 255)",
"1px",
"solid",
"rgb(222, 222, 222)"
],
"expected": [
"rgb(255, 255, 255)",
"1px",
"solid",
"rgb(222, 222, 222)"
]
},
{
"label": "light/delete/true shell",
"actual": [
"240px",
"16px",
"600"
],
"expected": [
"240px",
"16px",
"600"
]
},
{
"label": "light/delete/true shell background",
"actual": "rgb(255, 255, 255)",
"expected": "rgb(255, 255, 255)"
},
{
"label": "light/delete/true initial focus",
"actual": true,
"expected": true
},
{
"label": "light/delete/true running delete semantic",
"actual": "停止并删除",
"expected": "停止并删除"
},
{
"label": "light/delete/true busy prevents duplicates",
"actual": [
1,
true,
true,
"处理中…"
],
"expected": [
1,
true,
true,
"处理中…"
]
},
{
"label": "light/delete/true busy cannot dismiss",
"actual": 0,
"expected": 0
},
{
"label": "light/delete/true danger busy background",
"actual": "rgb(245, 185, 185)",
"expected": "rgb(245, 185, 185)"
},
{
"label": "light/delete/true failure retained",
"actual": "fixture failure",
"expected": "fixture failure"
},
{
"label": "light/delete/true retry enabled",
"actual": false,
"expected": false
},
{
"label": "light/delete/true retry success",
"actual": [
2,
1,
false
],
"expected": [
2,
1,
false
]
},
{
"label": "dark/archive/false geometry",
"actual": [
"66px",
"19px",
"19px",
"28px",
"6px",
"12px"
],
"expected": [
"66px",
"19px",
"19px",
"28px",
"6px",
"12px"
]
},
{
"label": "dark/archive/false geometry",
"actual": [
"66px",
"19px",
"19px",
"28px",
"6px",
"12px"
],
"expected": [
"66px",
"19px",
"19px",
"28px",
"6px",
"12px"
]
},
{
"label": "dark/archive/false primary/danger colors",
"actual": [
"rgba(255, 255, 255, 0.9)",
"rgba(0, 0, 0, 0.9)"
],
"expected": [
"rgba(255, 255, 255, 0.9)",
"rgba(0, 0, 0, 0.9)"
]
},
{
"label": "dark/archive/false secondary colors/border",
"actual": [
"rgb(38, 38, 38)",
"1px",
"solid",
"rgb(61, 61, 61)"
],
"expected": [
"rgb(38, 38, 38)",
"1px",
"solid",
"rgb(61, 61, 61)"
]
},
{
"label": "dark/archive/false shell",
"actual": [
"240px",
"16px",
"600"
],
"expected": [
"240px",
"16px",
"600"
]
},
{
"label": "dark/archive/false shell background",
"actual": "rgb(36, 36, 36)",
"expected": "rgb(36, 36, 36)"
},
{
"label": "dark/archive/false initial focus",
"actual": true,
"expected": true
},
{
"label": "dark/archive/false busy prevents duplicates",
"actual": [
1,
true,
true,
"处理中…"
],
"expected": [
1,
true,
true,
"处理中…"
]
},
{
"label": "dark/archive/false busy cannot dismiss",
"actual": 0,
"expected": 0
},
{
"label": "dark/archive/false failure retained",
"actual": "fixture failure",
"expected": "fixture failure"
},
{
"label": "dark/archive/false retry enabled",
"actual": false,
"expected": false
},
{
"label": "dark/archive/false retry success",
"actual": [
2,
1,
false
],
"expected": [
2,
1,
false
]
},
{
"label": "dark/delete/false geometry",
"actual": [
"66px",
"19px",
"19px",
"28px",
"6px",
"12px"
],
"expected": [
"66px",
"19px",
"19px",
"28px",
"6px",
"12px"
]
},
{
"label": "dark/delete/false geometry",
"actual": [
"66px",
"19px",
"19px",
"28px",
"6px",
"12px"
],
"expected": [
"66px",
"19px",
"19px",
"28px",
"6px",
"12px"
]
},
{
"label": "dark/delete/false primary/danger colors",
"actual": [
"rgb(175, 25, 26)",
"rgb(255, 255, 255)"
],
"expected": [
"rgb(175, 25, 26)",
"rgb(255, 255, 255)"
]
},
{
"label": "dark/delete/false secondary colors/border",
"actual": [
"rgb(38, 38, 38)",
"1px",
"solid",
"rgb(61, 61, 61)"
],
"expected": [
"rgb(38, 38, 38)",
"1px",
"solid",
"rgb(61, 61, 61)"
]
},
{
"label": "dark/delete/false shell",
"actual": [
"240px",
"16px",
"600"
],
"expected": [
"240px",
"16px",
"600"
]
},
{
"label": "dark/delete/false shell background",
"actual": "rgb(36, 36, 36)",
"expected": "rgb(36, 36, 36)"
},
{
"label": "dark/delete/false initial focus",
"actual": true,
"expected": true
},
{
"label": "dark/delete/false busy prevents duplicates",
"actual": [
1,
true,
true,
"处理中…"
],
"expected": [
1,
true,
true,
"处理中…"
]
},
{
"label": "dark/delete/false busy cannot dismiss",
"actual": 0,
"expected": 0
},
{
"label": "dark/delete/false danger busy background",
"actual": "rgb(128, 56, 56)",
"expected": "rgb(128, 56, 56)"
},
{
"label": "dark/delete/false failure retained",
"actual": "fixture failure",
"expected": "fixture failure"
},
{
"label": "dark/delete/false retry enabled",
"actual": false,
"expected": false
},
{
"label": "dark/delete/false retry success",
"actual": [
2,
1,
false
],
"expected": [
2,
1,
false
]
},
{
"label": "dark/delete/true geometry",
"actual": [
"66px",
"19px",
"19px",
"28px",
"6px",
"12px"
],
"expected": [
"66px",
"19px",
"19px",
"28px",
"6px",
"12px"
]
},
{
"label": "dark/delete/true geometry",
"actual": [
"66px",
"19px",
"19px",
"28px",
"6px",
"12px"
],
"expected": [
"66px",
"19px",
"19px",
"28px",
"6px",
"12px"
]
},
{
"label": "dark/delete/true primary/danger colors",
"actual": [
"rgb(175, 25, 26)",
"rgb(255, 255, 255)"
],
"expected": [
"rgb(175, 25, 26)",
"rgb(255, 255, 255)"
]
},
{
"label": "dark/delete/true secondary colors/border",
"actual": [
"rgb(38, 38, 38)",
"1px",
"solid",
"rgb(61, 61, 61)"
],
"expected": [
"rgb(38, 38, 38)",
"1px",
"solid",
"rgb(61, 61, 61)"
]
},
{
"label": "dark/delete/true shell",
"actual": [
"240px",
"16px",
"600"
],
"expected": [
"240px",
"16px",
"600"
]
},
{
"label": "dark/delete/true shell background",
"actual": "rgb(36, 36, 36)",
"expected": "rgb(36, 36, 36)"
},
{
"label": "dark/delete/true initial focus",
"actual": true,
"expected": true
},
{
"label": "dark/delete/true running delete semantic",
"actual": "停止并删除",
"expected": "停止并删除"
},
{
"label": "dark/delete/true busy prevents duplicates",
"actual": [
1,
true,
true,
"处理中…"
],
"expected": [
1,
true,
true,
"处理中…"
]
},
{
"label": "dark/delete/true busy cannot dismiss",
"actual": 0,
"expected": 0
},
{
"label": "dark/delete/true danger busy background",
"actual": "rgb(128, 56, 56)",
"expected": "rgb(128, 56, 56)"
},
{
"label": "dark/delete/true failure retained",
"actual": "fixture failure",
"expected": "fixture failure"
},
{
"label": "dark/delete/true retry enabled",
"actual": false,
"expected": false
},
{
"label": "dark/delete/true retry success",
"actual": [
2,
1,
false
],
"expected": [
2,
1,
false
]
}
],
"rendererErrors": [],
"scope": "Actual Electron Chromium component fixture; isolated callbacks, no IPC/model/session execution"
}
@@ -0,0 +1,44 @@
// Acceptance-only Electron runner for the unchanged supplied Chromium HTML fixture.
const fs = require('fs')
const path = require('path')
const assert = require('assert/strict')
const electron = require('electron')
const directory = path.resolve(process.argv.at(-1))
assert.ok(path.dirname(directory) === path.resolve('.tmp') && path.basename(directory).startsWith('task-popconfirm-browser-'))
if (!process.versions.electron) {
const env = { ...process.env }
delete env.ELECTRON_RUN_AS_NODE
delete env.ELECTRON_RENDERER_URL
const child = require('child_process').spawn(electron, [__filename, directory], { env, windowsHide: true, stdio: 'inherit' })
const timer = setTimeout(() => child.kill(), 60000)
child.once('exit', (code, signal) => {
clearTimeout(timer)
console.log(JSON.stringify({ directory, exitCode: code, signal }))
process.exitCode = code === 0 ? 0 : 1
})
} else {
const { app, BrowserWindow } = electron
const data = path.join(directory, 'electron-profile')
fs.mkdirSync(data, { recursive: true })
app.setPath('userData', data)
app.disableHardwareAcceleration()
app.whenReady().then(async () => {
const win = new BrowserWindow({ width: 1000, height: 700, show: false, webPreferences: { contextIsolation: true, nodeIntegration: false, backgroundThrottling: false } })
const errors = []
win.webContents.on('console-message', event => { if (event.level === 'error' || event.level >= 3) errors.push(event.message) })
await win.loadFile(path.join(directory, 'index.html'))
win.showInactive()
for (let i = 0; i < 300; i++) {
const result = await win.webContents.executeJavaScript('document.querySelector("#result")?.textContent')
if (result) {
const report = JSON.parse(result)
fs.writeFileSync(path.join(directory, 'electron-report.json'), JSON.stringify({ ...report, rendererErrors: errors, scope: 'Actual Electron Chromium component fixture; isolated callbacks, no IPC/model/session execution' }, null, 2))
console.log(JSON.stringify({ pass: report.pass, checks: report.results.length, error: report.error, rendererErrors: errors }))
app.exit(report.pass && errors.length === 0 ? 0 : 1)
return
}
await new Promise(resolve => setTimeout(resolve, 80))
}
throw Error('Fixture result timed out')
}).catch(error => { console.error(error); app.exit(1) })
}
@@ -0,0 +1,362 @@
{
"codeSha": "1ed71b63b5af9a98b942ff47c66df5799d4d2c8a",
"scope": "Real isolated Windows Electron main/preload/renderer; synthetic persisted messages, no model/SDK or original app access.",
"light": {
"theme": "light",
"titleOutsideContent": true,
"cardCount": 1,
"rawAnswerVisible": false,
"horizontalOverflow": false,
"styles": [
{
"selector": ".ask-user-question--completed",
"fontSize": "13px",
"fontWeight": "400",
"lineHeight": "19px",
"background": "rgba(0, 0, 0, 0)",
"padding": "2px 0px",
"borderRadius": "0px",
"border": "0px none rgb(51, 51, 51)",
"overflow": "visible",
"maxHeight": "none",
"width": 752,
"height": 117.5,
"scrollHeight": 118,
"clientHeight": 118
},
{
"selector": ".ask-user-question__header",
"fontSize": "14px",
"fontWeight": "400",
"lineHeight": "24.5px",
"background": "rgba(0, 0, 0, 0)",
"padding": "0px",
"borderRadius": "0px",
"border": "0px none rgba(0, 0, 0, 0.5)",
"overflow": "visible",
"maxHeight": "none",
"width": 752,
"height": 24.5,
"scrollHeight": 25,
"clientHeight": 25
},
{
"selector": ".ask-user-question__content",
"fontSize": "13px",
"fontWeight": "400",
"lineHeight": "19px",
"background": "rgb(242, 242, 242)",
"padding": "12px 16px",
"borderRadius": "16px",
"border": "0px none rgb(51, 51, 51)",
"overflow": "auto",
"maxHeight": "300px",
"width": 752,
"height": 77,
"scrollHeight": 77,
"clientHeight": 77
},
{
"selector": ".question-answer-transcript__question",
"fontSize": "14px",
"fontWeight": "400",
"lineHeight": "24.5px",
"background": "rgba(0, 0, 0, 0)",
"padding": "0px",
"borderRadius": "0px",
"border": "0px none rgb(128, 128, 128)",
"overflow": "visible",
"maxHeight": "none",
"width": 720,
"height": 24.5,
"scrollHeight": 25,
"clientHeight": 25
},
{
"selector": ".question-answer-transcript__answer",
"fontSize": "14px",
"fontWeight": "400",
"lineHeight": "24.5px",
"background": "rgba(0, 0, 0, 0)",
"padding": "0px",
"borderRadius": "0px",
"border": "0px none rgb(51, 51, 51)",
"overflow": "visible",
"maxHeight": "none",
"width": 720,
"height": 24.5,
"scrollHeight": 25,
"clientHeight": 25
}
]
},
"dark": {
"theme": "dark",
"titleOutsideContent": true,
"cardCount": 1,
"rawAnswerVisible": false,
"horizontalOverflow": false,
"styles": [
{
"selector": ".ask-user-question--completed",
"fontSize": "13px",
"fontWeight": "400",
"lineHeight": "19px",
"background": "rgba(0, 0, 0, 0)",
"padding": "2px 0px",
"borderRadius": "0px",
"border": "0px none rgb(210, 211, 224)",
"overflow": "visible",
"maxHeight": "none",
"width": 752,
"height": 117.5,
"scrollHeight": 118,
"clientHeight": 118
},
{
"selector": ".ask-user-question__header",
"fontSize": "14px",
"fontWeight": "400",
"lineHeight": "24.5px",
"background": "rgba(0, 0, 0, 0)",
"padding": "0px",
"borderRadius": "0px",
"border": "0px none rgba(255, 255, 255, 0.45)",
"overflow": "visible",
"maxHeight": "none",
"width": 752,
"height": 24.5,
"scrollHeight": 25,
"clientHeight": 25
},
{
"selector": ".ask-user-question__content",
"fontSize": "13px",
"fontWeight": "400",
"lineHeight": "19px",
"background": "rgb(42, 44, 49)",
"padding": "12px 16px",
"borderRadius": "16px",
"border": "0px none rgb(210, 211, 224)",
"overflow": "auto",
"maxHeight": "300px",
"width": 752,
"height": 77,
"scrollHeight": 77,
"clientHeight": 77
},
{
"selector": ".question-answer-transcript__question",
"fontSize": "14px",
"fontWeight": "400",
"lineHeight": "24.5px",
"background": "rgba(0, 0, 0, 0)",
"padding": "0px",
"borderRadius": "0px",
"border": "0px none rgb(160, 160, 160)",
"overflow": "visible",
"maxHeight": "none",
"width": 720,
"height": 24.5,
"scrollHeight": 25,
"clientHeight": 25
},
{
"selector": ".question-answer-transcript__answer",
"fontSize": "14px",
"fontWeight": "400",
"lineHeight": "24.5px",
"background": "rgba(0, 0, 0, 0)",
"padding": "0px",
"borderRadius": "0px",
"border": "0px none rgb(210, 211, 224)",
"overflow": "visible",
"maxHeight": "none",
"width": 720,
"height": 24.5,
"scrollHeight": 25,
"clientHeight": 25
}
]
},
"narrow": {
"theme": "light",
"titleOutsideContent": true,
"cardCount": 1,
"rawAnswerVisible": false,
"horizontalOverflow": false,
"styles": [
{
"selector": ".ask-user-question--completed",
"fontSize": "13px",
"fontWeight": "400",
"lineHeight": "19px",
"background": "rgba(0, 0, 0, 0)",
"padding": "2px 0px",
"borderRadius": "0px",
"border": "0px none rgb(51, 51, 51)",
"overflow": "visible",
"maxHeight": "none",
"width": 446,
"height": 117.5,
"scrollHeight": 118,
"clientHeight": 118
},
{
"selector": ".ask-user-question__header",
"fontSize": "14px",
"fontWeight": "400",
"lineHeight": "24.5px",
"background": "rgba(0, 0, 0, 0)",
"padding": "0px",
"borderRadius": "0px",
"border": "0px none rgba(0, 0, 0, 0.5)",
"overflow": "visible",
"maxHeight": "none",
"width": 446,
"height": 24.5,
"scrollHeight": 25,
"clientHeight": 25
},
{
"selector": ".ask-user-question__content",
"fontSize": "13px",
"fontWeight": "400",
"lineHeight": "19px",
"background": "rgb(242, 242, 242)",
"padding": "12px 16px",
"borderRadius": "16px",
"border": "0px none rgb(51, 51, 51)",
"overflow": "auto",
"maxHeight": "300px",
"width": 446,
"height": 77,
"scrollHeight": 77,
"clientHeight": 77
},
{
"selector": ".question-answer-transcript__question",
"fontSize": "14px",
"fontWeight": "400",
"lineHeight": "24.5px",
"background": "rgba(0, 0, 0, 0)",
"padding": "0px",
"borderRadius": "0px",
"border": "0px none rgb(128, 128, 128)",
"overflow": "visible",
"maxHeight": "none",
"width": 414,
"height": 24.5,
"scrollHeight": 25,
"clientHeight": 25
},
{
"selector": ".question-answer-transcript__answer",
"fontSize": "14px",
"fontWeight": "400",
"lineHeight": "24.5px",
"background": "rgba(0, 0, 0, 0)",
"padding": "0px",
"borderRadius": "0px",
"border": "0px none rgb(51, 51, 51)",
"overflow": "visible",
"maxHeight": "none",
"width": 414,
"height": 24.5,
"scrollHeight": 25,
"clientHeight": 25
}
]
},
"long": {
"theme": "light",
"titleOutsideContent": true,
"cardCount": 1,
"rawAnswerVisible": false,
"horizontalOverflow": false,
"styles": [
{
"selector": ".ask-user-question--completed",
"fontSize": "13px",
"fontWeight": "400",
"lineHeight": "19px",
"background": "rgba(0, 0, 0, 0)",
"padding": "2px 0px",
"borderRadius": "0px",
"border": "0px none rgb(51, 51, 51)",
"overflow": "visible",
"maxHeight": "none",
"width": 446,
"height": 340.5,
"scrollHeight": 341,
"clientHeight": 341
},
{
"selector": ".ask-user-question__header",
"fontSize": "14px",
"fontWeight": "400",
"lineHeight": "24.5px",
"background": "rgba(0, 0, 0, 0)",
"padding": "0px",
"borderRadius": "0px",
"border": "0px none rgba(0, 0, 0, 0.5)",
"overflow": "visible",
"maxHeight": "none",
"width": 446,
"height": 24.5,
"scrollHeight": 25,
"clientHeight": 25
},
{
"selector": ".ask-user-question__content",
"fontSize": "13px",
"fontWeight": "400",
"lineHeight": "19px",
"background": "rgb(242, 242, 242)",
"padding": "12px 16px",
"borderRadius": "16px",
"border": "0px none rgb(51, 51, 51)",
"overflow": "auto",
"maxHeight": "300px",
"width": 446,
"height": 300,
"scrollHeight": 5688,
"clientHeight": 300
},
{
"selector": ".question-answer-transcript__question",
"fontSize": "14px",
"fontWeight": "400",
"lineHeight": "24.5px",
"background": "rgba(0, 0, 0, 0)",
"padding": "0px",
"borderRadius": "0px",
"border": "0px none rgb(128, 128, 128)",
"overflow": "visible",
"maxHeight": "none",
"width": 404,
"height": 98,
"scrollHeight": 98,
"clientHeight": 98
},
{
"selector": ".question-answer-transcript__answer",
"fontSize": "14px",
"fontWeight": "400",
"lineHeight": "24.5px",
"background": "rgba(0, 0, 0, 0)",
"padding": "0px",
"borderRadius": "0px",
"border": "0px none rgb(51, 51, 51)",
"overflow": "visible",
"maxHeight": "none",
"width": 404,
"height": 122.5,
"scrollHeight": 123,
"clientHeight": 123
}
]
},
"innerQuestionPreserved": "true",
"rendererErrors": []
}
@@ -0,0 +1,27 @@
[
{
"Command": "npm run test:conversation",
"ExitCode": 0,
"Log": ".tmp/b01-acceptance/test-conversation-02.log"
},
{
"Command": "npm run test:workbuddy-import",
"ExitCode": 0,
"Log": ".tmp/b01-acceptance/test-workbuddy-import-02.log"
},
{
"Command": "npm run test:artifacts",
"ExitCode": 0,
"Log": ".tmp/b01-acceptance/test-artifacts-02.log"
},
{
"Command": "npm run test:fold-summary",
"ExitCode": 1,
"Log": ".tmp/b01-acceptance/test-fold-summary-02.log"
},
{
"Command": "npm run check:tokens",
"ExitCode": 1,
"Log": ".tmp/b01-acceptance/check-tokens-02.log"
}
]
@@ -0,0 +1,96 @@
/** Independent read-only acceptance probe. Writes only .tmp output; no SDK/Electron/services. */
import { build } from 'esbuild'
import { spawnSync, execFileSync } from 'node:child_process'
import { writeFileSync, mkdirSync } from 'node:fs'
import path from 'node:path'
const baseline = process.argv.includes('--baseline')
mkdirSync('.tmp/b01-readonly-review', {recursive:true})
const baselineModulesLoaded = []
const checkoutRevision = execFileSync('git', ['rev-parse', 'HEAD'], {encoding:'utf8'}).trim()
if (checkoutRevision !== '1ed71b63b5af9a98b942ff47c66df5799d4d2c8a') throw new Error('Run in the fixed 1ed71b6 acceptance checkout')
const revision = baseline ? '37ddb2ce24c23d1fab7d0609a62901cc666d4975' : '1ed71b63b5af9a98b942ff47c66df5799d4d2c8a'
const baselinePaths = new Set([
'src/renderer/src/components/MessageBubble.tsx',
'src/renderer/src/workbuddy/conversation/CompletedFold.tsx',
'src/renderer/src/workbuddy/conversation/SpecializedBlocks.tsx',
'src/renderer/src/workbuddy/conversation/SourceToolHeader.tsx',
'src/renderer/src/workbuddy/conversation/ToolCall.tsx',
'src/renderer/src/workbuddy/conversation/ToolCallRenderer.tsx',
'src/renderer/src/workbuddy/conversation/AskUserQuestion.tsx'
])
const source=String.raw`
import assert from 'node:assert/strict'
import {createRequire} from 'node:module'
const domModule=process.env.YCODE_TEST_DOM_MODULE||process.cwd()+'/.tmp/b01-dom/node_modules/jsdom'
const {JSDOM}=createRequire(process.cwd()+'/package.json')(domModule)
const dom=new JSDOM('<!doctype html><html><body><main id="root"></main></body></html>',{pretendToBeVisual:true,url:'http://localhost/'})
for(const key of ['window','document','Node','Element','HTMLElement','MouseEvent','KeyboardEvent','Event'])Object.defineProperty(globalThis,key,{value:dom.window[key],configurable:true})
Object.defineProperty(globalThis,'navigator',{value:dom.window.navigator,configurable:true})
Object.assign(globalThis,{IS_REACT_ACT_ENVIRONMENT:true})
const {act}=require('react') as typeof import('react')
const {createRoot}=require('react-dom/client') as typeof import('react-dom/client')
const MessageBubble=require('./src/renderer/src/components/MessageBubble').default
const {applyAssistantEvent}=require('./src/shared/message-parts')
const root=createRoot(document.querySelector('#root')!)
const selectors={plan:'.cb-plan-header-left',task:'.cb-task-result-item-title'}
const get=(selector:string)=>{const node=document.querySelector(selector);assert.ok(node,selector);return node}
const state=()=>Object.fromEntries(Object.entries(selectors).map(([kind,selector])=>[kind,get(selector).getAttribute('aria-expanded')]))
async function render(message:any){await act(async()=>root.render(<MessageBubble message={message}/>))}
async function click(selector:string){await act(async()=>get(selector).dispatchEvent(new MouseEvent('click',{bubbles:true})))}
async function main(){
let message:any={id:'b01-typed-part-repro',role:'assistant',createdAt:1,content:'',status:'streaming',parts:[]}
const streamingEvents=[
{type:'text',delta:'Draft one'},
{type:'part',part:{type:'reasoning',id:'r',text:'Thought',finished:true}},
{type:'text',delta:'Draft two'},
{type:'part',part:{type:'plan',plan:{id:'p',title:'Plan',steps:[]}}},
{type:'part',part:{type:'task',task:{id:'x',title:'Task',status:'success',summary:'Task result'}}}
]
for(const event of streamingEvents)message=applyAssistantEvent(message,event)
const input=JSON.parse(JSON.stringify(message))
await render(message)
const initially=state()
await click(selectors.plan);await click(selectors.task)
const selected=state()
assert.deepEqual(selected,{plan:'false',task:'false'})
const terminalEvent={type:'done',content:'Corrected final prose',tools:[],turnDurationMs:1000}
const finished=applyAssistantEvent(message,terminalEvent)
await render(finished)
const after=state()
const result={
testedRevision:process.env.B01_PROBE_REVISION,
runtime:{node:process.version,platform:process.platform,react:require('react/package.json').version,jsdom:createRequire(process.cwd()+'/package.json')(domModule+'/package.json').version},
input,terminalEvent,outputParts:finished.parts,
ariaExpanded:{initially,afterUserCollapse:selected,afterTerminalCorrection:after},
expectedAfterTerminalCorrection:selected,
retainsUserChoices:JSON.stringify(selected)===JSON.stringify(after)
}
console.log(JSON.stringify(result,null,2))
await act(async()=>root.unmount());dom.window.close()
}
main().then(()=>process.exit(0)).catch(error=>{console.error(error);dom.window.close();process.exit(1)})
`
const outfile=`.tmp/b01-readonly-review/typed-part-repro-${baseline?'baseline':'1ed71b6'}.cjs`
await build({
stdin:{contents:source,sourcefile:'b01-typed-part-repro.tsx',loader:'tsx',resolveDir:process.cwd()},
outfile,bundle:true,platform:'node',format:'cjs',jsx:'automatic',loader:{'.css':'empty'},logLevel:'warning',
plugins:baseline?[{name:'read-baseline-product-modules',setup(build){build.onLoad({filter:/\.tsx$/},args=>{
const relative=path.relative(process.cwd(),args.path).split(path.sep).join('/')
if(!baselinePaths.has(relative))return
baselineModulesLoaded.push(relative)
return {contents:execFileSync('git',['show',`${revision}:${relative}`],{encoding:'utf8'}),loader:'tsx',resolveDir:path.dirname(args.path)}
})}}]:[]
})
const result=spawnSync(process.execPath,[outfile],{encoding:'utf8',timeout:120000,env:{...process.env,B01_PROBE_REVISION:revision}})
const output=`.tmp/b01-readonly-review/typed-part-repro-${baseline?'baseline':'1ed71b6'}.json`
if(result.stderr)process.stderr.write(result.stderr)
if(result.status!==0){process.stderr.write(result.stdout);throw result.error||new Error(`probe exited ${result.status}`)}
if(baseline && baselineModulesLoaded.length !== baselinePaths.size) throw new Error('Baseline override did not load every changed React module')
const parsed=JSON.parse(result.stdout)
parsed.verificationMethod = baseline ? 'Bundled every changed React module from git show 37ddb2c; remaining product code equals tested checkout for this path' : 'Bundled fixed 1ed71b6 checkout product modules'
parsed.baselineModulesLoaded=baselineModulesLoaded
writeFileSync(output,JSON.stringify(parsed,null,2)+'\n')
console.log(JSON.stringify({evidence:output,testedRevision:revision,ariaExpanded:parsed.ariaExpanded,inputParts:parsed.input.parts.map(part=>part.type),outputParts:parsed.outputParts.map(part=>part.type),retainsUserChoices:parsed.retainsUserChoices},null,2))
if(process.argv.includes('--assert') && !parsed.retainsUserChoices) process.exitCode=1
@@ -0,0 +1,105 @@
{
"testedRevision": "1ed71b63b5af9a98b942ff47c66df5799d4d2c8a",
"runtime": {
"node": "v24.21.0",
"platform": "win32",
"react": "19.3.0",
"jsdom": "30.1.3"
},
"input": {
"id": "b01-typed-part-repro",
"role": "assistant",
"createdAt": 1,
"content": "Draft oneDraft two",
"status": "streaming",
"parts": [
{
"type": "text",
"text": "Draft one"
},
{
"type": "reasoning",
"id": "r",
"text": "Thought",
"finished": true
},
{
"type": "text",
"text": "Draft two"
},
{
"type": "plan",
"plan": {
"id": "p",
"title": "Plan",
"steps": []
}
},
{
"type": "task",
"task": {
"id": "x",
"title": "Task",
"status": "success",
"summary": "Task result"
}
}
]
},
"terminalEvent": {
"type": "done",
"content": "Corrected final prose",
"tools": [],
"turnDurationMs": 1000
},
"outputParts": [
{
"type": "text",
"text": "Corrected final prose"
},
{
"type": "reasoning",
"id": "r",
"text": "Thought",
"finished": true
},
{
"type": "plan",
"plan": {
"id": "p",
"title": "Plan",
"steps": []
}
},
{
"type": "task",
"task": {
"id": "x",
"title": "Task",
"status": "success",
"summary": "Task result"
}
}
],
"ariaExpanded": {
"initially": {
"plan": "true",
"task": "true"
},
"afterUserCollapse": {
"plan": "false",
"task": "false"
},
"afterTerminalCorrection": {
"plan": "false",
"task": "false"
}
},
"expectedAfterTerminalCorrection": {
"plan": "false",
"task": "false"
},
"retainsUserChoices": true,
"verificationMethod": "Bundled fixed 51531dc checkout product modules",
"baselineModulesLoaded": []
}