Forge

Engineering Bot
pretex-editor — last 100 commits
ce61a5aMake spec pipeline the default renderer with working cursor/selection42 minutes ago
a52a4a8[spec] Add runtime offset assertions and invariant 6 (non-optional types)78 minutes ago
7b276e9Update CLAUDE.md: type audit first, runtime assertions, tests as gate79 minutes ago
26d5933Add run.sh for refactor branch13 hours ago
98dc573Update serve.ts from baseline13 hours ago
75e2509Replace CLAUDE.md for refactor approach — evolve existing code toward specs13 hours ago
0495947[spec] Update TEST-SPEC.md from baseline13 hours ago
26020e5[spec] Update CHANGE-PROPAGATION.md from baseline13 hours ago
ec95c36[spec] Update UI-SPEC.md from baseline13 hours ago
7b8d1fb[spec] Update RENDERER-SPEC.md from baseline13 hours ago
788ee40[spec] Update EDITOR-SPEC.md from baseline13 hours ago
8c76525spec: add probe system — layoutDocument takes LayoutProbe parameter21 hours ago
ac47142spec: add parser test vectors, layout constants, command registry22 hours ago
8ae2615spec: apply patches — dependency headers, shared state, cross-spec propagation22 hours ago
9859839spec: add renderer spec, fix MathSlot/ImageSlot types in editor spec22 hours ago
b4935d9spec: add Section 7 (content insertion) and UI visual spec23 hours ago
df47cdcspec: v6 — wire format bar, clear goalX, remove unused fn, no-op detection24 hours ago
7a48106spec: v5 — fix undo dual-stack, coalescing direction, goalX, wrapSelection contract24 hours ago
fc5c638doc: add change propagation workflow for spec-driven development24 hours ago
262ec1espec: v4 — fix undo off-by-one, coalescing, nav, selection, IME, toolbar24 hours ago
3d0e871spec: v3 — versioned sections, arrow key nav, error recovery, IME, macro cursors24 hours ago
da64165spec: expand editor spec with exact types, algorithms, CSS, edge cases24 hours ago
795b6bespec: clean target editor specification24 hours ago
bfb7f07spec: render architecture restructure v325 hours ago
ec219cbPrioritize source-owned blocks in interaction routing2 days ago
3a9817fMake source-owned blocks hit-testable at the root2 days ago
ef59f82Refresh live queue after source-owner cleanup2 days ago
f5df406Keep figure surfaces under one source owner2 days ago
c26b535Keep source block shells above rendered children2 days ago
5c924b8Keep fallback footnotes source-owned2 days ago
acc3225Delete pointer-event masking from source-owned tables2 days ago
8e58311Refresh live queue after insertion hardening2 days ago
74245fbKeep block hover off visibility rechecks2 days ago
4247175Warm block-edge geometry outside the hover path2 days ago
2e85ddcKeep hidden block-edge affordance out of hit testing2 days ago
2c9e130Make manual preview scroll pin source follow2 days ago
c701e7bKeep block-edge slash host on the live page frame2 days ago
7c30ec8Keep source-owned table cells display-only2 days ago
48cc67dKeep source-owned fallback lines display-only2 days ago
47a3048Keep source-owned blocks authoritative in source sync2 days ago
33f2e9dRender source-owned tables without fake child blocks2 days ago
f7e12a3Keep fallback semantic blocks source-owned2 days ago
79e6259Keep inline toolbar page-hosted2 days ago
d00aeebMake block insertion hover corridor real and clickable2 days ago
62b0c61Keep shared command chrome inside semantic sessions2 days ago
2e5007eCache source-sync preview lookups outside cursor follow2 days ago
faa2db0Respect shared semantic targets before block blur2 days ago
4bf536eCache block-edge geometry outside the hover path2 days ago
b1e8454Make manual preview scroll win over stale follow-up sync2 days ago
754f598Keep block insertion affordance in control of session handoff2 days ago
f75b3daDisable command chrome outside valid insert contexts2 days ago
1305e1aRoute source shortcuts through shared insert commands2 days ago
bb0893dGuard semantic editor reattach against missing page hosts2 days ago
f449866Require declared page anchors for semantic editors2 days ago
806b05fHost inline toolbar on the owning page frame2 days ago
98a3551Give text insert commands explicit execution lanes2 days ago
ee2470bKeep semantic sessions in control of preview scroll2 days ago
842f78ePreserve semantic slash clicks through pointerdown2 days ago
6ee3b80Map inline toolbar to shared commands2 days ago
610f74cFilter command palette by live context2 days ago
62bdb3eFilter slash commands by ancestor scope2 days ago
2c3e49fMap format bar to shared command ids2 days ago
cc5db87Keep editor anchor recovery host-local2 days ago
8db7427Skip scroll churn for page-hosted editors2 days ago
74770a3Fix toolbar command id mapping2 days ago
38b3f02Route toolbar inserts through shared commands2 days ago
714f0e6Make format bar follow edit sessions2 days ago
2091cbfRequire live session for semantic slash2 days ago
4b1ff64Keep inline toolbar session-owned2 days ago
e9b14a5Make block insertion hover block-owned2 days ago
5d27cfbStop semantic preview scroll feedback2 days ago
73fc0efStabilize semantic slash launcher selection2 days ago
e82e5f6Prefer editor blocks in source sync2 days ago
0c09ff4Require declared anchors for page widget editors2 days ago
173ab00Declare edit anchors for prefixed widgets2 days ago
08911d9Delete dead block chrome overlay2 days ago
f2d3c51Centralize semantic interaction target routing2 days ago
f19e5f8Unify editor-owned preview scroll sync2 days ago
5fbaf65Route slash UI through active edit sessions2 days ago
4281b03Own block insertion hover from block targets2 days ago
c71b632Use declared geometry for widget and math editors2 days ago
32d22adMake block insertion affordance respond immediately2 days ago
65999aaStop preview scroll from snapping back2 days ago
4a5c81fKeep prefixed block widths renderer-declared2 days ago
7410a21Refresh live queue after editor UX fixes2 days ago
584f66cInclude declared prefixes in block insertion geometry2 days ago
6469784Keep footnote wrappers out of block targeting2 days ago
513e24eAnchor page scroll sync to source offsets2 days ago
48cc002Use page geometry for projected footnotes2 days ago
db9f555Filter slash commands by parent block scope2 days ago
eb33425Restore insertion anchor block type import2 days ago
daa082ePreserve nested block scopes for insertion anchors2 days ago
5b35e09Keep source fallback block shifts live through blur2 days ago
9a8bf49Use block role metrics for source fragment frames2 days ago
5670bd4Anchor source fallback blocks to fragment frames2 days ago
e9aea97Delete dead figure render-only fallback2 days ago
e22b376Keep inline references inside rich edit surfaces2 days ago
32d406dFilter top-level slash commands in nested blocks2 days ago
efe8ec0Keep listing gutters out of source-jump flow2 days ago
a46f32bLet generated list blocks own source editing2 days 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 documents3 days ago
176f8a9fix: thread explicit dvi render documents3 days ago
d6912abfix: scope dvi browser measurement per document3 days ago
539a0d9fix: drop dvi getElementById requirement3 days ago
4291309fix: use container document for root render errors3 days ago
228efa1fix: scope math font loading per document3 days ago
140bf89fix: scope computer modern font injection per document3 days ago
6c779a4fix: clone arxiv required text markers3 days ago
508fa46fix: default invalid tex asset types to octet-stream3 days ago
46ae21dfix: normalize bundled tex font helper inputs3 days ago
7fde953fix: isolate faithful viewer support paths3 days ago
7e59d3bfix: fail clearly when package root is missing3 days ago
712e9a3fix: reject backslash asset helper paths3 days ago
d9696a7fix: stabilize faithful viewer bundle output paths3 days ago
6ce1cccfix: normalize bundled asset helper inputs3 days ago
8aa0969fix: preserve relative font base urls3 days ago
933ca35fix: tolerate unusable dvi measure canvases3 days ago
4f4703dfix: freeze math font base url after load3 days ago
1646574fix: harden math font loader retries3 days ago
1d61028fix: harden computer modern font injection3 days ago
9aec784fix: preserve root render failures on bad containers3 days ago
1ba35f2fix: fail fast on invalid root render containers3 days ago
014a80ffix: preserve root render errors without dom3 days ago
506adc5fix: guard dvi renderer document contract3 days ago
2600a97fix: recover from throwing dom canvas creation3 days ago
40b05e1fix: ignore escaped math delimiters in text3 days ago
66df4bbfix: harden singleton engine init3 days ago
83d4480fix: treat unmatched display math delimiters as text3 days ago
d39bde5fix: guard math dom renderer document contract3 days ago
a87f29bfix: require usable math render canvas3 days ago
aae6540fix: default math canvas rendering to text style3 days ago
7798a27fix: surface root render failures in container3 days ago
a192756fix: isolate root renders from aux state3 days ago
6d69278fix: share faithful viewer engine state3 days ago
6783788fix: detect generated-list forward references3 days ago
b657808fix: share faithful engine init state3 days ago
0d693fefix: align root render helper with engine state3 days ago
b32cbdfrefactor: drop dead dvi renderer hooks3 days ago
999d09ffix: guard root render init contract3 days ago
21cda8drefactor: remove dead math canvas helper3 days ago
574241bfix: replace stale root render output3 days ago
ed8b249fix: honor math canvas fallback fonts3 days ago
bf4a66dfix: add browser stubs for node subpaths3 days ago
b429c1bfix: support offscreen math canvases3 days ago
163f5c0fix: make faithful viewer helper node-safe3 days ago
e5db745docs: refresh faithful fixture count3 days ago
9f95467fix: export canonical math family names3 days ago
5e0060arefactor: deprecate cm math aliases3 days ago
4647cfedocs: document package entrypoints3 days ago
30cf69ddocs: refresh tex encoding packaging notes3 days ago
fd15362fix: internalize tex encoding package contract3 days ago
f545569chore: trim package test harness3 days ago
117d328chore: prune generated package artifacts3 days ago
c8ff00dfix: publish node-safe package exports3 days ago
db72d36refactor: use tex asset helpers in tests3 days ago
f502c08refactor: publish tex asset support3 days ago
d6af1edrefactor: publish faithful viewer dev support3 days ago
e91093crefactor: publish math webfont support3 days ago
131b7c0refactor: use neutral math family names internally3 days ago
0db0f88refactor: neutralize math font family ids3 days ago
f247a5arefactor: publish faithful viewer support3 days ago
8dd813erefactor: publish pretex root exports3 days ago
c61e518refactor: export pretex math font contract3 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.