Files

11 KiB

Row214 C2-11a work record

Assignment sage-2794 at2026-10-22T16:33:20Z, Q220/mos-1301, issue#1715. New isolated branch herb/row214 on aca16404c. The earlier197/215 worktrees and their dirty/untracked historical packets are untouched. node_modules is the required plain symlink to /mnt/storage/src/mosaic-stack/node_modules.

Read C2-11a in both pinned briefs. The section is unchanged at51cc0445c; Q222 changes C2-06's reply-limit settings, not wikilinks. The editor model, entry, view, existing model/browser/provenance tests, build/toolchain and vendored markdown parser/serializer were read. No third_party source changes.

Static finding and authored work

model.mjs stores a canonical sig and the raw original block, and serialise returns raw when the sig matches. The vendored text writer escapes brackets (to_markdown.ts:433-437). It is therefore possible for no-edit round-trips to pass while dirty-block output escapes a wikilink. This is a source-based hypothesis, not a measured result. Both outcomes are in DESIGN.md.

Authored, unrun: the pinned-bundle measurement; ten fixture round-trips; three browser regressions; inert wikilink schema/tokenizer/serializer. The schema includes headings, and front matter remains raw. The serializer validates its spelling before bypassing escaping. HTML/entity-like targets stay text under the existing escaping rules. No clicking or resolution.

Local static git diff --check is clean. No Node, npm, compiler, browser, measurement, test, Docker, HTTPS Git or push has run. The queue claim waits for a gap because scripts/mosaic invokes Node. No candidate or pass claim. Only design/path documents may be committed before the granted red/green checks; product, tests and measurement remain uncommitted until validated.

Next granted steps

  1. Claim from canonical during a CLEAR/gap.
  2. Run measure.mjs against aca16404c's pinned Git blobs; save JSON unchanged.
  3. Run the structural/edit regression alone on the baseline bundle (red).
  4. Install the already-pinned esbuild0.28.2 in this worktree's packages/webui with npm ci --ignore-scripts --no-audit --no-fund; no root install or lock edit.
  5. Build with the existing editor/build.mjs, then the whole new test file and existing editor, editor-browser and editor-provenance files, each singly.
  6. Kill the serializer-removal mutant, restore, rebuild, focused green.
  7. Commit only after the applicable checks, push only when Sage clears HTTPS Git, send Filbert and Mos the candidate SHA/hash manifest directly, cc Sage.
  8. After253 lands, new branch on its tip preserving all landed changes.
  9. Filbert and Sage's whole webui and scripts gate finish the row.

All runs wait for explicit Sage CLEAR. Gander's row253 run5 owns the slot. The whole suite gate and any unexpected failure use mos-0823's stop rule.

Proposed SESSIONS text for Sage's post-253 doc sweep (do not append here): 2026-10-22 | Herb (gpt-6.1-sol, f6cf4287) | row214 C2-11a editor wikilinks authoring | On herb/row214 at aca16404c, authored baseline round-trip measurement, designs for equal/unequal results, inert inline node and regression tests under sage-2794/Q220. Claim, runs and pushes held while253 owns the slot; measurement and test results unavailable.

Filbert static design/path review accepted, R1 and R2 required

Review at2026-10-22T16:43:35Z read dee9f3d8d's packet only, no product or runs. R1 is now in the plan: set MOSAIC_REQUIRE_EDITOR_BUILD=1 on focused provenance and whole webui runs, grep ^# skip plus TAP/spec skip directives, and name every skip. Missing/wrong pinned esbuild must fail, not skip. R2: baseline no-edit roundTrips are expected to pass. They test retention of raw bytes and are not red evidence for the node. Only the baseline same-block structural/edit regression is expected red.

Two added fixtures cover a reference-definition collision and an atom inside ordinary link text, taking the planned file to10 no-edit tests and 3 browser tests. The explicit & exclusion preserves the existing escaped HTML/entity writer for dirty blocks; Q&A stays text and is a known limit. Measurement VM setup matches loadEditor. Browser TMPDIR must use the short non-/tmp scratch root. Sweep Node/Chromium after mutant/timeout and at clear. All remain authored and unrun while253 owns the slot.

Filbert follow-up at2026-10-22T16:45:34Z: the authored N3 browser fixture now explicitly asserts the separate reference-definition block ends in its original exact bytes after the same-block edit. This test change is unrun and uncommitted with the other product/test authoring, pending CLEAR.

R2 restart on current refactor, sage-4164

New worktree: /home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2. Branch herb/row214-r2, base487500a16f4ab5902c318509fdec6acc56a543ca. Carried dee9f3d8d and e2710e92a as67ac3c25a andde42a59d4. Copied only Herb's local model, new editor test/helper, measure.mjs and pending BUILD note. The old worktree remains untouched. No stash or force push.

The current editor model/build/toolchain/BUILD.json/shipped bundle and loader are identical to the old base. Entry/view and package dependencies are unchanged. The current test fixture adds configDirectory:root; its landed change is retained. The C2-11a brief section is unchanged. The visual-mode condition now lives at public/bus.js:1054. No product behavior beyond the accepted inert inline node is added by the rebase.

Row266 overlap: none. Our paths do not touch chat*.mjs, chat.js or chat.css, and the intersection with origin/fethry/row266's actual diff is empty. HASH-PINS.json records that ref's SHA and merge base.

