Repository navigation
Description
Papercut / inconsistency
The save direction of the id web markdown codec treats unknown names inconsistently:
- Unknown node type → hard error:
ConversionError::UnknownType(pkgs/id/src/web/markdown.rs:1186). The caller learns the document could not be converted faithfully. - Unknown mark type → silently skipped:
create_marked_text(markdown.rs:1442-1459) matchesem/strong/strikethrough/linkand falls through with_ => continue, // Skip code (handled below) and unknown marks. The text survives; the formatting vanishes with no error and no signal.
Evidence (verified 2026-10-26 on main cf60812)
Standalone probe crate carrying a verbatim copy of src/web/markdown.rs (comrak 0.56.0 locked) — log in goal hidden_files probe-2026-10-26-2145/out3.log:
SAVE unknown_node(doc containing amentionnode) →ERR=UnknownType("mention")SAVE unknown_mark(paragraph texthicarrying anunderlinemark) →ok="hi\n"— mark gone, no error
Why it matters
ProseMirror documents reach this codec from the editor, collab peers, imports, and API writers — producers whose mark vocabularies can be larger than the codec's four-plus-code (underline and highlight are the obvious examples). Today a document using one saves "successfully" while quietly losing that formatting everywhere it appears. Either behavior can be defended — erroring like nodes, or skipping marks by design — but the split is currently accidental, undocumented at the API level, and untested: the continue arm's comment lumps deliberate code handling together with arbitrary unknown marks.
Acceptance criteria
- A documented, tested policy for unknown marks: either
Err(ConversionError::…)(consistent with unknown nodes), or an explicitly documented skip with a regression test pinning the behavior and a doc comment onprosemirror_to_markdownnaming it. - The
codemark's special handling stays intact and covered by existing tests. - Existing
web::markdowntests still pass; documents using only known marks render byte-identically to before.
Activity
developing-today commentedon Oct 27, 2026
CODE-190
dezren39 commentedon Oct 27, 2026
🤖 Agent note · filed
14 remaining items
dezren39 commentedon Nov 3, 2026
🤖 Agent note · handed off
dezren39 commentedon Nov 3, 2026
agent-note:v1 — state: handed off
Queue task #6632 is handed to OpenCode for execution.
ses_e5e6134b8c6ffeqSR2YJ9QOaH7opencoderepo-worker-codedezren39 commentedon Nov 3, 2026
🤖 Agent note · superseded
dezren39 commentedon Nov 3, 2026
agent-note:v1
state: triaged (coverage pass)
Coverage pass 2026-11-03: reviewed in the fleet-wide per-issue pass (drift / overlap / already-handled / stale / blockers / ordering). Verdict: still live; queued in repo-health-code-pilot as triage at priority 30 (priority/low). If this is already handled at current main, the triage closes it with evidence; if it needs splitting, the triage files the split.
Found via: coverage pass 2026-11-03
Merge pull request #4685 from developing-today/queue/6632-1045-unknow…
dezren39 commentedon Nov 3, 2026
🤖 Agent note · done — policy pinned and merged
repo-health-code-pilot, lane9aca43b4-5439-4939-9f71-323f5d32521bqueue/parkedlabel with no live task)prosemirror_to_markdown, the clarified_ => continuearm increate_marked_text, and a regression test pinning bare / mixed / code+link+unknown combinations.queue/6632-1045-unknown-mark-policy, head1b5d79e1, 43+/1- inpkgs/id/src/web/markdown.rs) was in flight but idle ~9h with no live owner; verified rather than duplicated, then merged as9a1fe429c8b4b6ece5fcdf1587dfdf022c63ffe6.cargo test -p id --features web --lib unknown_marks→ 1 passed;cargo test -p id --features web --lib web::markdown→ 224 passed, 0 failed (worktree~/git/fleet/7606-1045). Note:pkgs/idhas no PR-tier CI workflow trigger onmaintoday (.github/workflows/id-check.ymlruns on push/schedule only), so the local run is the verification of record for this merge.queue/parked+status/parked; no hard-stop labels were present.