Skip to content

Latest commit

 

History

History
217 lines (160 loc) · 12.7 KB

File metadata and controls

217 lines (160 loc) · 12.7 KB

Task Index

Last updated: 2026-08-21 · commit cafc3cc Single source of truth for what is being worked on and what has shipped.


Ongoing

Upcoming or partially complete. Files live in ongoing/.

T-009T-026 came out of the full-codebase audit on 2026-08-18. They are grouped below by theme rather than by ID, because within each group the sequencing matters.

Correctness & security

ID Task Priority Status Blocked on
T-002 Fix README ↔ API drift High Proposed Developer answers (memory Q1, Q2)

T-009, T-010 and T-003 were one story, and all three have landed (C-011, C-012, C-013). sanitize: true now means something in the browser. On the server it means something only if you also pass sanitizer — see open question 14 for whether the no-sanitizer fallback should escape rather than pass through.

Performance

ID Task Priority Status Blocked on
T-013 Stop building the debug node tree eagerly Medium Proposed API decision (see task)

T-011 and T-012 have both landed (C-016, C-017): 39.2 ms → 0.40 ms per decoration build on a 5,000-line document. Its one open acceptance criterion is the playground checklist, which needs a browser.

T-015 was re-measured and mostly dropped. Its premise did not survive C-016 and C-017: emoji.emojify costs 0.36 µs, so even 100 visible shortcodes add 0.036 ms to a 0.40 ms decoration build, and renderMath no longer runs per keystroke now that widgets are reused. Both caches are dropped as not worth the code, along with the proposed lib/lru.ts. It was rescoped to the one part that was never a caching argument — two mermaid widgets with the same definition sharing one in-flight render — and landed as C-030.

Lifecycle & memory

Nothing outstanding.

T-016, T-018 and T-017 have all landed (C-018, C-019, C-026). DraftlyPlugin.onViewDestroy exists, the view plugin implements destroy(), the async widget paths are guarded, and plugin instances are now per-editor via createEssentialPlugins() / createAllPlugins(). The deprecated essentialPlugins / allPlugins arrays were removed in C-028, a major.

Bundle size

Nothing outstanding.

T-020 landed as C-024 for its first three steps, and its fourth became T-028, which has now landed as C-027. MermaidPlugin, MathPlugin and EmojiPlugin sit behind draftly/plugins/{mermaid,math,emoji}, and createAllPlugins() behind draftly/plugins/all.

C-027 turned out to be far more than a tidy-up. import { HeadingPlugin } from "draftly/plugins" bundled to 8.0 MB — one small plugin dragging in mermaid, KaTeX and node-emoji, because tsup emitted all 14 plugins as one chunk whose top level imported all three. It is now 2.5 MB with none of them. C-024's sideEffects: false could not have caught this: a bundler cannot drop a third-party package it cannot prove pure, and CJS has no tree-shaking at all.

C-026's deprecation cycle is over: the arrays were removed in C-028.

