docs: design row 214 measurement and inert editor wikilinks
This commit is contained in:
1 parent
78b69e1e68
commit
ec213e0336
3 files changed
+162
No files matched your search
@@ -0,0 +1,52 @@
|
|||||||
|
# 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; eight 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.
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
# C2-11a: an inert editor wikilink node
|
||||||
|
|
||||||
|
Base: aca16404c. Owner: Herb. Reviewer: Filbert. Issue: #1715.
|
||||||
|
Authority: sage-2794, Q220/mos-1301. The assignment permits authoring the
|
||||||
|
node and tests before the measurement slot. Runs, claim and pushes wait
|
||||||
|
for Sage's CLEAR. After row253 lands, a new branch will carry the change
|
||||||
|
onto its landing with every landed hunk retained.
|
||||||
|
|
||||||
|
## Measurement before choosing the explanation
|
||||||
|
|
||||||
|
Run agents/herb/work/queue-214/measure.mjs only on a granted slot. It loads
|
||||||
|
aca16404c's editor.js and markdown-preview.js directly from local Git
|
||||||
|
objects. It verifies the editor bundle hash against that base's BUILD.json.
|
||||||
|
It cannot accidentally measure a candidate rebuild. Its JSON records the
|
||||||
|
full baseline SHA, bundle hash, timestamp, input, output and equality for
|
||||||
|
each fixture. The first five are the brief's plain, labelled, heading,
|
||||||
|
list and front-matter cases; extra cases cover a heading block, combined
|
||||||
|
heading/label, Unicode/spacing, adjacency and an inert embed. No result is
|
||||||
|
available yet. Static reasoning is not a measurement.
|
||||||
|
|
||||||
|
Outcome A, every baseline round-trip is equal: record that wikilinks do
|
||||||
|
not trigger Source fallback for the measured inputs. Do not claim that
|
||||||
|
bug exists. The source's raw/sig cache explains why an unchanged block can
|
||||||
|
keep its bytes even when its canonical serializer escapes brackets. Add
|
||||||
|
the node for structured wikilinks and dirty-block preservation, as the
|
||||||
|
brief requests. A baseline structural/edit regression must fail even if
|
||||||
|
all unchanged-file checks pass.
|
||||||
|
|
||||||
|
Outcome B, one or more differ: record the exact differing bytes and affected
|
||||||
|
contexts. Keep the existing Source fallback fail-closed. The node restores
|
||||||
|
the required spellings where the block is structured. Retain the same
|
||||||
|
no-edit and dirty-block regressions. If the mismatch comes from a separate
|
||||||
|
block, line-ending or front-matter defect, report it before widening scope.
|
||||||
|
|
||||||
|
## Representation and conversion
|
||||||
|
|
||||||
|
The schema gains one inline atom, wikilink, with a single source attribute.
|
||||||
|
Its source is the complete spelling, not reconstructed target/label parts.
|
||||||
|
It has no href, navigation, fetch or click behavior. A span with data-source
|
||||||
|
and a text child displays the spelling. Heading content includes the new
|
||||||
|
atom; paragraphs, quotes and lists already accept inline content.
|
||||||
|
|
||||||
|
One markdown-it inline rule runs before ordinary links, after escapes and
|
||||||
|
backticks. A sticky match reads a complete single-line [[...]] or ![[...]]
|
||||||
|
without copying every suffix or crossing state.posMax. The node writer
|
||||||
|
writes its validated spelling without bracket escaping, so editing adjacent
|
||||||
|
text cannot rewrite a wikilink. Front matter remains a raw block. No new
|
||||||
|
file-read, save, routing, documentPath or target-resolution behavior is added.
|
||||||
|
|
||||||
|
The accepted atom grammar excludes brackets within the body, line breaks,
|
||||||
|
angle brackets and ampersands. This is an editor representation boundary,
|
||||||
|
not a library resolver or a refusal to open such a file. Malformed,
|
||||||
|
HTML/entity-like and code syntax stays under the existing text/raw rules.
|
||||||
|
This preserves the existing escaping of HTML/entities when a block changes.
|
||||||
|
DOM paste accepts only that same grammar. Invalid attributes constructed
|
||||||
|
programmatically are flattened to one line and escaped by the text writer.
|
||||||
|
No input string is parsed as HTML and embeds never load an image.
|
||||||
|
|
||||||
|
## Acceptance and review
|
||||||
|
|
||||||
|
The measurement JSON goes in BUILD.md and the final manifest packet.
|
||||||
|
Eight fixture round-trips run with and without a final newline. A browser
|
||||||
|
test inspects real ProseMirror atom types and attributes, edits the same
|
||||||
|
block and reparses it, for each fixture. Two more browser tests cover
|
||||||
|
code/escape/malformed/hostile syntax and DOM/programmatic-attribute safety.
|
||||||
|
Tests use the existing fixture and Chromium harness and the shipped bundle.
|
||||||
|
They do not export new production APIs just for testing.
|
||||||
|
|
||||||
|
Before rebuilding, run only the structural regression against the baseline
|
||||||
|
bundle and observe it fail. Rebuild the candidate with the exact pinned
|
||||||
|
esbuild0.28.2 binary, run the whole new test file, existing editor tests,
|
||||||
|
editor browser tests and provenance test. Remove only the wikilink serializer
|
||||||
|
handler for one mutant; the dirty-block assertion must fail. Restore, rebuild
|
||||||
|
and rerun the focused regression. All execution needs Sage's CLEAR, including
|
||||||
|
installation, checks, builds, browser tests and the measurement.
|
||||||
|
|
||||||
|
The checked-in bundle and editor/BUILD.json must be regenerated by the
|
||||||
|
existing build script. No hand edits of generated JavaScript or provenance.
|
||||||
|
The current shared esbuild is0.28.1 and the local webui install is absent.
|
||||||
|
A granted npm ci --ignore-scripts --no-audit --no-fund in packages/webui is
|
||||||
|
needed before building; the root node_modules remains its plain symlink.
|
||||||
|
No dependency or lockfile change is planned.
|
||||||
|
|
||||||
|
Final gate: Filbert approves the manifest, then the whole webui suite and
|
||||||
|
every scripts/test-*.sh on Sage's slot. Two failures stop a gate. A failure
|
||||||
|
outside this row is reported to Sage before any rerun. Source, generated
|
||||||
|
output, mode/hash manifest and raw granted logs identify the candidate.
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
# Row214 implementation manifest, draft before measurement
|
||||||
|
|
||||||
|
Pinned base: aca16404c. Brief: docs/plans/2026-10-20_case2-rows.md,
|
||||||
|
C2-11a. Also read at gosalyn/case2-06-idea-caps51cc0445c; that section is
|
||||||
|
unchanged. Q222's reply-limit settings belong to C2-06, not this row.
|
||||||
|
|
||||||
|
| Path | Change |
|
||||||
|
| --- | --- |
|
||||||
|
| packages/webui/editor/model.mjs | inert inline atom, heading content, tokenizer rule and serializer |
|
||||||
|
| packages/webui/tests/editor-wikilink.test.mjs | eight round-trips and three browser regressions |
|
||||||
|
| packages/webui/tests/helpers/wikilink-cases.mjs | exact fixtures shared with measurement |
|
||||||
|
| packages/webui/src/public/editor.js | generated by the pinned editor build, pending CLEAR |
|
||||||
|
| packages/webui/editor/BUILD.json | generated provenance, pending CLEAR |
|
||||||
|
| agents/herb/work/queue-214/measure.mjs | baseline Git-object measurement, authored and unrun |
|
||||||
|
| agents/herb/work/queue-214/DESIGN.md | both measurement outcomes, implementation and acceptance |
|
||||||
|
| agents/herb/work/queue-214/BUILD.md | rulings and receipts, pending runs |
|
||||||
|
| agents/herb/work/queue-214/MANIFEST.md | this reviewed path list |
|
||||||
|
|
||||||
|
editor.css is an unchanged build output; no source CSS is touched. No
|
||||||
|
entry/view, library, route, save, click, documentPath or dependency changes.
|
||||||
|
Generated changes do not exist yet. This is a design/path manifest, not a
|
||||||
|
frozen tested candidate. Candidate hashes and measurement results follow
|
||||||
|
only after the granted runs. Filbert reviews the plan before the build.
|
||||||
Reference in new issue
Block a user