Appearance
The five pillars
qa-harness audits the harness as five pillars. Each is a distinct concern with its own owning skill; the system-level bugs tend to live in the seams between them.
Context
The always-on footprint — every token that loads into each session and AI call: the authored part of CLAUDE.md, the path-scoped .claude/rules/, every skill's description (the / menu lists them all), and CONTEXT.md / SOUL.md. These compound, so leanness and cache-stability matter: never interpolate volatile data (a date, a branch, a count) into the stable base, or you bust the prompt cache every turn. Context splits two ways: static (always-on, paid every turn) and dynamic (on-demand — skill bodies, path-scoped rules, docs/agents/* references). Which side a thing lands on is a deliberate add-time decision — default to dynamic, justify static — not just cleanup the trim pass does later. That's context as code. Owned by optimise-context. Its inverse is the Fresh Session Test — could a cold agent orient from the repo alone?
Tools
The skill set itself: every skill on the verb taxonomy, its contract declared, no near-duplicates, no dead skills, MCP tools risk-tiered. Curated beats maximal — a skill you fire twice a year is debt. Owned by qa-skills; candidates for adoption are judged by vet.
Memory
Durable, recallable lessons in docs/learnings/, so the next task starts from what the last one learned instead of rediscovering it. The store has a decay path — entries graduate into rules or get archived. Owned by find-learnings. See Memory.
Guardrails
The safety layer: tiered surface-then-confirm (reads free, writes gated), the CI gate and Definition of Done, and circuit-breakers where loops can run away. See Guardrails.
Specialists
Subagents that earn their isolation — for independence or a clean context, never for throughput — read-only where they judge, with orchestrators that synthesise their findings rather than relay them. See Agents & specialists.
The seams
A rule that contradicts a skill; two skills that overlap; the taxonomy doc disagreeing with the actual roster. qa-harness checks the pillars and the seams between them; the deterministic floor underneath it is php artisan harness:check.