Forge

Engineering Bot
pretex-editor — last 100 commits
4b7d335Guard TeX renders by active mode5 minutes ago
7cb5e90Stabilize projected block editing12 minutes ago
9fddf08Align semantic smoke with source-first contracts64 minutes ago
d313835Stabilize block-edge slash block insertion2 hours ago
fbbd20fHonor block-edge spacing for source block inserts2 hours ago
d9e3badRoute semantic toolbar inserts through source fallback2 hours ago
0817d69Route semantic label insertion through source editor2 hours ago
5f8fcd1Preserve semantic link metadata through inline expansion2 hours ago
1872fecAllow block palette commands from semantic selections3 hours ago
9c47fc6Sync semantic font variables on toggle3 hours ago
c880669Serve pdflatex ground truth references3 hours ago
2318141Keep inline suffixes adjacent for block insert commands3 hours ago
1a019b2Indent first body paragraphs by default3 hours ago
4ea3a02Publish smoke module entrypoints3 hours ago
ba6c0dfPreserve toolbar selections in semantic block edits3 hours ago
2c8ecd9Stabilize projected block text selection3 hours ago
a067841Restore DOM math targeting after KaTeX swap3 hours ago
1ca9aa8Align verification scripts with render modes3 hours ago
5f38fafRender semantic math DOM with KaTeX4 hours ago
793979aRemove projection fallback to monolithic renderer4 hours ago
2113880Project paragraph margin notes4 hours ago
4eb07c2Project footnotes in pipeline4 hours ago
934f2e4Render multicols blocks in pipeline4 hours ago
3241119Render standalone tabular blocks4 hours ago
ea752d1Render minipage lanes in pipeline4 hours ago
33582beProject table environment blocks in pipeline4 hours ago
e29e93dProject figure blocks in pipeline4 hours ago
86df88dProject dropcap blocks in pipeline5 hours ago
1b049c9Avoid synthetic hyphenation in description rows5 hours ago
d0e2402Project display math with semantic surfaces5 hours ago
e75bf76Fix inline math paragraph projection5 hours ago
4d452f4Fuse run-in headings in pipeline5 hours ago
bba4df3Project wrapped description items in pipeline5 hours ago
11c4a1bBound projected paragraph justification6 hours ago
93b1cd6Project expanded float caption and label commands6 hours ago
509bb9eProject graphicx markers through parser6 hours ago
a4f9187Project expanded plain structural commands in parser6 hours ago
86c360dProject expanded title commands in parser6 hours ago
7e5e29aProject expanded heading commands in parser6 hours ago
4b1f210Cache steady-state layout requests7 hours ago
c697c27Serve TeX worker bundle7 hours ago
5cee5abFix dev server asset routes7 hours ago
026fa4aProject bibliography commands as standalone blocks7 hours ago
e8d50f6Accept file-aware requests in layout pipeline7 hours ago
51f0c35Resolve external bibliography citations7 hours ago
b215ae3Populate generated caption lists in pipeline7 hours ago
9fcfd85Populate table of contents in pipeline7 hours ago
22344e8Render bibliography entries in pipeline7 hours ago
ce034b1Apply enumitem itemsep configs8 hours ago
762ba0aApply enumitem leftmargin and labelsep configs8 hours ago
bbc581bApply enumitem label configs to itemize markers8 hours ago
f44354aApply enumitem label configs to enumerate markers8 hours ago
867d18aRegister enumitem custom list environments8 hours ago
efc85e4Project inline body include commands8 hours ago
090a9d1Thread main document root through parser expansion8 hours ago
1be76bfExpand multiline custom inline environments8 hours ago
60d097eExpand list wrapper environments in live parser8 hours ago
27b1d2fExpand wrapper environments in live parser8 hours ago
8be3dcfProject standalone body include files9 hours ago
c144766Splice standalone body input files9 hours ago
9c0dd40Accept layout request file ids9 hours ago
c4efd01Resolve run-in heading pageref labels9 hours ago
4a14cbcResolve theorem pageref labels9 hours ago
fa24408Resolve pageref labels on second pass9 hours ago
9e2c553Preserve source file ids through layout output9 hours ago
df0b40dResolve theorem label references9 hours ago
62bfa08Implement theorem and proof blocks9 hours ago
48990a3Cache paragraph line breaking and steady-state smoke10 hours ago
bd5b0fb[spec] Clarify steady-state layout timing10 hours ago
0c03804Keep display math slots in fallback mode10 hours ago
99f5afbProve align math environments in layout tests10 hours ago
f253105Preserve nested footnotes in layout10 hours ago
bf799e8Support command-delimited inline math10 hours ago
ade3f36Gate makeatletter to preamble tokenization10 hours ago
20e749dBridge autoref and nameref to compatibility labels10 hours ago
ff08bb0Bridge expanded refs to compatibility aux data11 hours ago
2f164d5Emit bibliography markers with file resolution11 hours ago
b326726Collect and resolve citations11 hours ago
771f441[spec] Clarify citation resolution contract11 hours ago
047f000Track generated block scheduling11 hours ago
c13cd50Collect and resolve label references11 hours ago
e8e6de3Add aux data foundation11 hours ago
7e66514Implement input and include expansion11 hours ago
e294929Warn on macro redefinition mismatches11 hours ago
f67136eImplement newenvironment expansion11 hours ago
fcf9706Implement let alias expansion11 hours ago
69f0c1b[spec] Align expandafter preflight with full expansion11 hours ago
3ae588c[spec] Align csname preflight with relax semantics11 hours ago
893b697Implement def parameter text expansion11 hours ago
472e752Implement newcommand argument expansion11 hours ago
4afb4cbParse expanded inline formatting commands12 hours ago
af15251Expand preamble macros in verse blocks12 hours ago
337a8e8Expand preamble macros in table cells12 hours ago
c9cb9cdExpand preamble macros in captions12 hours ago
2b3231cExpand preamble macros in list items12 hours ago
c8ea86fExpand preamble macros in text blocks12 hours ago
40a5340Verify expander fallback diagnostics12 hours ago
fb53a1cImplement edef xdef and futurelet12 hours ago
ae5da81[spec] Fix futurelet preflight vector13 hours ago
0be6dcfImplement initial expansion control primitives13 hours ago
pretex — last 100 commits
6982863test: add faithful tests index4 days ago
5cada0atest: pin toc reference pdf oracle4 days ago
f685cc0test: support faithful reference pdf fixtures4 days ago
d375f14test: add faithful gather fixture4 days ago
5f5fac3test: add faithful arrow fixture4 days ago
9456140test: add faithful custom-tag fixture4 days ago
51f984atest: add faithful subequations fixture4 days ago
af0744etest: add faithful spacing fixture4 days ago
0fa671atest: add faithful big-operator fixture4 days ago
917fb99test: add faithful amsmath accent fixture4 days ago
fa251c6test: add faithful amsmath operator fixture4 days ago
7033c63test: add faithful amsmath matrix fixture4 days ago
c40b515test: add faithful amsmath reference fixture4 days ago
c3a0282docs: refresh package docs4 days ago
29257fbchore: bump tex-wasm runtime assets4 days ago
a1d7a55fix: prefer document fontface realms4 days ago
9f99f85fix: support explicit math font documents4 days ago
273dad9fix: support explicit math canvas documents4 days ago
d2bdd8dfix: support explicit math dom documents4 days ago
176f8a9fix: thread explicit dvi render documents4 days ago
d6912abfix: scope dvi browser measurement per document4 days ago
539a0d9fix: drop dvi getElementById requirement4 days ago
4291309fix: use container document for root render errors4 days ago
228efa1fix: scope math font loading per document4 days ago
140bf89fix: scope computer modern font injection per document4 days ago
6c779a4fix: clone arxiv required text markers4 days ago
508fa46fix: default invalid tex asset types to octet-stream4 days ago
46ae21dfix: normalize bundled tex font helper inputs4 days ago
7fde953fix: isolate faithful viewer support paths4 days ago
7e59d3bfix: fail clearly when package root is missing4 days ago
712e9a3fix: reject backslash asset helper paths4 days ago
d9696a7fix: stabilize faithful viewer bundle output paths4 days ago
6ce1cccfix: normalize bundled asset helper inputs4 days ago
8aa0969fix: preserve relative font base urls4 days ago
933ca35fix: tolerate unusable dvi measure canvases4 days ago
4f4703dfix: freeze math font base url after load4 days ago
1646574fix: harden math font loader retries4 days ago
1d61028fix: harden computer modern font injection4 days ago
9aec784fix: preserve root render failures on bad containers4 days ago
1ba35f2fix: fail fast on invalid root render containers4 days ago
014a80ffix: preserve root render errors without dom4 days ago
506adc5fix: guard dvi renderer document contract4 days ago
2600a97fix: recover from throwing dom canvas creation4 days ago
40b05e1fix: ignore escaped math delimiters in text4 days ago
66df4bbfix: harden singleton engine init4 days ago
83d4480fix: treat unmatched display math delimiters as text4 days ago
d39bde5fix: guard math dom renderer document contract4 days ago
a87f29bfix: require usable math render canvas4 days ago
aae6540fix: default math canvas rendering to text style4 days ago
7798a27fix: surface root render failures in container4 days ago
a192756fix: isolate root renders from aux state4 days ago
6d69278fix: share faithful viewer engine state4 days ago
6783788fix: detect generated-list forward references4 days ago
b657808fix: share faithful engine init state4 days ago
0d693fefix: align root render helper with engine state4 days ago
b32cbdfrefactor: drop dead dvi renderer hooks4 days ago
999d09ffix: guard root render init contract4 days ago
21cda8drefactor: remove dead math canvas helper4 days ago
574241bfix: replace stale root render output4 days ago
ed8b249fix: honor math canvas fallback fonts4 days ago
bf4a66dfix: add browser stubs for node subpaths4 days ago
b429c1bfix: support offscreen math canvases4 days ago
163f5c0fix: make faithful viewer helper node-safe4 days ago
e5db745docs: refresh faithful fixture count4 days ago
9f95467fix: export canonical math family names4 days ago
5e0060arefactor: deprecate cm math aliases4 days ago
4647cfedocs: document package entrypoints4 days ago
30cf69ddocs: refresh tex encoding packaging notes4 days ago
fd15362fix: internalize tex encoding package contract4 days ago
f545569chore: trim package test harness4 days ago
117d328chore: prune generated package artifacts4 days ago
c8ff00dfix: publish node-safe package exports4 days ago
db72d36refactor: use tex asset helpers in tests4 days ago
f502c08refactor: publish tex asset support4 days ago
d6af1edrefactor: publish faithful viewer dev support4 days ago
e91093crefactor: publish math webfont support4 days ago
131b7c0refactor: use neutral math family names internally4 days ago
0db0f88refactor: neutralize math font family ids4 days ago
f247a5arefactor: publish faithful viewer support4 days ago
8dd813erefactor: publish pretex root exports4 days ago
c61e518refactor: export pretex math font contract4 days ago
3542b2dfix: honor token width models in paragraph layout4 days ago
3375fb9refactor: share paragraph font projection helper4 days ago
bd501c8refactor: share paragraph token midpoint helper4 days ago
1d76c20refactor: support styled public paragraph layout4 days ago
cd69641refactor: share justified line quality scoring4 days ago
4e7737arefactor: share measured paragraph layout4 days ago
d2e5cbarefactor: export paragraph tokenization helpers4 days ago
6893918fix: make paragraph helper whitespace-aware4 days ago
77a00c2fix: isolate layout probes from persisted document state5 days ago
d1a2cf2test: add typewriter filename faithful fixture5 days ago
792c361fix: skip prose tracking for typewriter fonts5 days ago
ebf7e38test: harden arxiv raster and bounds checks5 days ago
a28814ftest: expose arxiv raster-size mismatches5 days ago
558dee8test: align arxiv smoke raster with references5 days ago
4a2b76ftest: add arxiv published-pdf geometry diagnostics5 days ago
38b4370test: ignore arxiv archive watermark in diffs5 days ago
6dbe78edocs: document shared font and paragraph helpers5 days ago
729f276fix: align inline math DOM baseline5 days ago
6c1c5d6build: harden cm font patch pipeline5 days ago
INBOX.md

