Conversation
Support uploading new versions of existing scrolls via ?revises={url_hash}
query parameter. The upload page pre-fills metadata from the parent scroll,
and the publish flow assigns the correct version number, inherits
scroll_series_id/slug/publication_year from the series, and handles
duplicate content detection for metadata-only version updates.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Deploy Previewhttps://scroll-press-pr-31.fly.dev This preview will be destroyed when the PR is closed. |
Truncate base content_hash before appending nonce so the combined value stays within the 64-character column limit. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The nonce-appended url_hash was not being truncated to fit within the 20-character column limit. Truncate the base url_hash to (20 - nonce_length - 1) characters before appending the nonce. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Needs human reviewWhat changed: Added a version publishing flow — users can upload v2+ of a scroll via Review checklist:
What to look for:
|
how exactly am I supposed to do this? I have no way to get the published scroll's hash. |
Scroll owners now see a "New Version" button in the scroll details
modal that links to /upload?revises={url_hash}, making it easy to
start a new version without needing to know the url_hash.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Needs human reviewWhat changed: Added a "New Version" button on published scroll pages (owner-only) and a complete version publish flow — uploading via Review checklist:
What to look for:
|
Needs human reviewWhat changed: Added a "New Version" button on published scroll pages (owner-only) that launches a pre-filled upload flow for publishing v2+ with correct version numbering, series inheritance, and duplicate-content handling within the same series. Review checklist:
What to look for:
|
|
Steps 1-6 worked correctly. Then I tried to upload the same HTML file, the preview worked BUT it didn't say anywhere that "this will be v2". Then, I clicked publish and received a 500 error. |
The preview page now indicates "This will be published as v2" (or v3, etc.) when a scroll is being uploaded as a new version via the revises flow. Also adds a full integration test for publishing same-content v2 scrolls. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Needs human reviewWhat changed: Added a publish flow for new versions (v2+) of scrolls — owners see a "New Version" button on published scrolls, the upload page pre-fills metadata from the parent version, and the preview page shows the upcoming version number (e.g., "v2"). Review checklist:
What to look for:
|
Three fixes for the version publish flow: 1. view_scroll_by_year_slug: query returned MultipleResultsFound when v1 and v2 shared the same (publication_year, slug). Now orders by version DESC with limit 1 to always return the latest version. 2. Upload form: when revising without re-uploading a file, the handler now falls back to the parent scroll's HTML content instead of raising "HTML file is required". Also pre-fills original_filename in the revision form data so the UI shows the existing file state. 3. Upload form: added hx-boost="false" to prevent HTMX from intercepting multipart file upload submissions, which caused silent failures when the AJAX redirect handling didn't work correctly. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Needs human reviewWhat changed: Added a complete publish flow for uploading new versions (v2+) of existing scrolls, including a "New Version" button on published scroll pages, metadata pre-fill from the parent version, version number assignment, and same-content re-upload support within a series. Review checklist:
What to look for:
|
Resolve conflict in view_scroll_by_year_slug: combine is_owner (from this branch) with versions/latest_version/is_latest (from main). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The homepage scroll cards now use canonical /{year}/{slug} URLs via
the .scroll-card-link class instead of /scroll/{hash} hrefs. The
footer tests were timing out because a[href^="/scroll/"] matched nothing.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… conflict Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

Summary
?revises={url_hash}query parameter on the upload pageTest plan
Generated with Claude Code