Build lane 8: the wiki (WIKI-1 to WIKI-3, WIKI-5 to WIKI-18) #734

Closed
opened 2026-09-22 00:12:25 +00:00 by claude-bot · 7 comments
Collaborator

Build lane 8 of the v4.5.0 redesign. The brief is docs/design/v4.5.0-brief.md (§9, the lanes in order); the build plan is docs/design/v4.5.0-build-plan.md (the rollout rule, the design-system mapping, the journeys as tests). Umbrella: #366. Goes after lane 7.

Scope

Surfaces: WIKI-1 to WIKI-3 and WIKI-5 to WIKI-18: the front page and search, People and the other kinds, an article, editing, a new page, draft review, Suggested wiki updates, the party, quests, the map, handouts, Rules & bestiary, Wiki health, Recent changes, History.
The drawing: /feedback/prototype/lane6b, lane6c and lane6d — the page the build must match, still by still.
Decisions: the brief §7, and each surface's header in redesign-surfaces/sources/headers.md.

Server changes it needs (in this lane or an earlier one)

  • blocks in text (IS-028, IS-127); disambiguation and the bare-name page (IS-399, D72); one Save for the page; facts and timelines on every kind
  • deleted articles restore; the map's trail and markers; quest objectives; handout posting to Discord (D61); History for anyone who may edit (D69)

Acceptance

  • Every placement coverage/lane6b.py, coverage/lane6c.py and coverage/lane6d.py classifies as drawn or replaced is built as the prototype draws it; the script is the checklist. Rows it marks behaviour are tested, not drawn.
  • J5 (suggested wiki updates) and J6 (a player reads the wiki) pass on desktop, on a phone and keyboard-only in the journeys suite (#726), with the axe scan clean (WCAG 2.2 AA, #367).
  • The brief's vocabulary (§5) throughout, from vocabulary.js; no page-level error destroys rendered content; every async operation shows progress and a next action on failure; disabled controls say why.
  • Main stays deployable after every PR of the lane: the new shell carries the old pages until each is replaced (the rollout rule).
  • The surfaces' headers in redesign-surfaces/sources/headers.md (Decided lines and the owner's review notes) are honoured; a departure is a decision change on #659 first.

Notes

  • The stat block on a page stays today's form in this lane; lane 11 replaces it with the sheet's projection (D74).

🤖 Generated with Claude Code

**Build lane 8 of the v4.5.0 redesign.** The brief is `docs/design/v4.5.0-brief.md` (§9, the lanes in order); the build plan is `docs/design/v4.5.0-build-plan.md` (the rollout rule, the design-system mapping, the journeys as tests). Umbrella: #366. Goes after lane 7. ## Scope **Surfaces:** WIKI-1 to WIKI-3 and WIKI-5 to WIKI-18: the front page and search, People and the other kinds, an article, editing, a new page, draft review, Suggested wiki updates, the party, quests, the map, handouts, Rules & bestiary, Wiki health, Recent changes, History. **The drawing:** `/feedback/prototype/lane6b`, `lane6c` and `lane6d` — the page the build must match, still by still. **Decisions:** the brief §7, and each surface's header in `redesign-surfaces/sources/headers.md`. ## Server changes it needs (in this lane or an earlier one) - blocks in text (`IS-028`, `IS-127`); disambiguation and the bare-name page (`IS-399`, D72); one Save for the page; facts and timelines on every kind - deleted articles restore; the map's trail and markers; quest objectives; handout posting to Discord (D61); History for anyone who may edit (D69) ## Acceptance - [ ] Every placement `coverage/lane6b.py`, `coverage/lane6c.py` and `coverage/lane6d.py` classifies as **drawn** or **replaced** is built as the prototype draws it; the script is the checklist. Rows it marks **behaviour** are tested, not drawn. - [ ] J5 (suggested wiki updates) and J6 (a player reads the wiki) pass on desktop, on a phone and keyboard-only in the journeys suite (#726), with the axe scan clean (WCAG 2.2 AA, #367). - [ ] The brief's vocabulary (§5) throughout, from `vocabulary.js`; no page-level error destroys rendered content; every async operation shows progress and a next action on failure; disabled controls say why. - [ ] Main stays deployable after every PR of the lane: the new shell carries the old pages until each is replaced (the rollout rule). - [ ] The surfaces' headers in `redesign-surfaces/sources/headers.md` (Decided lines and the owner's review notes) are honoured; a departure is a decision change on #659 first. ## Notes - The stat block on a page stays today's form in this lane; lane 11 replaces it with the sheet's projection (D74). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Author
Collaborator