User Inbox

This file is the persistent inbox for mid-stream user requests, bug reports,

and architectural constraints.

Process:

  • Add new user guidance here as it arrives.
  • Do not switch lanes immediately unless the new item is a blocker or clearly

supersedes the current highest-leverage work.

  • Re-read this file before starting a new implementation slice and after

finishing one.

  • Prune completed or clearly superseded items during those re-reads so this

file stays current instead of turning into a stale backlog dump.

  • Keep the checked-in docs surface honest too: README.md, the living

document in src/ui/templates.ts, and the support matrices should reflect

the actual shipped product rather than stale plans.

  • If a work slice changes the live product contract, queue, or support status,

update the current-truth docs in the same slice instead of deferring docs

cleanup to “later”.

  • Track active agents in NEXT.md whenever more than one agent is working in

the repo. Record owner, task, write scope, and status, then prune stale

entries aggressively.

  • Do not treat every user mention as an automatic lane switch. Triage each new

item deliberately:

- work it now if it blocks or directly corrects active work

- delegate it if it can move safely in parallel

- record it here for later if it matters but should not interrupt the current

critical path

  • If a requested approach looks brittle, contradictory, or likely to harm the

product, push back clearly and discuss the tradeoff instead of acting like a

yes-man.

Active Guidance

  • The renderer contract is non-negotiable: the DOM must be a projection of

