Rule 32 "Comments describe the product to a stranger" sweep over
src/, alembic/ and tests/. Comments and docstrings now say what the code
does and the reason as a present-tense constraint, briefly.
Removed:
- issue, task, note, rule, milestone and family-idea references
- "used to" / before-and-after narration
- quotes of decisions and incident stories from the deploying instance
- paragraph-length arguments, where a line or two carries the fact
Kept every hazard as a present-tense fact, e.g. timing oracles, the
proxy hop direction, and migrations that must stay frozen.
Also:
- Three test names lose "still"/"used to"/"pre_m304" phrasing.
- pyproject's description drops "FabledSword family".
The history these comments carried stays in Scribe and in git log.
A comment-stripping diff (Scribe snippet #6226 "codeonly.py — prove a
diff changed only comments") shows no code changed apart from the
renamed tests and the description string.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Let native clients sync attachment blobs deterministically:
- note_attachments gains sha256 (migration 0018, nullable, no backfill).
The delta feed's attachment metadata now carries size + sha256 so a
client knows exactly which blobs it already has (dedupe) and can verify
integrity after download.
- Upload accepts an optional client-supplied attachment id (multipart form
field), so a file attached offline keeps its identity across sync;
re-uploading an id the note already has is an idempotent no-op. The
server hashes the stored bytes (sha256) on upload. Download by id already
exists (owner/shared scoped).
Frontend Attachment type carries the new optional size/sha256.
(Still image-only mimes — broadening to any-file is task 1900. Blob sync
behavior is operator-verified on deploy.)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FRgehjoz7Yv8LkUfADxACm