Hash audit: grepped packages/*/tests for each actual/planned changed file and filename, and scanned495 test/fixture files for literal prior SHA256 or Git-blob pins. No such pins found. Existing editor-provenance checks read BUILD.json dynamically; regenerating it and the bundle is required. The loader and browser/route tests use editor.js but pin no source hash. No tests or pin asserts were weakened. The complete references and planned generated paths are in HASH-PINS.json.

Sage-4164 explicitly permits the unrun node/tests to be committed now. This supersedes the earlier packet's instruction to keep them uncommitted until green. Static authoring is not a tested candidate. SOURCE.json records its source hashes and the unbuilt generated-output status. The measurement now pins this current execution base, not the historical accepted-doc base.

No Node, npm, measurement, compiler, test, browser, Docker or mutant has run. Claim already succeeded at rev3234 on10-22; no new queue move is needed. Push authorization is only herb/row214-r2. Row257's landing gate and then266 own the slot; all execution remains held for Sage's CLEAR.

Planned focused grant: baseline measurement; the same-block structural red; pinned npm ci/build; whole editor-wikilink.test.mjs (10 no-edit tests with/without a final newline and3 browser tests), editor.test.mjs, editor-browser.test.mjs and editor-provenance.test.mjs singly; one serializer-removal mutant and restored focused green. Set MOSAIC_REQUIRE_EDITOR_BUILD=1 for provenance and the later whole webui gate. Capture all skip names, raw logs, short scratch TMPDIR and final Node/Chromium process sweep. Two failures stop a gate; no rerun after an out-of-row failure without reporting to Sage.

Filbert R2 static B1 fixed before execution

Review at2026-10-24T17:14:55Z confirmed a defect in the authored invalid atom path: state.text alone lacks the text-node override's HTML/entity escaping. Factored that existing policy into escapedText and reused it for invalid atoms. Extended the test payload/assertions to cover both <img and ©. Valid atom behavior is unchanged. Excluded backticks from atom recognition and added a text/code precedence fixture for N1.

Requested focused-grant addition: a second mutant that swaps only the invalid-atom escapedText call for vendored state.text, dropping the <& escape for this path. The existing malformed-attrs browser test must kill it. The original serializer-removal mutant is still required. No runs, checks, installation or rebuild have occurred; all remain held for CLEAR.

Granted execution and candidate, sage-4286, 2026-10-24

Granted lane B until22:40Z. Ran on2ec3f5b5d's source in this worktree. Every child inherited TMPDIR=/mnt/storage/scratch/tmp/g49X, obtained by mktemp -d /mnt/storage/scratch/tmp/gXXX, never /tmp. Each command used nice -n "$((19 - $(nice)))" timeout -k 10 ... with pipefail and tee; raw logs record actual absolute nice19 and MOSAIC_REQUIRE_EDITOR_BUILD=1. Node test concurrency was1 for each focused whole file and2 for webui.

Measurement22:07:22Z: all10 baseline forms round-trip byte for byte. The JSON is copied unchanged to measurement.json. Adopted outcome A: no measured file falls to Source just because of its wikilink. The atom is proved by structure and same-block edits, not no-edit raw retention. Baseline structural case:0/1 expected red, no atom in old shipped bundle.

Pinned npm ci --ignore-scripts --no-audit --no-fund succeeded locally in packages/webui, then editor/build.mjs ran with esbuild0.28.2. The existing upstream sideEffects warning for mark.ts appeared; no vendored file changed. No package/lockfile change. Rebuild provenance ran and passed, not skipped.

Whole file Pass/fail Wall seconds
editor-wikilink.test.mjs 13/0 2.348
editor.test.mjs 5/0 2.053
editor-browser.test.mjs 16/0 14.984
editor-provenance.test.mjs 6/0 0.343

Two mutants, each independently restored and rebuilt: serializer removal failed the structural case0/1, restore1/0; invalid-path escapedText swapped for vendored state.text failed malformed attrs0/1, restore1/0. The model and generated outputs match their original good hashes after both. Post-mutant cwd/temp-root sweep0. Both failures are expected evidence.

Full webui: exactly69 files,455/0,0 skipped/cancelled,174.189s, ended 22:12:48.880975Z. The log contains the required-build env and nice19. Skip scan for ^# skip, TAP # SKIP and spec skipped-test lines found none, so skip names are []. A preliminary command mistakenly selected7 files; its28/0 in17.787s is archived as webui-whole.log and explicitly NOT used as full gate evidence. The corrected69-file run is webui-69.log.

Final cwd/TMPDIR/argv sweep22:13:17.560692Z:0 processes. No owned Node or Chromium remains. Removed the private TMPDIR only after that zero sweep. Clear was sent to Sage as herb-0102 at22:13:46Z; no further execution.

Bundle SHA256 bd167899a551c70dc07e500fcdd1853d7fb710b23c217ba5b42daf5785c38a72. CSS SHA2568654ac57d1e7a561110138ecd7f701c34a074017ff8c4cd2768d8083908ee61f, byte-identical to2ec3f5b5d. BUILD.json outputs match those hashes. Source commit a530a60798 adds generated outputs and an append-only phase log; packet changes follow separately. No code or assertion changed after these results. The webui gate requirement is met on this tree; Filbert review and every scripts/test-*.sh remain pending.

Sage re-pinned the brief to case2-rows.md blob85e6fe2e under sage-4286; its C2-11a section is unchanged. No case1-accept file was in any run.