authoritative editor/render data, not the place where final layout decisions

get invented. Resolve word positions, block geometry, and element placement in

the data/model pipeline before DOM projection whenever the product surface is

meant to be authoritative.

  • Do not rely on brittle DOM-driven post-calculation to decide final document

positions. Avoid "render something, measure it, then patch it into place"

systems for core document surfaces unless there is an explicit, temporary, and

clearly tracked migration exception.

  • There should be zero meaningful distinction between "active" and "passive"

block rendering paths for projected semantic content. Editing must reuse the

same renderer-owned geometry contract instead of swapping to a second layout

engine, overlay, or blur-time handoff path.

  • In-document controls such as slash insertion and block affordances should be

native page components anchored from renderer/editor-owned coordinates, not

floating viewport overlays that visually drift from the document.

  • Hit testing, insertion anchors, and block targeting should come from the

authoritative block/source model and predeclared geometry, not from ad hoc DOM

guesses, hover hacks, or reverse-engineered page shape.

  • Prefixed block geometry must be declared by the renderer. Do not reintroduce

post-render DOM measurement loops to "correct" heading/caption/bibliography

prefix widths after paint.

  • Slash commands and block insertion are now the top product issue. Treat any

brittle, bolted-on, modal-feeling behavior there as a real architecture bug,

