Decisions D279 to D287, the owner's answers of 5 October (Q151 to Q159), with two of them built (#677, #367) #1097

Merged
claude-bot merged 3 commits from docs/decisions-d279-oct5 into main 2026-10-05 06:58:03 +00:00
Collaborator

Records the owner's answers of 2026-10-05 and builds the two that are small.

Decisions

Question Decided
D279 Q151 No 4.4.2 for the picture and import memory fixes (#1074, #1087, #1054); they reach prod with 4.5.0
D280 Q152 No one-off chown on prod and no 4.4.2 for the nginx limit (#1057, #1064); both arrive with 4.5.0
D281 Q153 A campaign import is a background job (#1054); the backend's limit stays 512 MB. Not built here
D282 Q154 The limits chosen on 4 and 5 October are confirmed as built
D283 Q155 The Workbench's run history never travels in an export (#1069)
D284 Q156 A too-large picture is shrunk, not refused; a ceiling still refuses (#1096). Not built here
D285 Q157 A campaign's owner also reads members' emails. Amends D275
D286 Q158 "Sweep the shelf…" wraps to two lines at 390 px; no change
D287 Q159 The map line comes out of the accessibility statement
  • Q160 (close #841) is not a design decision and has no row.
  • D275's row is kept, with "Amended by D285" appended, as D123's amendment was recorded.
  • Following #1060, operational answers are recorded with "—" as their surface.
  • The catalogue is rebuilt from sources (1,755 rows on 107 surfaces); all 16 coverage scripts report unclassified: none.

Built

  • D285 (#677): the owner reads members' emails. campaign_service.list_members also returns a member's email when the viewer is the campaign's owner, read from campaigns.owner_id at request time.
    • Every member response already goes through list_members (#1061), so no route changed.
    • A former owner loses it. An admin who is neither a GM nor the owner gets nothing new.
    • The Privacy page says "the GMs and the owner".
  • D287 (#367): the statement drops "The map". Four gaps remain; "Map markers" stays.
  • D283: docs/API.md and docs/OPERATIONS.md say the run history is not carried and what a GM kept from a run is.

Not changed

The README written into an export's zip. It notes binned pages and left-out files and does not list what is carried, so the Workbench sentence was not added there.

Changelog

  • changelog.d/677-owner-sees-member-emails.changed.md
  • changelog.d/367-statement-map-line.changed.md

Test plan

  • tests/test_campaigns.py, test_campaign_ownership.py, test_campaign_member_search.py: 230 passed.
    • The test that an owner who only plays does not read emails is flipped.
    • Added: a player who is not the owner sees only their own; a former owner sees only their own.
    • Failing first: with the owner check removed, the owner test fails and the other seven email tests pass.
  • Frontend: src/pages/Accessibility, Privacy, Members: 108 passed; eslint 0 errors.
  • Lint clean; version and changelog checks OK.
  • Full backend and frontend suites: CI.

To confirm

The surface ids on D284 (WIKI-11, a guess) and D286 (TABLE-1, copied from D276). The coverage scripts pass either way.

🤖 Generated with Claude Code

Records the owner's answers of 2026-10-05 and builds the two that are small. ## Decisions | | Question | Decided | |---|---|---| | D279 | Q151 | No 4.4.2 for the picture and import memory fixes (#1074, #1087, #1054); they reach prod with 4.5.0 | | D280 | Q152 | No one-off `chown` on prod and no 4.4.2 for the nginx limit (#1057, #1064); both arrive with 4.5.0 | | D281 | Q153 | A campaign import is a background job (#1054); the backend's limit stays 512 MB. Not built here | | D282 | Q154 | The limits chosen on 4 and 5 October are confirmed as built | | D283 | Q155 | The Workbench's run history never travels in an export (#1069) | | D284 | Q156 | A too-large picture is shrunk, not refused; a ceiling still refuses (#1096). Not built here | | D285 | Q157 | A campaign's owner also reads members' emails. **Amends D275** | | D286 | Q158 | "Sweep the shelf…" wraps to two lines at 390 px; no change | | D287 | Q159 | The map line comes out of the accessibility statement | - Q160 (close #841) is not a design decision and has no row. - D275's row is kept, with "Amended by D285" appended, as D123's amendment was recorded. - Following #1060, operational answers are recorded with "—" as their surface. - The catalogue is rebuilt from sources (1,755 rows on 107 surfaces); all 16 coverage scripts report `unclassified: none`. ## Built - **D285 (#677): the owner reads members' emails.** `campaign_service.list_members` also returns a member's email when the viewer is the campaign's owner, read from `campaigns.owner_id` at request time. - Every member response already goes through `list_members` (#1061), so no route changed. - A former owner loses it. An admin who is neither a GM nor the owner gets nothing new. - The Privacy page says "the GMs and the owner". - **D287 (#367): the statement drops "The map".** Four gaps remain; "Map markers" stays. - **D283:** `docs/API.md` and `docs/OPERATIONS.md` say the run history is not carried and what a GM kept from a run is. ## Not changed The README written into an export's zip. It notes binned pages and left-out files and does not list what is carried, so the Workbench sentence was not added there. ## Changelog - [x] `changelog.d/677-owner-sees-member-emails.changed.md` - [x] `changelog.d/367-statement-map-line.changed.md` ## Test plan - [x] `tests/test_campaigns.py`, `test_campaign_ownership.py`, `test_campaign_member_search.py`: `230 passed`. - The test that an owner who only plays does not read emails is flipped. - Added: a player who is not the owner sees only their own; a former owner sees only their own. - Failing first: with the owner check removed, the owner test fails and the other seven email tests pass. - [x] Frontend: `src/pages/Accessibility`, `Privacy`, `Members`: `108 passed`; eslint 0 errors. - [x] Lint clean; version and changelog checks OK. - [ ] Full backend and frontend suites: CI. ## To confirm The surface ids on D284 (`WIKI-11`, a guess) and D286 (`TABLE-1`, copied from D276). The coverage scripts pass either way. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
D285 amends D275 (the owner also reads members' email addresses).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
docs(webapp): the statement drops the map line (D287); the export's notes say the Workbench's runs are not carried (D283)
All checks were successful
CI / Bot/backend version sync (pull_request) Successful in 31s
CI / Does this change touch the recording path? (pull_request) Successful in 31s
CI / Synthetic session harness (no GPU, no LLM) (pull_request) Has been skipped
CI / Backend lint (ruff) (pull_request) Successful in 1m17s
CI / Feedback site tests (pull_request) Successful in 1m48s
CI / Summarisation accuracy eval harness (stub provider) (pull_request) Successful in 2m23s
CI / Docker image build (pull_request) Successful in 2m24s
CI / Bot tests and audit (pull_request) Successful in 4m5s
CI / Frontend (shard 1/2) (pull_request) Successful in 9m4s
CI / Frontend (shard 2/2) (pull_request) Successful in 12m4s
CI / End-to-end journeys (desktop) (pull_request) Successful in 10m55s
CI / End-to-end journeys (phone) (pull_request) Successful in 10m56s
CI / End-to-end journeys (keyboard) (pull_request) Successful in 11m58s
CI / Backend migration, tests, and audit (pull_request) Successful in 59m54s
8772279515
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude-bot deleted branch docs/decisions-d279-oct5 2026-10-05 06:58:05 +00:00
rbrooks referenced this pull request from a commit 2026-10-05 07:42:48 +00:00
Sign in to join this conversation.
No description provided.