docs(shard): record the REST projection gap the Part A smoke test found #65
Reference in New Issue
Block a user
No description provided.
Delete Branch "docs/shard-visibility-rest-projection"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What & why
Docs for RunicGateway/website#110. The live five-rung smoke test of the Protocol 3.0 Part A visibility framework found that it was enforced on the SSE path and on
/guilds+/governors, but not on the remaining public REST reads — so one event was projected live and served verbatim from stored history.link/v3.mdacct/webIdleak on/feed, the flattenedownerAccton/idoc, the deadhousesfield rules,/feedignoring live config, the empty-allowlist fall-through, and theDate→{}projection bug. Each is recorded as a shape the next phase can repeat.projectFeatureis a bug, and every new surface (/ruleset,/points,/market,/atlas) must gate its kind set on live config rather than onPUBLIC_KINDS.PUTrejects flattened locked spellings too.website/BACKEND_DESIGN.md§6.5The same, as a security contract: rule 1 locks a field by meaning, not spelling;
PUBLIC_KINDSis a module-load constant and must not answer per-caller questions (usevisibleKinds); every read path must project; an emptykindsallowlist serves nothing;projectFeaturewalks arrays and plain objects only.website/SHARD_VISIBILITY.mdThe admin-facing version — that stored history answers the same way the live stream does (so raising a rung hides it from both, with no back door where yesterday's copy of an event is more revealing than today's), and that turning live updates off stops the push, not the reading.
How it was tested
Docs only — no code. Every claim was verified live against the running site during the smoke test that produced website#110; the §3.6.1 list is the set of gaps that walk actually found, and each one's fix is verified in that PR.
Checklist
AI-assisted contributions (required)
Claude Code (Opus 5). I have reviewed and understand every change, and take responsibility for it. AI-authored commits are marked with aCo-Authored-Bytrailer.License
The live five-rung smoke test of the visibility framework found that Part A enforced it on the SSE path and on /guilds + /governors, but not on the remaining public REST reads - so one event was projected live and served verbatim from stored history. link/v3.md gains 3.6.1 with the full list (the anonymous acct/webId leak on /feed, the flattened ownerAcct on /idoc, the dead `houses` field rules, /feed ignoring live config, the empty-allowlist fall-through, and the Date-to-{} projection bug), plus the rule it leaves behind: a read path that returns shard data and does not project is a bug, and every new Part B/C surface must gate its kind set on live config rather than on PUBLIC_KINDS. 3.5 also corrected: the table is NOT seeded on boot. An absent row means "use the compiled default", which keeps the defaults in one place instead of duplicating them into a seeder that could drift. BACKEND_DESIGN.md 6.5 records the same as a security contract: rule 1 locks a field by meaning rather than spelling; PUBLIC_KINDS is a module-load constant and must not answer per-caller questions; projectFeature walks arrays and plain objects only. SHARD_VISIBILITY.md gets the admin-facing version - that stored history answers the same way the live stream does, and that turning live updates off stops the push, not the reading. Co-Authored-By: Claude <noreply@anthropic.com>