Erasing a member never regenerates summaries; the dialog says what's removed (D94, #797) #805

Merged
claude-bot merged 2 commits from build/797-erase-no-regenerate into main 2026-09-24 05:46:30 +00:00
Collaborator

Closes #797. The owner's decision (D94, 2026-09-24): "If somebody leaves we can do best-effort to remove them, but nothing that breaks the story that was told."

What changed

  • The regenerate option is gone from both erase dialogs, Members and the older campaign page. It had never worked: #397's overwrite guard in process_audio refused every session an erase touched.
  • Both dialogs say what happens.
    • Members: "Recaps and summaries stay as written, so the story that was told stays whole."
    • The older page: "Recaps stay as written, so the story that was told stays whole."
  • The dead path is removed: EraseRecordingsRequest, the router's body, run_member_erasure's parameter, and its "summary regeneration" step.
    • The endpoint takes no body, so an older browser tab that still sends {"regenerate_summaries": …} is ignored, not rejected.
    • The Celery task keeps the old positional argument, accepted and ignored, so an erase queued by the old code during a rolling deploy still runs.
  • process_audio's guard comment no longer names a caller that doesn't exist.
  • D94 is added to the decisions table, and the catalogue has been rebuilt.

This is not the bot API, so there is no contract change.

Checks, on the tree merged with main (cc53e6f)

  • Frontend:
    • Full suite: 143 files, 2017 tests passing.
    • Members, CampaignDetail and api/campaigns: 189 tests passing.
    • Lint: 0 errors, 227 warnings (one fewer: the unused Toggle import went).
    • An earlier run on a loaded machine had 3 timeouts, which didn't reproduce.
  • Backend: the erasure and member tests pass (34). Ruff 0.4.4 format and check are clean. CI runs the full suite.

🤖 Generated with Claude Code

Closes #797. The owner's decision (D94, 2026-09-24): "If somebody leaves we can do best-effort to remove them, but nothing that breaks the story that was told." ## What changed - **The regenerate option is gone** from both erase dialogs, Members and the older campaign page. It had never worked: #397's overwrite guard in `process_audio` refused every session an erase touched. - **Both dialogs say what happens.** - Members: "Recaps and summaries stay as written, so the story that was told stays whole." - The older page: "Recaps stay as written, so the story that was told stays whole." - **The dead path is removed:** `EraseRecordingsRequest`, the router's body, `run_member_erasure`'s parameter, and its "summary regeneration" step. - The endpoint takes no body, so an older browser tab that still sends `{"regenerate_summaries": …}` is ignored, not rejected. - The Celery task keeps the old positional argument, accepted and ignored, so an erase queued by the old code during a rolling deploy still runs. - `process_audio`'s guard comment no longer names a caller that doesn't exist. - **D94** is added to the decisions table, and the catalogue has been rebuilt. This is not the bot API, so there is no contract change. ## Checks, on the tree merged with main (cc53e6f) - Frontend: - Full suite: 143 files, 2017 tests passing. - Members, CampaignDetail and `api/campaigns`: 189 tests passing. - Lint: 0 errors, 227 warnings (one fewer: the unused `Toggle` import went). - An earlier run on a loaded machine had 3 timeouts, which didn't reproduce. - Backend: the erasure and member tests pass (34). Ruff 0.4.4 format and check are clean. CI runs the full suite. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
The erase dialog offered to regenerate summaries afterwards, but
process_audio's overwrite guard (#397) refused every session an erase
touches, so it never ran. The owner's call: erase what it can,
best-effort, and leave every recap and summary exactly as written.

- Frontend: drop the regenerate option from both erase dialogs
  (Members.jsx, CampaignDetail.jsx) and the eraseMemberRecordings
  request body; each dialog now says plainly that recaps stay as
  written.
- Backend: EraseRecordingsRequest is gone, the endpoint takes no body
  (an old client's stray regenerate_summaries field is simply never
  parsed), and run_member_erasure no longer queues process_audio. The
  Celery task wrapper still accepts and ignores a stray
  regenerate_summaries kwarg so an in-flight task queued before a
  rolling deploy does not crash.
- docs: record the decision as D94 in intro.md and rebuild
  CATALOGUE.md; CHANGELOG entry.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Merge remote-tracking branch 'origin/main' into build/797-erase-no-regenerate
All checks were successful
CI / Does this change touch the recording path? (pull_request) Successful in 30s
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Has been skipped
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 1m3s
CI / Bot/backend version sync (pull_request) Successful in 1m18s
CI / Docker image build (pull_request) Successful in 1m24s
CI / Backend lint (ruff) (pull_request) Successful in 1m32s
CI / Bot tests and audit (pull_request) Successful in 2m3s
CI / Feedback site tests (pull_request) Successful in 2m7s
CI / Frontend tests, audit, and build (pull_request) Successful in 5m28s
CI / End-to-end journeys (desktop, phone, keyboard-only) (pull_request) Successful in 7m48s
CI / Backend migration, tests, and audit (pull_request) Successful in 11m6s
9733a494fe
Sign in to join this conversation.
No description provided.