feat: declare rust as the module's identity capability (phase 5, D16)
#5
Reference in New Issue
Block a user
No description provided.
Delete Branch "feat/phase-5-capability"
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?
The one thing phase 5 needs from this repo, ahead of the Android leg itself.
Why a sixth capability
The Android app gates a whole navigation group on one capability string —
module-uo's five shard rows all hang onshard, because that is the only question a capability can answer: is the module there. This module declared five strings and every one of them names a surface (servers,killfeed,leaderboard,presence,wipes).That is not enough to gate on. Core flattens every started module's capabilities into a single list, so
serversis a generic word another module could declare tomorrow — and the app would silently render Rust screens on a site that does not run Rust.rustis the string only this module can mean.Why it is not redundant with
idWorth writing down before somebody tidies it away, so the README now does:
idis a mount prefix. §2.1 requires it to equal the directory core loads the module from.MODULE_API.md§2.9 forbids a client inferring a route from a capability. Gating onidwould quietly make the two the same thing, and the day a client builds/<id>/serversfrom it, the contract that lets this module move its own pages is gone.What is in the diff
module.json—rustfirst incapabilities.server/test/entry.test.js— a test asserting the identity capability is declared and equalsmanifest.id, so a future id change cannot strand the string the app gates on.README.md— a short "What a client feature-detects on" section under What ships today.No route changes, so no swagger regeneration and no frozen-manifest churn. 102 server tests pass.
Note on the base branch
This targets
edge, notmain. The org lead moved all three Rust repos ontoedgefor the rest of the workstream (2026-09-16);pr-checks.ymlhere already triggers on[main, edge], andrelease.ymlstill fires only on a push tomain, so releases come at the cutover rather than per phase.AI disclosure
🤖 Generated with Claude Code
https://claude.ai/code/session_016wDDVXWMDz82WqE1i969r4
rustas the module's identity capability