not as acceptable interim UX.

  • Do not preserve or re-polish the active/passive block split. Move toward one

renderer-owned block surface that stays honest before, during, and after

interaction instead of swapping DOM modes on focus changes.

  • Routine lightweight verification is not the current lane. Spend the effort on

the live UX and let the user judge the product behavior directly unless they

explicitly ask for verification work.

  • Prefer a single authoritative semantic render path for passive and active

text. Do not keep growing separate edit-only parsing/layout behavior when the

shared path can be improved instead.

  • Keep any lighter/fallback edit mode vestigial and clearly treated as unused;

new behavior should land in the shared authoritative path, not in a side

lane.

  • Semantic editing should preserve the same wrapper styling and KP reflow

contract as passive rendering. If editing and non-editing diverge, treat that

as a shared renderer/fragment bug rather than papering it over in the editor.

  • Semantic typography styles should come from semantic classes defined in a

single CSS file, not from inline font / color / line-height mutation on

nodes.

  • Inline style="" on semantic document nodes should be limited to geometry,

positioning, or genuine inline overrides.

  • Semantic edit caret became too small / hard to see after the style changes;

keep inherited edit-surface typography through CSS classes so caret metrics

stay correct.

  • Active semantic edit hit targets must line up with the rendered text itself;

projected edit surfaces need the same role class / typography metrics as the

passive renderer.

  • Compatibility reporting should stay renderer/editor declared. Do not drift

back toward reverse-engineering DOM shape when explicit ownership metadata is

available.

  • The underlying Computer Modern DOM fonts appear to have a baseline/vertical

offset mismatch versus expected metrics. Treat caret size, click-hit drift,

and line-alignment issues as possibly downstream symptoms of that font issue,

not just edit-surface bugs.

  • The rebuilt CM font bundle is still missing some text ligatures such as ff

