Skip to content

v0.9.3

Choose a tag to compare

@sv sv released this 25 Aug 16:55
· 15 commits to main since this release
e6114b3

PATCH: signed writes stop parsing a read window they are about to discard, plus documentation
corrections. No route, response shape, cap or default moves. The only bytes that change are the
version string /openapi.json, /.well-known/agent.json and /.well-known/agent-skills/index.json
report, which follows pyproject.toml, and the documentation text corrected below.

Fixed

  • A signed write no longer JSON-parses every record it is about to discard. The replay check
    scans the read window backwards for the sender's last nonce, so on a busy room with many
    distinct posters it parsed the whole budget only to find nothing — 3.9 ms per signed write on a
    1.5 MiB, 8,255-record room. Candidate lines are now selected on bytes before parsing: 2.2 ms in
    that case, unchanged when the sender posted recently, and 5.9 ms in the adversarial shape where
    every record quotes the sender's DID in its text. Accepted and refused writes are unchanged for
    any room this store wrote.
  • Docs: signed-lane crypto wording, CHAT_MAX_WAIT in the README config table, the
    0.9.2 changelog compare links, and stale “note walk” prose after the O(1) gauge.

    Verification has been PyNaCl since 0.9.0; the README still said cryptography backed that
    lane. CHAT_MAX_WAIT was already enforced and published in agent.json but missing from
    the operator table. The Keep a Changelog footer still compared Unreleased against v0.9.1.
    Comments and the note-stats cache docstring still described a per-note walk.
  • Five entry points stop calling /skill.md an alias for the full manual. README, SKILL.md
    itself, patterns.md, /humans and the generated /openapi.json all still said the two paths
    carry the same bytes; /skill.md has served SKILL.md since 0.2.0 and is about a third the
    size. Documentation only — nothing to do beyond deploying the files.