From 4093293009f46077c68266da971d3447a154ee27 Mon Sep 17 00:00:00 2001 From: wtclaude Date: Wed, 19 Aug 2026 01:31:16 -0500 Subject: [PATCH] fix(kit): what installing the template into a real core showed The template was built into a running core - MariaDB, the real loader, a browser - and both halves of the walk passed: core reconciled two Teams out of the provider on the first boot, /public/teams//members came back with projected:true, and the clan page rendered core's activity feed and forum in the two slots this module declared. That last one is the whole point of the phase: a module whose id is not "uo" now gets core's Team content, which is what website#160 fixed. module-uo's own guild page was walked on the same core and is unchanged. Two things the walk found, both of the kind only a browser can: PageHeader takes `lead`, not `subtitle`. The template has been passing subtitle since it was written, and an unknown prop on a React component is silently dropped - so every page built from this template rendered its heading with nothing under it, on a site where every core page has a line there. Nothing warns anywhere. Fixed on all three pages, and chapter 2 now says to check prop names against 3.4 rather than guessing them, beside the paragraph about `shell` that exists for exactly the same reason. "1 members" on the clan list. Co-Authored-By: Claude --- book/02-website-module.md | 8 ++++++++ template/client/src/routes/public/Clan.jsx | 2 +- template/client/src/routes/public/Clans.jsx | 6 ++++-- template/client/src/routes/public/WorldStatus.jsx | 7 ++++++- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/book/02-website-module.md b/book/02-website-module.md index 46ec21c..cbda1f5 100644 --- a/book/02-website-module.md +++ b/book/02-website-module.md @@ -566,6 +566,14 @@ That paragraph exists because the kit's acceptance run ([`kit-acceptance.md`][acceptance]) built a module by following this chapter to the letter, and its page rendered outside the site. Everything else it wrote was right. +**And check a component's prop names against [§3.4][api] rather than guessing +them.** `PageHeader` takes `eyebrow`, `title`, `lead` and `center` — a page that +passes `subtitle` renders its heading and nothing under it, because an unknown +prop on a React component is silently dropped. Nothing warns, in the console or +anywhere else; the page simply looks emptier than every core page around it. This +template shipped exactly that mistake until a run of it against a real core was +looked at, which is the only way that class of thing is ever found. + **It is curated and closed, not a re-export of core's component library.** Adding to it is a minor version bump, and so is adding an optional prop to a member; changing an existing prop is a major one. diff --git a/template/client/src/routes/public/Clan.jsx b/template/client/src/routes/public/Clan.jsx index e9976d4..371c1dd 100644 --- a/template/client/src/routes/public/Clan.jsx +++ b/template/client/src/routes/public/Clan.jsx @@ -47,7 +47,7 @@ export default function Clan() { <> {/* Core's per-Team notification control lands here — ABOVE the roster, diff --git a/template/client/src/routes/public/Clans.jsx b/template/client/src/routes/public/Clans.jsx index 28ac029..0c098c5 100644 --- a/template/client/src/routes/public/Clans.jsx +++ b/template/client/src/routes/public/Clans.jsx @@ -18,7 +18,7 @@ export default function Clans() { return ( - + {loading && } {error && } @@ -34,7 +34,9 @@ export default function Clans() { {clan.name}{clan.abbr ? ` [${clan.abbr}]` : ''} - — {clan.memberCount} members + + {' '}— {clan.memberCount} member{clan.memberCount === 1 ? '' : 's'} + ))} diff --git a/template/client/src/routes/public/WorldStatus.jsx b/template/client/src/routes/public/WorldStatus.jsx index a4b1a67..346bf47 100644 --- a/template/client/src/routes/public/WorldStatus.jsx +++ b/template/client/src/routes/public/WorldStatus.jsx @@ -48,7 +48,12 @@ export default function WorldStatus() { {loading && }