Forge

Engineering Bot
pretex-editor — last 100 commits
ec219cbPrioritize source-owned blocks in interaction routing13 hours ago
3a9817fMake source-owned blocks hit-testable at the root13 hours ago
ef59f82Refresh live queue after source-owner cleanup13 hours ago
f5df406Keep figure surfaces under one source owner13 hours ago
c26b535Keep source block shells above rendered children13 hours ago
5c924b8Keep fallback footnotes source-owned13 hours ago
acc3225Delete pointer-event masking from source-owned tables13 hours ago
8e58311Refresh live queue after insertion hardening13 hours ago
74245fbKeep block hover off visibility rechecks13 hours ago
4247175Warm block-edge geometry outside the hover path13 hours ago
2e85ddcKeep hidden block-edge affordance out of hit testing13 hours ago
2c9e130Make manual preview scroll pin source follow14 hours ago
c701e7bKeep block-edge slash host on the live page frame14 hours ago
7c30ec8Keep source-owned table cells display-only14 hours ago
48cc67dKeep source-owned fallback lines display-only14 hours ago
47a3048Keep source-owned blocks authoritative in source sync14 hours ago
33f2e9dRender source-owned tables without fake child blocks14 hours ago
f7e12a3Keep fallback semantic blocks source-owned14 hours ago
79e6259Keep inline toolbar page-hosted14 hours ago
d00aeebMake block insertion hover corridor real and clickable14 hours ago
62b0c61Keep shared command chrome inside semantic sessions14 hours ago
2e5007eCache source-sync preview lookups outside cursor follow14 hours ago
faa2db0Respect shared semantic targets before block blur14 hours ago
4bf536eCache block-edge geometry outside the hover path14 hours ago
b1e8454Make manual preview scroll win over stale follow-up sync14 hours ago
754f598Keep block insertion affordance in control of session handoff14 hours ago
f75b3daDisable command chrome outside valid insert contexts14 hours ago
1305e1aRoute source shortcuts through shared insert commands14 hours ago
bb0893dGuard semantic editor reattach against missing page hosts14 hours ago
f449866Require declared page anchors for semantic editors14 hours ago
806b05fHost inline toolbar on the owning page frame15 hours ago
98a3551Give text insert commands explicit execution lanes15 hours ago
ee2470bKeep semantic sessions in control of preview scroll15 hours ago
842f78ePreserve semantic slash clicks through pointerdown15 hours ago
6ee3b80Map inline toolbar to shared commands15 hours ago
610f74cFilter command palette by live context15 hours ago
62bdb3eFilter slash commands by ancestor scope15 hours ago
2c3e49fMap format bar to shared command ids15 hours ago
cc5db87Keep editor anchor recovery host-local15 hours ago
8db7427Skip scroll churn for page-hosted editors15 hours ago
74770a3Fix toolbar command id mapping15 hours ago
38b3f02Route toolbar inserts through shared commands15 hours ago
714f0e6Make format bar follow edit sessions15 hours ago
2091cbfRequire live session for semantic slash15 hours ago
4b1ff64Keep inline toolbar session-owned15 hours ago
e9b14a5Make block insertion hover block-owned15 hours ago
5d27cfbStop semantic preview scroll feedback15 hours ago
73fc0efStabilize semantic slash launcher selection15 hours ago
e82e5f6Prefer editor blocks in source sync15 hours ago
0c09ff4Require declared anchors for page widget editors15 hours ago
173ab00Declare edit anchors for prefixed widgets15 hours ago
08911d9Delete dead block chrome overlay15 hours ago
f2d3c51Centralize semantic interaction target routing15 hours ago
f19e5f8Unify editor-owned preview scroll sync16 hours ago
5fbaf65Route slash UI through active edit sessions16 hours ago
4281b03Own block insertion hover from block targets16 hours ago
c71b632Use declared geometry for widget and math editors16 hours ago
32d22adMake block insertion affordance respond immediately16 hours ago
65999aaStop preview scroll from snapping back16 hours ago
4a5c81fKeep prefixed block widths renderer-declared16 hours ago
7410a21Refresh live queue after editor UX fixes16 hours ago
584f66cInclude declared prefixes in block insertion geometry16 hours ago
6469784Keep footnote wrappers out of block targeting16 hours ago
513e24eAnchor page scroll sync to source offsets16 hours ago
48cc002Use page geometry for projected footnotes16 hours ago
db9f555Filter slash commands by parent block scope16 hours ago
eb33425Restore insertion anchor block type import16 hours ago
daa082ePreserve nested block scopes for insertion anchors16 hours ago
5b35e09Keep source fallback block shifts live through blur16 hours ago
9a8bf49Use block role metrics for source fragment frames17 hours ago
5670bd4Anchor source fallback blocks to fragment frames17 hours ago
e9aea97Delete dead figure render-only fallback17 hours ago
e22b376Keep inline references inside rich edit surfaces17 hours ago
32d406dFilter top-level slash commands in nested blocks17 hours ago
efe8ec0Keep listing gutters out of source-jump flow17 hours ago
a46f32bLet generated list blocks own source editing17 hours ago
af292beKeep table source shells as single edit targets17 hours ago
024f674Disable slash inside semantic source blocks17 hours ago
c65be83Anchor block insertion to top-level blocks17 hours ago
321c677Keep projected block surfaces stable across blur17 hours ago
60b5db3Tighten source-to-preview scroll sync targeting17 hours ago
fb55fccMount semantic slash launcher into page frames17 hours ago
d38fd69Drive block insertion hover from visible fragments17 hours ago
c6db571Restrict source slash to structural commands17 hours ago
2048cc0Collapse stale planning docs into current truth17 hours ago
1745fc1fix: snapshot editor history coherently18 hours ago
5d937d7Use renderer geometry for block insertion hover18 hours ago
51b867fMake block commands insert actual blocks18 hours ago
1754e4dKeep projected semantic blocks renderer-owned while editing18 hours ago
8fc180eScope block insertion anchors by sibling blocks18 hours ago
7159a45fix: keep semantic source slash on shared filter path18 hours ago
dff02c4Make slash launcher context honest18 hours ago
cea1a0ffeat: anchor block insertion affordance to hovered blocks18 hours ago
54edaebfix: route semantic undo through shared editor history18 hours ago
6664c62fix: restore correct cursor position on undo/redo18 hours ago
64c1281fix: add undo/redo keyboard shortcuts to rich block editor19 hours ago
9d2f1cefeat: keep slash insertion on semantic surfaces19 hours ago
3785020docs: define structured container migration22 hours ago
9faf236feat: support block-edge slash insertion23 hours ago
358cfc3test: harden migrated caption smoke helpers30 hours ago
pretex — last 100 commits
6982863test: add faithful tests index2 days ago
5cada0atest: pin toc reference pdf oracle2 days ago
f685cc0test: support faithful reference pdf fixtures2 days ago
d375f14test: add faithful gather fixture2 days ago
5f5fac3test: add faithful arrow fixture2 days ago
9456140test: add faithful custom-tag fixture2 days ago
51f984atest: add faithful subequations fixture2 days ago
af0744etest: add faithful spacing fixture2 days ago
0fa671atest: add faithful big-operator fixture2 days ago
917fb99test: add faithful amsmath accent fixture2 days ago
fa251c6test: add faithful amsmath operator fixture2 days ago
7033c63test: add faithful amsmath matrix fixture2 days ago
c40b515test: add faithful amsmath reference fixture2 days ago
c3a0282docs: refresh package docs2 days ago
29257fbchore: bump tex-wasm runtime assets2 days ago
a1d7a55fix: prefer document fontface realms2 days ago
9f99f85fix: support explicit math font documents2 days ago
273dad9fix: support explicit math canvas documents2 days ago
d2bdd8dfix: support explicit math dom documents2 days ago
176f8a9fix: thread explicit dvi render documents2 days ago
d6912abfix: scope dvi browser measurement per document2 days ago
539a0d9fix: drop dvi getElementById requirement2 days ago
4291309fix: use container document for root render errors2 days ago
228efa1fix: scope math font loading per document2 days ago
140bf89fix: scope computer modern font injection per document2 days ago
6c779a4fix: clone arxiv required text markers2 days ago
508fa46fix: default invalid tex asset types to octet-stream2 days ago
46ae21dfix: normalize bundled tex font helper inputs2 days ago
7fde953fix: isolate faithful viewer support paths2 days ago
7e59d3bfix: fail clearly when package root is missing2 days ago
712e9a3fix: reject backslash asset helper paths2 days ago
d9696a7fix: stabilize faithful viewer bundle output paths2 days ago
6ce1cccfix: normalize bundled asset helper inputs2 days ago
8aa0969fix: preserve relative font base urls2 days ago
933ca35fix: tolerate unusable dvi measure canvases2 days ago
4f4703dfix: freeze math font base url after load2 days ago
1646574fix: harden math font loader retries2 days ago
1d61028fix: harden computer modern font injection2 days ago
9aec784fix: preserve root render failures on bad containers2 days ago
1ba35f2fix: fail fast on invalid root render containers2 days ago
014a80ffix: preserve root render errors without dom2 days ago
506adc5fix: guard dvi renderer document contract2 days ago
2600a97fix: recover from throwing dom canvas creation2 days ago
40b05e1fix: ignore escaped math delimiters in text2 days ago
66df4bbfix: harden singleton engine init2 days ago
83d4480fix: treat unmatched display math delimiters as text2 days ago
d39bde5fix: guard math dom renderer document contract2 days ago
a87f29bfix: require usable math render canvas2 days ago
aae6540fix: default math canvas rendering to text style2 days ago
7798a27fix: surface root render failures in container2 days ago
a192756fix: isolate root renders from aux state2 days ago
6d69278fix: share faithful viewer engine state2 days ago
6783788fix: detect generated-list forward references2 days ago
b657808fix: share faithful engine init state2 days ago
0d693fefix: align root render helper with engine state2 days ago
b32cbdfrefactor: drop dead dvi renderer hooks2 days ago
999d09ffix: guard root render init contract2 days ago
21cda8drefactor: remove dead math canvas helper2 days ago
574241bfix: replace stale root render output2 days ago
ed8b249fix: honor math canvas fallback fonts2 days ago
bf4a66dfix: add browser stubs for node subpaths2 days ago
b429c1bfix: support offscreen math canvases2 days ago
163f5c0fix: make faithful viewer helper node-safe2 days ago
e5db745docs: refresh faithful fixture count2 days ago
9f95467fix: export canonical math family names2 days ago
5e0060arefactor: deprecate cm math aliases2 days ago
4647cfedocs: document package entrypoints2 days ago
30cf69ddocs: refresh tex encoding packaging notes2 days ago
fd15362fix: internalize tex encoding package contract2 days ago
f545569chore: trim package test harness2 days ago
117d328chore: prune generated package artifacts2 days ago
c8ff00dfix: publish node-safe package exports2 days ago
db72d36refactor: use tex asset helpers in tests2 days ago
f502c08refactor: publish tex asset support2 days ago
d6af1edrefactor: publish faithful viewer dev support2 days ago
e91093crefactor: publish math webfont support2 days ago
131b7c0refactor: use neutral math family names internally2 days ago
0db0f88refactor: neutralize math font family ids2 days ago
f247a5arefactor: publish faithful viewer support2 days ago
8dd813erefactor: publish pretex root exports2 days ago
c61e518refactor: export pretex math font contract2 days ago
3542b2dfix: honor token width models in paragraph layout2 days ago
3375fb9refactor: share paragraph font projection helper2 days ago
bd501c8refactor: share paragraph token midpoint helper2 days ago
1d76c20refactor: support styled public paragraph layout2 days ago
cd69641refactor: share justified line quality scoring2 days ago
4e7737arefactor: share measured paragraph layout2 days ago
d2e5cbarefactor: export paragraph tokenization helpers2 days ago
6893918fix: make paragraph helper whitespace-aware2 days ago
77a00c2fix: isolate layout probes from persisted document state3 days ago
d1a2cf2test: add typewriter filename faithful fixture3 days ago
792c361fix: skip prose tracking for typewriter fonts3 days ago
ebf7e38test: harden arxiv raster and bounds checks3 days ago
a28814ftest: expose arxiv raster-size mismatches3 days ago
558dee8test: align arxiv smoke raster with references3 days ago
4a2b76ftest: add arxiv published-pdf geometry diagnostics3 days ago
38b4370test: ignore arxiv archive watermark in diffs3 days ago
6dbe78edocs: document shared font and paragraph helpers3 days ago
729f276fix: align inline math DOM baseline3 days ago
6c1c5d6build: harden cm font patch pipeline3 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.