An inheritance from J6: the wiki is a dead end on a phone

Found by J6 (#770), which walks the wiki as a player. Naming it here because WIKI-1 and WIKI-2 are this lane's and the fix belongs in the rebuild, not in a journeys PR.

The category rail is hidden md:flex — WikiFront.jsx:298 and WikiArticle.jsx:1867 — so below 768px it is not rendered.

On the front page that is survivable: search lives in the main column, which is where #396 moved it. J6 therefore reaches an entry by searching, and passes on all three projects.

On an article it is not survivable. The rail is that page's only navigation surface and it is where the article page's own copy of the search lives (WikiArticle.jsx:1871). So on a phone, once a player is on a wiki entry there is no wiki navigation and no wiki search at all — the only way to another entry is the browser's Back button.

That is a step strictly harder on a phone than with a mouse, which is a regression against the brief's own bar:

A build that makes one of them harder than today is a regression whatever else it improves. (§2)

and against §3.1's phone-first constraint.

What this lane inherits: whatever WIKI-1/WIKI-2 draw for navigation has to work below 768px, and the article page needs a way onward that is not the rail. J6 will keep walking this path, so the journey will tell you if the rebuild reintroduces it — but it will pass today, because it uses the front page's search rather than the article's.

🤖 Generated with Claude Code

## An inheritance from J6: the wiki is a dead end on a phone Found by J6 (#770), which walks the wiki as a player. Naming it here because WIKI-1 and WIKI-2 are this lane's and the fix belongs in the rebuild, not in a journeys PR. The category rail is `hidden md:flex` — `WikiFront.jsx:298` and `WikiArticle.jsx:1867` — so below 768px it is not rendered. On the **front page** that is survivable: search lives in the main column, which is where #396 moved it. J6 therefore reaches an entry by searching, and passes on all three projects. On an **article** it is not survivable. The rail is that page's only navigation surface **and** it is where the article page's own copy of the search lives (`WikiArticle.jsx:1871`). So on a phone, once a player is on a wiki entry there is **no wiki navigation and no wiki search at all** — the only way to another entry is the browser's Back button. That is a step strictly harder on a phone than with a mouse, which is a regression against the brief's own bar: > A build that makes one of them harder than today is a regression whatever else it improves. (§2) and against §3.1's phone-first constraint. **What this lane inherits:** whatever WIKI-1/WIKI-2 draw for navigation has to work below 768px, and the article page needs a way onward that is not the rail. J6 will keep walking this path, so the journey will tell you if the rebuild reintroduces it — but it will pass today, because it uses the front page's search rather than the article's. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Author
Collaborator

Inherited from lane 3: Settings → the wiki's rules (CAMP-14), #779

Owner, 2026-09-23: this lane builds it. Lane 3 couldn't: who may edit the wiki is hard-coded in _can_edit_lore_entry, and reputation levels are stored nowhere, so a form for either would save nothing (D36).

What it takes is in #779:

  • edit-permission modes as a campaign setting, enforced in every wiki write path
  • a suggest-for-approval queue, sharing WIKI-10's
  • stored reputation levels

The page itself is small once that exists: flip built for wiki in shell/settingsSections.js and add the section, following CampaignSettingsGeneral.jsx.

🤖 Generated with [Claude Code

## Inherited from lane 3: Settings → the wiki's rules (CAMP-14), #779 **Owner, 2026-09-23: this lane builds it.** Lane 3 couldn't: who may edit the wiki is hard-coded in `_can_edit_lore_entry`, and reputation levels are stored nowhere, so a form for either would save nothing (D36). What it takes is in #779: - edit-permission modes as a campaign setting, **enforced** in every wiki write path - a suggest-for-approval queue, sharing WIKI-10's - stored reputation levels The page itself is small once that exists: flip `built` for `wiki` in `shell/settingsSections.js` and add the section, following `CampaignSettingsGeneral.jsx`. 🤖 Generated with [Claude Code
Author
Collaborator

From lane 4's J5 (#820), for this lane: J5 follows "Suggested wiki updates → Review them" to /campaigns/{id}/wiki/proposals and deliberately stops at the door without an axe scan. That page (WikiProposals.jsx) fails WCAG 1.4.3 colour contrast in three places:

  • the sky link, at 2.17:1;
  • the amber h2, at 1.72:1;
  • the emerald buttons, at 3.3:1.

The rebuild should clear them, and J5 can then scan through the door.

Also worth a look while rebuilding the flow: the lore task waits a fixed 60 s (countdown=60) before consolidating, so every wiki run takes at least a minute.

🤖 Generated with Claude Code

**From lane 4's J5 (#820), for this lane:** J5 follows "Suggested wiki updates → Review them" to `/campaigns/{id}/wiki/proposals` and deliberately stops at the door without an axe scan. That page (`WikiProposals.jsx`) fails WCAG 1.4.3 colour contrast in three places: - the sky link, at 2.17:1; - the amber h2, at 1.72:1; - the emerald buttons, at 3.3:1. The rebuild should clear them, and J5 can then scan through the door. Also worth a look while rebuilding the flow: the lore task waits a fixed 60 s (`countdown=60`) before consolidating, so every wiki run takes at least a minute. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Author
Collaborator

Lane 8, wave 1 started (2026-09-26). It follows D165 (W1: three waves, all in v4.5.0).

PR 1 is in progress on build/lane8-1-wiki-text, stacked on lane 7 (#846) because it needs audience_service:

  • wiki_text.py: blocks, one renderer, merge;
  • page audiences (D166);
  • notes → blocks in entries and versions;
  • every body reader converted;
  • the crawl test;
  • "This page isn't shared with you" (D167);
  • migration 8a1b2c3d4e5f.

The decisions are all recorded: D165–D169, D192–D199 and D219.

**Lane 8, wave 1 started (2026-09-26).** It follows D165 (W1: three waves, all in v4.5.0). **PR 1 is in progress** on `build/lane8-1-wiki-text`, stacked on lane 7 (#846) because it needs `audience_service`: - `wiki_text.py`: blocks, one renderer, merge; - page audiences (D166); - notes → blocks in entries and versions; - every body reader converted; - the crawl test; - "This page isn't shared with you" (D167); - migration `8a1b2c3d4e5f`. **The decisions are all recorded:** D165–D169, D192–D199 and D219.
Author
Collaborator

2026-09-28 progress:

  • Merged: #909 (#896: handout take-back deletes Discord posts and DMs, one take-back path, faces) and #910 (P5, the party and quests).
  • In CI: #911 (P3, the editor, with main merged in and the App.jsx route conflict with P5 resolved; vitest passes 2695) and #913 (#912: a player can't rename an item that isn't identified yet).
  • Building: P6 (handouts and rules).
  • Still to do: P4 (drafts, suggestions, health), P7 (the map pages), lane 8's journeys PR and the demo seed.
  • Owner questions are on the morning page: P5a, P5b, P3a and P3b.
2026-09-28 progress: - **Merged:** #909 (#896: handout take-back deletes Discord posts and DMs, one take-back path, faces) and #910 (P5, the party and quests). - **In CI:** #911 (P3, the editor, with main merged in and the App.jsx route conflict with P5 resolved; vitest passes 2695) and #913 (#912: a player can't rename an item that isn't identified yet). - **Building:** P6 (handouts and rules). - **Still to do:** P4 (drafts, suggestions, health), P7 (the map pages), lane 8's journeys PR and the demo seed. - **Owner questions** are on the morning page: P5a, P5b, P3a and P3b.
Author
Collaborator

Picking up lane 8's demo seed (2026-09-29), on branch build/demo-seed-lanes-8-10, together with lane 10's recording tests. It covers:

  • parties;
  • quest facts and objectives;
  • handouts and reveals, with no files that point at nothing;
  • maps, if they can be seeded without tiles;
  • markers;
  • drafts and suggestions, where they're new.

Each new row gets a line in the README coverage table and a count in tests/test_demo_seed.py. As before: nothing goes out, and no real accounts are touched.

Picking up **lane 8's demo seed** (2026-09-29), on branch `build/demo-seed-lanes-8-10`, together with lane 10's recording tests. It covers: - parties; - quest facts and objectives; - handouts and reveals, with no files that point at nothing; - maps, if they can be seeded without tiles; - markers; - drafts and suggestions, where they're new. Each new row gets a line in the README coverage table and a count in `tests/test_demo_seed.py`. As before: nothing goes out, and no real accounts are touched.
Author
Collaborator

Closing with the v4.5.0 milestone (owner, 17 Oct 2026). The owner signed this lane off on 5 Oct, and it shipped in 4.5.0 on 12 Oct; fixes found on prod since went into 4.5.1 to 4.5.3.

Closing with the v4.5.0 milestone (owner, 17 Oct 2026). The owner signed this lane off on 5 Oct, and it shipped in 4.5.0 on 12 Oct; fixes found on prod since went into 4.5.1 to 4.5.3.
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
rbrooks/Quest-Board#734
No description provided.