T-027 has landed as C-025 — the KaTeX stylesheet is now a generated TypeScript constant, so no bundler-specific specifier reaches dist/. It surfaced open question 17 (KaTeX's font URLs are relative and have never resolved for consumers), which landed separately as C-029: katex is now an optional peer dependency, and the stylesheet — fonts inlined as data: URIs — is injected only behind MathPluginOptions.injectStyles.

UX & accessibility

ID Task Priority Status Blocked on
T-026 ThemeEnum.AUTO ignores the system theme Medium Proposed Developer decision — behaviour change

Code quality & tooling

ID Task Priority Status Blocked on
T-001 Establish a test suite High Proposed Developer decision on runner (memory Q5)
T-005 Decompose oversized plugin files Medium Proposed Developer approval (memory Q6)
T-006 Resolve or remove plugin.dependencies Medium Proposed Developer decision (memory Q3)
T-024 Dead configuration surfaces Low Proposed Developer decision (memory Q8)
T-007 Wire up the type-check task Low Proposed Naming decision (memory Q4)

Implementation of the unblocked items began 2026-08-18, on the developer's instruction to work the ongoing list. Rows still marked Proposed with a "Developer decision" in the Blocked on column are untouched and stay that way until answered — see the open questions in ../memory.md.

Suggested order

Both follow-ups created by completed work have now landed — C-026's deprecation cycle closed in C-028, and open question 17 in C-029 — along with the last unblocked ongoing task, C-030.

What remains is entirely tasks whose Blocked on column names a developer decision: T-001, T-002, T-005, T-006, T-007, T-013, T-024, T-026. Nothing in the list can move without an answer to the corresponding open question in ../memory.md.

T-001 (a test suite) cuts across all of it, and is the one worth answering first. C-016, C-017, C-029 and C-030 are exactly the changes that are hard to verify by eye in a playground, and the pure layers they touch — the KaTeX generator's URL rewriting, the mermaid de-duplication key, editor/utils.ts, the table text utilities — are the testable ones.

Cross-repo

Plan Priority Status Blocked on
Migrate the logits fork's improvements High Complete

All nine workstreams landed (38df1665b9fac7). The design-token layer, shared base styles, documented shortcuts, paragraph spacing and five bug fixes are in; the fork's 80-column reformat and app-specific values were rejected as planned. Two findings are now open questions 15 (the LaTeX parser's AGPL licence) and 16 (plugin themes emit each surface's rules to both).


Completed

Files live in completed/. Reconstructed from git history at artifact bootstrap, so entries before 2026-08-18 are summaries rather than full task records.

ID Task Shipped
C-030 Share in-flight Mermaid renders 2026-08-21
C-029 KaTeX peer dependency, inlined fonts 2026-08-21
C-028 Remove the deprecated plugin arrays 2026-08-21
C-027 Split heavy plugins behind entry points 2026-08-19
C-026 Plugin collections are shared singletons 2026-08-18
C-025 dist/ has an unresolvable ?raw CSS import 2026-08-18
C-015 Redundant work in the preview renderer 2026-08-18
C-014 Preview dispatch ignores decorationPriority 2026-08-18
C-013 Make server-side sanitization honest 2026-08-18
C-012 Preview emits raw HTML for unhandled nodes 2026-08-18
C-011 Escape attribute values in renderToHTML 2026-08-18
C-010 Theme rebuild grows the stylesheet 2026-08-18
C-009 Harden createTheme / deepMerge 2026-08-18
C-008 Replace ESLint + Prettier with Biome 2026-08-18
C-007 Agent artifact system 2026-08-18
C-006 Vendored agent skills eae4434
C-005 Table plugin reimagined (v2.0.0) 226f388e5dc598
C-004 Nested and comma-separated theme selectors f22824c, 1ad0f3d
C-003 Emoji plugin 3904ad3
C-002 Code plugin overhaul + diff view 361c9fbe716bb7
C-001 Preview syntax highlighting via CodeMirror themes 17cdf9b, dab22ab

Working with tasks

Lifecycle

Proposed  →  In Progress  →  Complete
                   ↓
               Blocked / Dropped
  1. Create — add a file in ongoing/ using the template below, add a row here.
  2. Start — set status to In Progress in both the file and this index.
  3. Finish — move the file to completed/, rename T-NNNC-NNN, fill in the outcome, and move its row to the Completed table.
  4. Drop — leave the file in ongoing/ with status Dropped and a reason. Do not delete it; the reasoning is the value.

Rules

  • One task file per coherent unit of work, matching one logical commit or a short series of related commits. If a task needs three unrelated commits, it is three tasks.
  • IDs are never reused. T-NNN while ongoing, C-NNN when complete.
  • Update the task file as you work, not at the end — a half-finished task with good notes is far more useful to the next session than a perfect one written from memory.
  • Anything durable you learn goes to ../memory.md; anything structural goes to ../architecture/. Task files hold the work, not the knowledge.

Template

# T-NNN — <title>

**Status:** Proposed | In Progress | Blocked | Complete | Dropped
**Priority:** High | Medium | Low
**Created:** YYYY-MM-DD
**Blocked on:** <what, or —>

## Problem

What is wrong or missing, and why it matters.

## Proposed approach

How to solve it. Note alternatives considered and why they lost.

## Affected areas

Files, modules, and which architecture docs will need updating.

## Acceptance

Concrete, checkable conditions for done.

## Notes

Running log. Append as you work — findings, dead ends, decisions.