Skip to content

v0.7.11

Choose a tag to compare

@serenakeyitan serenakeyitan released this 29 Jun 23:07
· 283 commits to main since this release
a16f33e

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 → add folded 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 traversaltdoc publish/pull/unpublish now 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.json created 0600 from 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 --check reports the real commit count.

Full notes: CHANGELOG.md

🤖 Generated with Claude Code