Forge

Engineering Bot
pretex-editor — last 100 commits
c4efd01Resolve run-in heading pageref labels3 minutes ago
4a14cbcResolve theorem pageref labels5 minutes ago
fa24408Resolve pageref labels on second pass6 minutes ago
9e2c553Preserve source file ids through layout output13 minutes ago
df0b40dResolve theorem label references26 minutes ago
62bfa08Implement theorem and proof blocks31 minutes ago
48990a3Cache paragraph line breaking and steady-state smoke48 minutes ago
bd5b0fb[spec] Clarify steady-state layout timing50 minutes ago
0c03804Keep display math slots in fallback mode67 minutes ago
99f5afbProve align math environments in layout tests71 minutes ago
f253105Preserve nested footnotes in layout72 minutes ago
bf799e8Support command-delimited inline math82 minutes ago
ade3f36Gate makeatletter to preamble tokenization85 minutes ago
20e749dBridge autoref and nameref to compatibility labels89 minutes ago
ff08bb0Bridge expanded refs to compatibility aux data2 hours ago
2f164d5Emit bibliography markers with file resolution2 hours ago
b326726Collect and resolve citations2 hours ago
771f441[spec] Clarify citation resolution contract2 hours ago
047f000Track generated block scheduling2 hours ago
c13cd50Collect and resolve label references2 hours ago
e8e6de3Add aux data foundation2 hours ago
7e66514Implement input and include expansion2 hours ago
e294929Warn on macro redefinition mismatches2 hours ago
f67136eImplement newenvironment expansion2 hours ago
fcf9706Implement let alias expansion2 hours ago
69f0c1b[spec] Align expandafter preflight with full expansion2 hours ago
3ae588c[spec] Align csname preflight with relax semantics2 hours ago
893b697Implement def parameter text expansion3 hours ago
472e752Implement newcommand argument expansion3 hours ago
4afb4cbParse expanded inline formatting commands3 hours ago
af15251Expand preamble macros in verse blocks3 hours ago
337a8e8Expand preamble macros in table cells3 hours ago
c9cb9cdExpand preamble macros in captions3 hours ago
2b3231cExpand preamble macros in list items3 hours ago
c8ea86fExpand preamble macros in text blocks3 hours ago
40a5340Verify expander fallback diagnostics4 hours ago
fb53a1cImplement edef xdef and futurelet4 hours ago
ae5da81[spec] Fix futurelet preflight vector4 hours ago
0be6dcfImplement initial expansion control primitives4 hours ago
d598c11[spec] Correct expandafter csname vector4 hours ago
5f5ef6cAdd tokenizer compatibility seam4 hours ago
b7095d1Specify resolved reference formatting4 hours ago
9d7520fDefine tokenizer KaTeX math boundary4 hours ago
625f04bSpecify nested footnote extraction4 hours ago
6444e45Require a KaTeX virtual-metrics spike4 hours ago
b62f32fConstrain simplified group scoping4 hours ago
e186ba0Constrain error recovery resynchronization4 hours ago
1107f45Tighten incremental tokenization invalidation rules4 hours ago
94a7b7cSpecify multi-file source mapping constraints4 hours ago
c69c3d5Specify KaTeX virtual-tree math measurement4 hours ago
488931cSpecify theorem environments and numbering5 hours ago
451caf4Define unresolved reference and citation fallbacks5 hours ago
9e1fe9bCall out simplified group scoping5 hours ago
92c0021Add tokenizer and expander test vectors5 hours ago
5d80228Define external file resolution rules5 hours ago
c88824bSpecify command-delimited inline math support5 hours ago
dcd10ddSpecify KaTeX as the math rendering path5 hours ago
382d42aDefine failure modes for expansion primitives5 hours ago
85ac854Specify source spans for expansion primitives5 hours ago
86a4d64Model command registry as a discriminated union5 hours ago
adc639cDefine expander return contract5 hours ago
7a9b69aSpecify advanced expansion control primitives5 hours ago
f0c895bDeclare unsupported TeX features explicitly6 hours ago
ee94ffbAlign change propagation with tokenizer API6 hours ago
9390f23Define synthetic marker payload schemas6 hours ago
ad0691aClean up remaining byte-offset wording6 hours ago
3c15c63Standardize source offsets as UTF-16 units6 hours ago
bf13f4dSeparate unresolved work from aux entries6 hours ago
4845c1bFormalize tokenizer token union6 hours ago
c7eae75Unify layout document contract across specs6 hours ago
89505a5spec: update CHANGE-PROPAGATION.md for four-spec architecture7 hours ago
f3db429spec: update EDITOR-SPEC.md for tokenizer integration7 hours ago
4fc055espec: update RENDERER-SPEC.md for tokenizer integration7 hours ago
baf7d08spec: add TOKENIZER-SPEC.md — tokenizer, macro expansion, package system7 hours ago
bf444d8Preserve preamble source ownership7 hours ago
827e8f7Preserve paragraph source ownership7 hours ago
76d5317Preserve list item source ownership7 hours ago
2a1d0a9Project linebreak blocks in pipeline7 hours ago
af179f5Preserve explicit page break source ownership7 hours ago
32adeb7Project vspace blocks in pipeline7 hours ago
6336f30Preserve description item source ownership7 hours ago
5e1c649Project run-in heading blocks in pipeline7 hours ago
f39231aProject includegraphics blocks in pipeline7 hours ago
8e1e99aProject title-page dates as standalone blocks7 hours ago
ed6d18dPreserve frontmatter command source lengths7 hours ago
d9caa01Preserve heading command source lengths7 hours ago
ab10920Preserve dropcap source ownership7 hours ago
634743fPreserve multicols source ownership7 hours ago
9aa4862Preserve minipage source ownership8 hours ago
14b8e6bPreserve verse source lengths8 hours ago
d980175Preserve quotation source lengths8 hours ago
ae0a28aPreserve center source lengths8 hours ago
d502e0dPreserve prose environment source lengths8 hours ago
715fe14Preserve tabular source ownership in pipeline8 hours ago
ce467e4Project lstlisting blocks in pipeline8 hours ago
820499aPreserve verbatim source ownership in pipeline8 hours ago
9800d74Project generated list commands in pipeline8 hours ago
e76f931Preserve bibliography source ownership in pipeline8 hours ago
dc44714Preserve tableofcontents source ownership in pipeline8 hours ago
606715aPreserve table source ownership in pipeline8 hours ago
pretex — last 100 commits
6982863test: add faithful tests index3 days ago
5cada0atest: pin toc reference pdf oracle3 days ago
f685cc0test: support faithful reference pdf fixtures3 days ago
d375f14test: add faithful gather fixture3 days ago
5f5fac3test: add faithful arrow fixture3 days ago
9456140test: add faithful custom-tag fixture3 days ago
51f984atest: add faithful subequations fixture3 days ago
af0744etest: add faithful spacing fixture3 days ago
0fa671atest: add faithful big-operator fixture3 days ago
917fb99test: add faithful amsmath accent fixture3 days ago
fa251c6test: add faithful amsmath operator fixture3 days ago
7033c63test: add faithful amsmath matrix fixture3 days ago
c40b515test: add faithful amsmath reference fixture3 days ago
c3a0282docs: refresh package docs3 days ago
29257fbchore: bump tex-wasm runtime assets3 days ago
a1d7a55fix: prefer document fontface realms3 days ago
9f99f85fix: support explicit math font documents3 days ago
273dad9fix: support explicit math canvas documents3 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 state4 days ago
d1a2cf2test: add typewriter filename faithful fixture4 days ago
792c361fix: skip prose tracking for typewriter fonts4 days ago
ebf7e38test: harden arxiv raster and bounds checks4 days ago
a28814ftest: expose arxiv raster-size mismatches4 days ago
558dee8test: align arxiv smoke raster with references4 days ago
4a2b76ftest: add arxiv published-pdf geometry diagnostics4 days ago
38b4370test: ignore arxiv archive watermark in diffs4 days ago
6dbe78edocs: document shared font and paragraph helpers4 days ago
729f276fix: align inline math DOM baseline4 days ago
6c1c5d6build: harden cm font patch pipeline4 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.