This file is the persistent inbox for mid-stream user requests, bug reports,
and architectural constraints.
Process:
supersedes the current highest-leverage work.
finishing one.
file stays current instead of turning into a stale backlog dump.
README.md, the living document in src/ui/templates.ts, and the support matrices should reflect
the actual shipped product rather than stale plans.
update the current-truth docs in the same slice instead of deferring docs
cleanup to “later”.
NEXT.md whenever more than one agent is working inthe repo. Record owner, task, write scope, and status, then prune stale
entries aggressively.
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
product, push back clearly and discuss the tradeoff instead of acting like a
yes-man.
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.
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.
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.
native page components anchored from renderer/editor-owned coordinates, not
floating viewport overlays that visually drift from the document.
authoritative block/source model and predeclared geometry, not from ad hoc DOM
guesses, hover hacks, or reverse-engineered page shape.
post-render DOM measurement loops to "correct" heading/caption/bibliography
prefix widths after paint.
brittle, bolted-on, modal-feeling behavior there as a real architecture bug,
not as acceptable interim UX.
renderer-owned block surface that stays honest before, during, and after
interaction instead of swapping DOM modes on focus changes.
the live UX and let the user judge the product behavior directly unless they
explicitly ask for verification work.
text. Do not keep growing separate edit-only parsing/layout behavior when the
shared path can be improved instead.
new behavior should land in the shared authoritative path, not in a side
lane.
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.
single CSS file, not from inline font / color / line-height mutation on
nodes.
style="" on semantic document nodes should be limited to geometry,positioning, or genuine inline overrides.
keep inherited edit-surface typography through CSS classes so caret metrics
stay correct.
projected edit surfaces need the same role class / typography metrics as the
passive renderer.
back toward reverse-engineering DOM shape when explicit ownership metadata is
available.
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.
ff and ffi. There is a related article in the colony knowledge base; check it
when returning to the font cleanup lane.
whether it still matters after the canonical CTAN-backed font rebuild before
making further assumptions about CM font encoding behavior.
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.
here and fold it into the work deliberately.
TOC/chapter defaults. Keep checking page chrome and class-owned defaults
against LaTeX rather than freezing the current browser-ish approximations.
rendering quality, sizing, spacing, and surrounding chrome as an active
product issue rather than acceptable placeholder output.
semantic DOM pass, but treat it as an active renderer regression rather than
a cosmetic complaint.
faithful glyph access on raw font slots or real Unicode only.
document.querySelector(...) guesses over the rendered DOM.main.ts on top of the core editor scroll sync path; compare-mode sync should plug into the same editor-owned seam instead.[data-src-offset] fragments. Keep preview mapping rooted in block ownership, with fragment/line scans as fallback rather than first choice.body mid-click.editorEl scroll bookkeeping drag pagesWorkspace around while block/widget/math editing is active.pointermove and repeated DOM queries.minipage should stay honest even when the direct parent is an inner quote, list item, or similar child block.source.document.body, and should ride document geometry instead of a global viewport overlay plus scroll listener chase loop.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.+ 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.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.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.+ 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.+ is visually hidden, its corridor should also be pointer-events: none so invisible gutter UI cannot steal hover or clicks from the document.editorBlockEditKind="source", its root surface should own clicks across the block frame instead of leaving dead zones that depend on text child hits.editorBlockEditKind="source", treat all descendant projection detail as display-only for click targeting instead of letting child metadata reopen competing edit/jump lanes.pointer-events: none to hide interactive child semantics that should not exist in the first place.data-src-* fragments inside those blocks. Once a block owns source editing, its children are display detail, not competing navigation targets.getBoundingClientRect()-driven overlay positioning plus post-render chase loops for inline links, images, figures, or math targets.