and ffi. There is a related article in the colony knowledge base; check it

when returning to the font cleanup lane.

  • There is a colony knowledge-base note about BaKoMa font encoding. Check

whether it still matters after the canonical CTAN-backed font rebuild before

making further assumptions about CM font encoding behavior.

  • After the semantic font/style system is properly carved out, run a full sweep

of the CSS against LaTeX/article defaults with one or two peer agents, fix

obvious issues, and report what they found, fixed, and recommend next.

  • Do not keep switching lanes every time the user mentions an issue. Record it

here and fold it into the work deliberately.

  • The remaining document-chrome audit should move beyond the corrected

TOC/chapter defaults. Keep checking page chrome and class-owned defaults

against LaTeX rather than freezing the current browser-ish approximations.

  • Display-math blocks currently look poor in semantic mode. Treat block math

rendering quality, sizing, spacing, and surrounding chrome as an active

product issue rather than acceptable placeholder output.

  • Faithful-mode math layout is also reported broken. Keep it separate from the

semantic DOM pass, but treat it as an active renderer regression rather than

a cosmetic complaint.

  • Do not emit or depend on Private Use Area glyphs in renderer output. Keep

faithful glyph access on raw font slots or real Unicode only.

  • [2026-04-06 13:48] Core user-facing semantic UX and UI issues take priority over more smoke tests, harness work, or similar side systems. Treat slash commands, insertion UI, and direct editing feel as the main product lane.
  • [2026-04-06 13:48] Slash commands must only surface commands that are valid for the current location/context, and selecting a command must insert the exact intended structure instead of the wrong wrapper or element.
  • [2026-04-06 13:48] If blurring or unfocusing a semantic block causes it to visibly reflow again, treat that as a real architecture bug and likely evidence of separate active/passive render paths. Fix the shared renderer-owned path instead of hiding the symptom.
  • [2026-04-06 13:48] The block insertion affordance now belongs in the Notion-style left gutter anchor zone. Remaining work in that lane is hardening it across more block families and keeping the slash launcher/context filtering honest from that anchored entry point.
  • [2026-04-06 15:58] Source/render scroll sync is now source-offset anchored in the unwrapped editor. Treat future regressions there as mapping/geometry bugs, not as a place to reintroduce scroll-ratio guesses.
  • [2026-04-06 15:58] Block-edge insertion now includes declared prefix/label geometry for prefixed blocks. Keep extending that renderer-owned geometry contract instead of falling back to DOM hover hacks for labels and prefixes.
  • [2026-04-06 16:18] Do not run two separate JS hover controllers over the same semantic block surface. Block insertion hover must stay block-owned from the event target and renderer-declared geometry; stale overlay chrome should be removed or rebuilt on that same ownership seam instead of competing with it.
  • [2026-04-06 16:27] Slash launcher and inline block UI should resolve the active semantic surface from the live edit session, not from global document.querySelector(...) guesses over the rendered DOM.
  • [2026-04-06 16:36] Preview scroll ownership should stay singular. Do not stack a second editor-scroll listener in main.ts on top of the core editor scroll sync path; compare-mode sync should plug into the same editor-owned seam instead.
  • [2026-04-06 16:44] Click ownership should go through one typed semantic interaction target path. Do not make block edit, widget edit, math edit, and render-only source jumps each rediscover their target with separate selector trees.
  • [2026-04-06 16:52] Prefixed editable labels such as caption labels, heading labels, and bibliography keys should publish renderer-declared edit-anchor geometry too. Do not leave them on widget-editor DOM-rect fallback positioning.
  • [2026-04-06 16:58] Page-projected widget and math editors should not silently fall back to raw DOM-rect positioning when declared anchor geometry is missing. Treat missing page-frame anchor geometry as a renderer contract bug, not as permission to guess.
  • [2026-04-06 17:04] Source-sync cursor follow should prefer authoritative editor blocks before scanning fine-grained [data-src-offset] fragments. Keep preview mapping rooted in block ownership, with fragment/line scans as fallback rather than first choice.
  • [2026-04-06 17:12] Slash launcher anchor placement should resolve from caret-adjacent text or line geometry before any surface-level fallback. Do not anchor the menu to the whole active block just because collapsed selection geometry is thin or missing.
  • [2026-04-06 17:16] Semantic slash execution must restore the live edit session and caret selection before dispatching the chosen command. Do not let dropdown interaction run commands against a dead or guessed selection state.
  • [2026-04-06 18:44] Slash launcher pointer interaction should not blur or commit the active semantic block session. Treat the launcher as session-owned command chrome, not as a separate focus system that kicks editing back to body mid-click.
  • [2026-04-06 17:21] Manual scrolling in the main semantic preview must not mirror back into editor scroll state outside explicit compare mode. Preview->editor scroll feedback in normal mode is a product bug, not a convenience feature.
  • [2026-04-06 18:53] A live semantic edit session means the page side owns scroll. Do not let hidden editorEl scroll bookkeeping drag pagesWorkspace around while block/widget/math editing is active.
  • [2026-04-06 17:29] Block-insert hover should resolve from the hovered block owner’s declared geometry, not from per-pointer page scans. Treat native-feeling hover as a geometry ownership problem, not as something to brute-force with pointermove and repeated DOM queries.
  • [2026-04-06 17:36] Inline toolbar ownership must stay on the live semantic edit session too. Do not let toolbar targeting or action dispatch fall back to global DOM guesses or a dead selection state.
  • [2026-04-06 17:39] Secondary formatting chrome such as the format bar should follow the same session-owned rule. If it targets semantic editing, it should resolve context and dispatch through the live edit session before falling back to raw source behavior.
  • [2026-04-06 17:46] Toolbar buttons should not maintain their own handcrafted insertion engine. Route toolbar formatting and structural insert actions through the same shared command execution path as slash and other command surfaces.
  • [2026-04-06 18:01] Page-frame-hosted widget and math editors already live in document coordinates. Do not keep repositioning them on every captured scroll event as if they were viewport overlays; reserve scroll-driven repositioning for the fallback workspace-hosted case only.
  • [2026-04-06 18:06] Widget and math editor anchor reacquisition after rerender should stay host-local. Do not search the whole workspace when the editor already knows which page frame or host surface owns it.
  • [2026-04-06 18:12] The format bar should declare shared command ids, not duplicate insertion templates, for commands already owned by the central insert-command system. Keep local wrap definitions only for genuinely local exceptions.
  • [2026-04-06 18:20] Slash validity filtering should consider ancestor container scope, not only the immediate parent block. Nested contexts under container constraints such as minipage should stay honest even when the direct parent is an inner quote, list item, or similar child block.
  • [2026-04-06 18:27] The command palette should not act like a global god-mode insert list. Its text insert commands should be filtered from the same live context rules as the rest of the editor so invalid structural commands do not leak in through a separate surface.
  • [2026-04-06 18:31] The inline semantic toolbar should not carry its own insertion templates either. If an action already exists in the shared insert-command system, the inline toolbar should dispatch by shared command id instead of maintaining a parallel wrap definition.
  • [2026-04-06 19:07] Text insert execution should require an explicit live target and validity context. Do not let command surfaces silently fall through from semantic intent into raw source mutation just because the first lane failed.
  • [2026-04-06 19:07] Command surfaces that open asynchronously, especially the command palette, should capture their insert target at open time and execute against that captured lane. If the live target is widget/math/non-rich semantic, surface no text insert commands instead of guessing source.
  • [2026-04-06 19:16] The inline semantic toolbar should be hosted under the owning page/frame, not document.body, and should ride document geometry instead of a global viewport overlay plus scroll listener chase loop.
  • [2026-04-06 19:24] Widget and math editors should require a page-frame host plus declared renderer geometry. Missing page geometry is a renderer contract failure; do not reopen DOM-rect fallback positioning as a backup system.
  • [2026-04-06 19:31] Source keyboard shortcuts such as Ctrl+B and Ctrl+I should route through the same shared text-insert execution path as slash, toolbar, and palette. Do not keep manual wrap shortcuts as a parallel insert system.
  • [2026-04-06 19:40] Command chrome should reflect live insert truth, not just execution truth. Toolbar and format-bar buttons should disable when the active lane cannot honestly run them instead of surfacing clickable dead ends.
  • [2026-04-06 20:02] The block-edge + affordance should own its own session handoff on pointerdown. Do not rely on generic outside-click handlers to commit semantic sessions before insertion UI opens; that turns the affordance into a dead or flaky click path.
  • [2026-04-06 20:16] Renderer passes must not blindly restore a stale preview scrollTop after layout. If the user or another live owner moved the workspace while render work was in flight, preserve the newer scroll owner instead of snapping the preview back.
  • [2026-04-06 20:24] Block-edge hover must not rebuild visible block fragments and sibling anchors on hover. Keep hover lookup O(1) from document/render-invalidated geometry caches instead of scan-and-sort work in the pointer path.
  • [2026-04-06 20:31] The block editor’s pointer capture must respect the shared semantic interaction target model before treating a pointerdown as an outside click. Widget, math, and render-only targets should keep ownership of their own activation/jump paths instead of being preempted by block blur.
  • [2026-04-06 20:39] Source-sync lookup should not rediscover preview candidates with fresh querySelectorAll scans on every cursor move. Build visible offset/line/block lookup snapshots from the same document/render invalidation seam and keep the hot cursor-follow path data-driven.
  • [2026-04-06 20:48] Shared command chrome must actually be session-owned end to end. The format bar, top toolbar, slash launcher, palette, and block-edge affordance should not trigger generic block blur on pointerdown before their own command handlers run.
  • [2026-04-06 20:56] The block-edge affordance should own the whole hit corridor between the + and the block edge so pointer travel stays inside one component. Do not use hover hide timers to fake that corridor; make the corridor real and clickable.
  • [2026-04-06 23:02] Hidden block-edge affordance chrome must not remain in the hit-testing path. If the + is visually hidden, its corridor should also be pointer-events: none so invisible gutter UI cannot steal hover or clicks from the document.
  • [2026-04-06 23:08] Block-edge geometry should warm on the render invalidation seam, not on first hover. Keep visibility checks and geometry snapshot rebuilding out of the hover hot path so block targeting stays immediate.
  • [2026-04-06 23:27] Source-owned special surfaces must remove duplicate child edit lanes, not just hide them. Figure shells, table children, and footnote fallbacks should each have one clear source owner instead of a shell plus separately editable child widgets/lines.
  • [2026-04-06 23:43] Source-owned semantic blocks should be hit-testable at the block root, not only through child line fragments. Once a block declares editorBlockEditKind="source", its root surface should own clicks across the block frame instead of leaving dead zones that depend on text child hits.
  • [2026-04-06 23:57] Source-owned block ownership must outrank descendant widget, math, and render-only markers in the central semantic interaction router. Once a block declares editorBlockEditKind="source", treat all descendant projection detail as display-only for click targeting instead of letting child metadata reopen competing edit/jump lanes.
  • [2026-04-06 21:17] Single-page semantic blocks with a coherent source range and frame must still publish one block-owned source shell even when rich projection fidelity checks fail. Do not bail out before setting block geometry/source ownership and leave visible text in a dead mixed state.
  • [2026-04-06 21:28] Source-owned compound blocks such as tables should not instantiate nested pseudo-editor blocks and then scrub them after render. Use a real display-only projection path for child content under a source-owned container instead of “create editable block, then neuter it.”
  • [2026-04-06 21:52] Source-owned tables must keep every child cell lane display-only, including styled-line fallback rendering and plain text cells. Do not rely on pointer-events: none to hide interactive child semantics that should not exist in the first place.
  • [2026-04-06 21:36] Source-sync and explicit source jumps should treat source-owned blocks as the authoritative owner, not descend into child data-src-* fragments inside those blocks. Once a block owns source editing, its children are display detail, not competing navigation targets.
  • [2026-04-06 21:44] Source-owned fallback blocks should render child lines as display-only. Do not leave inline math, links, source markers, or render-only affordances interactive underneath a container that already owns source editing.
  • [2026-04-06] Widget and math edit anchors should also stay renderer-declared. Do not drift back toward getBoundingClientRect()-driven overlay positioning plus post-render chase loops for inline links, images, figures, or math targets.
  • [2026-04-06] After the current insertion/hover blockers are fixed, run a full smell-test audit across the editor surface. Look for bolted-on behavior, contradictory pathways, laggy hover/click systems, duplicated render ownership, and any other component or interaction that does not pass a production-path sanity check.