v0.7.11
Dual-engine code audit (Codex + Claude subagents, every finding adversarially verified). Both engines independently flagged the same top issues. Real data-loss + security fixes — marketplace installs (pinned to the manifest version) should update.
Fixed — data loss
- Reactions silently disappeared on a normal toggle. A reaction's event id baked in add-vs-remove, so
add → remove → addfolded to a stale "removed" and the reaction vanished. The id also omitted the version, so the same reaction across document versions clobbered each other. Fixed with one version-scoped id shared by add+remove; reactions stored before this release migrate automatically.
Fixed — security
- Comment anchor could hijack rendering (verified in a real browser). A stored anchor id was interpolated into a CSS selector, so a crafted id from a signed-in commenter could anchor a comment onto
<body>or throw an error that broke comment rendering for everyone. Anchors now match by attribute equality — no selector is ever built from stored data. - CLI slug path traversal —
tdoc publish/pull/unpublishnow validate the slug (kebab-case) before it's used in a path or URL, so a..slug can't escape the tdoc directory. - Hardening: server-side slug/version validation before storage keys; reserved object keys rejected as emoji; constant-time upload-token check; sign-in modal escapes its values and only opens https github.com URLs;
published.jsoncreated0600from the start.
Fixed — robustness
- Comment refresh survives an API error body; reaction clicks re-auth on expired sessions and surface failures; sign-in handles network/edge errors; text highlights re-anchor correctly without the CSS Custom Highlight API;
tdoc update --checkreports the real commit count.
Full notes: CHANGELOG.md
🤖 Generated with Claude Code