From 74ec320135552d5b6ec75e4f234ea3d6262c1522 Mon Sep 17 00:00:00 2001 From: Jason Woltje Date: Thu, 22 Oct 2026 19:06:03 -0500 Subject: [PATCH] reviews: Q195 S0 amendments A1/A2 from Filbert, D8 ruling (#1798) M1 adds WOFF1 summed-table and WOFF2 declared-size refusals. F2 is corrected: ctrl+click is already limited to http, https and mailto, and the exposure is DOCX save writing targets back; M2 now targets host-saved DOCX output. CSP report nits N1-N3 fixed. D8 recorded as ruled by Mos (mos-1363): style-src 'self', rfd hash not approved. --- BUILD-LOG.md | 2 ++ docs/SESSIONS.md | 1 + docs/reviews/2026-10-22_q195-editor-csp.md | 29 ++++++++++--------- .../2026-10-22_q195-wordcraft-security.json | 26 ++++++++--------- .../2026-10-22_q195-wordcraft-security.md | 28 ++++++++++-------- 5 files changed, 48 insertions(+), 38 deletions(-) diff --git a/BUILD-LOG.md b/BUILD-LOG.md index 8f5c53123..030836e06 100644 --- a/BUILD-LOG.md +++ b/BUILD-LOG.md @@ -5360,3 +5360,5 @@ Gander: after Duckworth-0100 design approval with C1-C5, prepared the two host-s 2026-10-22T23:13:48Z | Gyro mos-1359 / r3 push guard | D13 records save-group timing as Mos's accepted reading of Q226 F41, not Jason's ruling; both defaults remain human-only settings. Push guard identity gyro/purpose push: exit 0 documented degraded-pass, CANNOT_ASSERT credential-unresolvable; audit gyro-q195-ci-queue-audit.jsonl, no credential fallback or CI-green claim. 2026-10-22T23:58:36Z | Fenton Q195 O2 S0 (#1798, sage-3058 under mos-1360) | Before: partial inventory b7daf5198, no verdict. After: CONDITIONAL PASS on WordCraft e05b7fe8. Inventory 15 local / 199 normal / 10 build-only / 25 build scripts / 10 proc-macros, 3 git deps by commit. Licenses resolved by a notice bundle (L1: epaint fonts missing from WordCraft NOTICE; self_cell and ryu elect Apache-2.0). Findings F1-F15 (F1 wuff WOFF1 orig_length allocation trap reachable from DOCX open, source only), mandatory mitigations M1-M14 with rejection tests. Browser on the copied artifact: style-src self 1 violation (rfd inline style, removed by host-owned Open), style-hash 0 violations, all functions run; Print blob iframe and cross-origin frame navigation blocked. D8 hash fallback returned to Mos, not recommended. Corrections: style-hash attempt 1 had a harness-made connect-src violation (rerun clean); Print evidence copied from the transcript. No compile, no Console/policy/live change, loopback-only fixtures. Filbert reviews. + +2026-10-23T00:06:03Z | Fenton Q195 O2 S0 amendments (#1798, sage-3085, mos-1363) | Before: 85ae2be77 CONDITIONAL PASS; Filbert concurred with A1/A2 required (comment 30914). After: A1 M1 refuses WOFF1 per-table and summed origLength and WOFF2 totalSfntSize/brotli uncompressed_size before decode (WOFF2 a regression case, wuff bounds it at 128 MiB). A2 corrected F2: ctrl+click is already limited to http/https/mailto (canvas.rs:2490-2501, link.rs:7); exposure is DOCX save writing targets back (write/story.rs:335-340); F2 now low, M2 retargeted at host-saved DOCX output plus https under M7. N1-N3 fixed in the CSP report (resize receipt, harness/ prefix, loopback claim). D8 recorded as ruled by Mos mos-1363: style-src self, hash not approved. Docs only, no slot. diff --git a/docs/SESSIONS.md b/docs/SESSIONS.md index f8a2d618f..6e1c9d462 100644 --- a/docs/SESSIONS.md +++ b/docs/SESSIONS.md @@ -1553,3 +1553,4 @@ are never rewritten or removed; corrections are new entries. 2026-10-22T23:09:38Z | Gyro (Codex gpt-6.1-sol, fenton-0006) | Q195 O2 design corrections on gyro/editor-o2 | F1 requirement boundary sent to Mos, adoption gated; F2-F6 source-checked docs fixes prepared. Ten briefs and two open owner items checked statically. No implementation, build/browser/worker run, queue or live action; Fenton re-check after push. 2026-10-22T23:13:27Z | Gyro (Codex gpt-6.1-sol, fenton-0007) | Q195 O2 r3 F7/F8 | Save-group keys/defaults/validation and W3b refusal/W4b lift ownership explicit. Static docs checks only. Q36 remains open; no implementation or gate lift. Direct Fenton/Mos handoff after push. 2026-10-22T23:58:36Z | Fenton (Claude Opus 5.5, sage-3058) | Q195 O2 S0 WordCraft source security and CSP review, fenton/q195-s0 | CONDITIONAL PASS, M1-M14 mandatory, D8 style-src hash held for Mos. Reviews docs only; Filbert review requested. +2026-10-23T00:06:03Z | Fenton (Claude Opus 5.5, sage-3085) | Q195 S0 amendments A1/A2 and N1-N3 on fenton/q195-s0, D8 ruling recorded | Docs only; Filbert re-check requested. diff --git a/docs/reviews/2026-10-22_q195-editor-csp.md b/docs/reviews/2026-10-22_q195-editor-csp.md index 7b3274d3d..2817c2129 100644 --- a/docs/reviews/2026-10-22_q195-editor-csp.md +++ b/docs/reviews/2026-10-22_q195-editor-csp.md @@ -30,14 +30,14 @@ Copied from Louie's build (origin/louie/wordcraft-eval 880ef19e0); each hash mat | File | SHA-256 | |---|---| -| www/frame.html | `6a8d141fa8b073cff73fa666fdf030a9f91030924e74a6aa0a441d76a5583f82` | -| www/frame-bootstrap.js | `32c8f71acfe14f3bdc4d31534ed3a84609fc4fb1fb8a1a4a96f56eb28f39d3d4` | -| www/frame.css | `629eb32e9cdf6b97f0ce79f841419ab4a80d42f322c10948ec5d23198799111e` | -| www/shell.html | `cf94f1ce359e8b90f86d39cdef98894d7874e97da9cf7eb0808b0f6e038b3bac` | -| www/shell.css | `372716168beb22dd9fbc7e3d45a76bc06c1b3b1d8f59807a187700689d9ff38c` | +| harness/www/frame.html | `6a8d141fa8b073cff73fa666fdf030a9f91030924e74a6aa0a441d76a5583f82` | +| harness/www/frame-bootstrap.js | `32c8f71acfe14f3bdc4d31534ed3a84609fc4fb1fb8a1a4a96f56eb28f39d3d4` | +| harness/www/frame.css | `629eb32e9cdf6b97f0ce79f841419ab4a80d42f322c10948ec5d23198799111e` | +| harness/www/shell.html | `cf94f1ce359e8b90f86d39cdef98894d7874e97da9cf7eb0808b0f6e038b3bac` | +| harness/www/shell.css | `372716168beb22dd9fbc7e3d45a76bc06c1b3b1d8f59807a187700689d9ff38c` | | harness/serve.py | `ad34aed5cdf49a77128778f5f6523698d35f5a6eca771e1dbe53941f09fabe80` | | harness/instrument.js | `028e914a994a518043dab0b834a9917fc67bc35730f9e3725b59ebd8fa8fb0fa` | -| fixtures/s0-full-feature.docx (9985 B) | `b40eb5875518701d10de1a5419931f02e10c378560fbd5ab6a2ed68d19be53f4` | +| harness/fixtures/s0-full-feature.docx (9985 B) | `b40eb5875518701d10de1a5419931f02e10c378560fbd5ab6a2ed68d19be53f4` | The frame wrapper loads the wasm-bindgen module from `frame-bootstrap.js`; it has no inline script or inline style. The fixture is generated by `harness/make_fixture.py`. It carries @@ -88,8 +88,10 @@ measurement. The real adapter's frame route sends the frame header above. | frame navigation test | 7392 | 1 in the shell, intended: `frame-src`, enforce | n/a | `browser-console-network.txt` | | Print probe | 7392 | 1, intended: `frame-src`, blocked `blob` | Print blocked | `print-probe.json` | -Each full pass made exactly 8 requests: the 8 routes, all from 127.0.0.1, all 200. The fixture -fetch is one of them. No other origin was contacted. +Each full pass made exactly 8 requests: the 8 routes, all 200, and the fixture fetch is one of +them. That the client was 127.0.0.1 rests on the server binding 127.0.0.1 only (`serve.py`); the +request log does not record the peer address. The browser's network list showed no request to +any other origin. The one style-self violation fired between the file-picker click and the fixture feed. Source: rfd 0.17.2 `src/backend/wasm.rs:127-129` appends its `wasm/style.css` as a `