5.9 KiB
Phase 7 — Skills & anti-drift guardrails
Depends on: Phase 1 (rules) and Phase 3 (reality) · Can run before or after Phase 6 · Size: one session
Goal
Two things:
- Skills that match reality. The one existing skill was written before the UI overhaul; parts of it describe an app that no longer exists.
- Guardrails so this doesn't happen again — the reason the cleanup was needed at all.
The division of labour, restated: a rule is a constraint that must never break → docs/rules/.
A skill is a procedure for a recurring task → .claude/skills/. If you're writing "always do X",
it's a rule. If you're writing "to do X: first…, then…", it's a skill.
Inputs
- .claude/skills/frontend-designer/SKILL.md — 21 KB, 10 sections (brand, tokens, typography, component library, layout, icons, hard rules, workflow, anti-patterns, Figma)
docs/rules/— Phase 1's output, so the skill can stop restating rules and link insteaddocs/flows/— Phase 3's output, especiallytesting-setup.mdand the mock-vs-real map- The client code as it is after iterations 1–2
- .githooks/pre-commit (3.4 KB) + .githooks/README.md
client/package.jsonscripts (check,lint:copy,test:ci) and the server's build/test commands
Outputs
.claude/skills/
frontend-designer/SKILL.md rewritten against current reality
backend-feature/SKILL.md NEW — adding a feature to the .NET server
flow-testing/SKILL.md NEW — boot, seed, and walk a flow end-to-end
Updated: .githooks/pre-commit, docs/rules/documentation.md (Phase 1 wrote the convention; this
phase adds the enforcement note), and status-doc headers.
Steps
1. Rewrite frontend-designer
Reality-check every section against the code, then rewrite. Specifically at risk (confirm each):
- §5 Layout & page shells — the app is now mobile-scoped: a max-width container so the shell never stretches on desktop, and the nurse side moved from a drawer to a bottom navigation with grouped root pages that summarize their domain. Any desktop-sidebar guidance is obsolete except where admin still uses one.
- §6 Icons — the icon set was replaced wholesale in iteration 1. The old mapping guidance is dead.
- §2 Design tokens / §3 Typography — check against the current theme, including the reduced Paper border-radius.
- §7 Non-negotiable rules — most of these are now rules, not skill content. Cut them down to
a link into
docs/rules/client/, keeping only what's design-specific. - §1 Brand / §4 Component library — verify the
App*inventory againstclient/src/components/(which currently holds ~40 feature components in addition to the shared kit). - Add what's missing: forms are react-hook-form now, so the "build a form" procedure changes; and theme/language switches live only in settings, not in top bars.
Target: shorter than the current 21 KB, because the rules half moves out.
2. Write backend-feature
The procedure for adding a feature to the server, derived from how the 199 handlers are actually
shaped: where the command/query goes, the handler and validator, the DTO, the controller action, the
EF configuration and migration, the tests, and the doc updates it must trigger
(docs/integration/domains/<domain>.md + the OpenAPI snapshot). Link to docs/rules/server/ for
constraints; keep the skill to the sequence.
3. Write flow-testing
The procedure a session follows to actually exercise a flow: boot both sides per
docs/flows/testing-setup.md, get an OTP, log in as the right seeded account, walk the flow, and —
importantly — check the mock-vs-real map first so a "working" flow isn't just a mock answering.
Include the reseed step for when the time-relative scenarios age out.
4. Extend the pre-commit hook
Read the existing hook first and match its style. Add warnings, not blocks — a hook that blocks commits gets bypassed, and then it protects nothing.
Warn when:
- files under
server/src/**/Controllers/**or**/Handlers/**changed but nothing underdocs/integration/did → "API surface changed — updatedocs/integration/domains/…and refresh the OpenAPI snapshot." client/src/services/**changed but nodocs/integration/ordocs/flows/change → "a service domain changed — does a flow doc need updating?"- a file under
docs/status/ordocs/flows/is committed with aLast verified:date more than ~30 days old → "this doc claims to be verified as of ." - root
CLAUDE.md,client/CLAUDE.md, orserver/CLAUDE.mdexceeds its line budget → "the rulebook is regrowing; move reference material todocs/rules/."
Document each warning in .githooks/README.md and in docs/rules/documentation.md.
5. Stamp the freshness convention
Ensure every file under docs/status/ and docs/flows/ carries
> Last verified: <date> against <commit> as its second line, and that
docs/rules/documentation.md names exactly which files must carry it and who updates it.
Verification
- No sentence in
frontend-designerdescribes pre-iteration-1/2 behaviour — spot-check the layout, icon, and form sections against real components. - No skill restates a rule that
docs/rules/owns; each links instead. - The three skills' trigger descriptions don't overlap (a task should match exactly one).
- The pre-commit hook runs and its new warnings fire on a deliberate test commit — and never block one.
- Every
docs/status/anddocs/flows/file has aLast verified:line.
Definition of done
The skills describe the app that exists, and the next time someone changes an endpoint without touching a doc, something says so.
Handoff
(filled in by the agent that runs this phase)