fix(webapp): read-only routes no longer write (#1178) #1208

Merged
claude-bot merged 3 commits from fix/1178-get-routes-that-write into main 2026-10-17 07:44:53 +00:00
Collaborator

Fixes most of #1178: read-only routes that still wrote.

  • Planning names: GET /planning/names/{category} is now a pure read (options: [] on a cold cache). Generating moves to a POST on the same path, and the Names drawer uses the POST. Any outside script that generated names with the GET must now POST.
  • GET /admin/settings/secrets-health only reports. The plaintext-secret upgrade still runs at startup.
  • Ownership offers, for campaigns and the server: a stale offer is treated as gone on read without writing. A new Beat task, expire_ownership_offers, runs every 5 minutes and expires stale offers.
  • The sheet-definition GETs no longer call ensure_builtin (it already runs at startup).
  • Content-pack exports: the audit row per download stays, since the download is the event being recorded. The allow-list entry now gives that reason.
  • The allow-list in test_get_routes_do_not_write.py is down to 5 entries, each with its real reason.

Left for later:

  • download_lore_image's legacy-file move: moving files needs a startup sweep, not a migration.
  • list_creations deletes character creations untouched for 30 days. The scan hadn't listed it. It needs a Beat task or a read-side filter, filed separately.

Tests on docker-test: 1382 backend tests passed across the areas touched. Frontend src/pages/prep passed when rerun alone, after load timeouts at a load average of 34. Ruff, version sync and the changelog check are clean.

🤖 Generated with Claude Code

Fixes most of #1178: read-only routes that still wrote. - **Planning names:** `GET /planning/names/{category}` is now a pure read (`options: []` on a cold cache). Generating moves to a `POST` on the same path, and the Names drawer uses the POST. Any outside script that generated names with the GET must now POST. - **`GET /admin/settings/secrets-health`** only reports. The plaintext-secret upgrade still runs at startup. - **Ownership offers, for campaigns and the server:** a stale offer is treated as gone on read without writing. A new Beat task, `expire_ownership_offers`, runs every 5 minutes and expires stale offers. - **The sheet-definition GETs** no longer call `ensure_builtin` (it already runs at startup). - **Content-pack exports:** the audit row per download stays, since the download is the event being recorded. The allow-list entry now gives that reason. - The allow-list in `test_get_routes_do_not_write.py` is down to 5 entries, each with its real reason. Left for later: - **`download_lore_image`'s legacy-file move:** moving files needs a startup sweep, not a migration. - **`list_creations` deletes character creations untouched for 30 days.** The scan hadn't listed it. It needs a Beat task or a read-side filter, filed separately. Tests on docker-test: 1382 backend tests passed across the areas touched. Frontend `src/pages/prep` passed when rerun alone, after load timeouts at a load average of 34. Ruff, version sync and the changelog check are clean. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
fix(webapp): read-only routes stop writing (#1178)
All checks were successful
CI / Backend lint (ruff) (pull_request) Successful in 34s
CI / Bot/backend version sync (pull_request) Successful in 29s
CI / Does this change touch the recording path? (pull_request) Successful in 22s
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 1m1s
CI / Which journeys does this change need? (pull_request) Successful in 25s
CI / Feedback site tests (pull_request) Successful in 53s
CI / Bot tests and audit (pull_request) Successful in 2m4s
CI / Docker image build (pull_request) Successful in 3m48s
CI / Frontend (shard 2/2) (pull_request) Successful in 10m3s
CI / Frontend (shard 1/2) (pull_request) Successful in 11m53s
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Successful in 9m19s
CI / End-to-end journeys (desktop) (desktop) (pull_request) Successful in 13m54s
CI / Backend migration, tests, and audit (pull_request) Successful in 29m14s
4f700c7e3a
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude-bot scheduled this pull request to auto merge when all checks succeed 2026-10-17 07:15:37 +00:00
Sign in to join this conversation.
No description provided.