Skill anatomy · shared/ · 2026-09-08
One invocation of /coverage --mode aat walks ten stages. Every stage is plain
bash orchestrated by SKILL.md; only two stages hand work to an LLM sub-agent. Everything a stage
reads comes from shared/, resolved once at S0 into $SHARED.
shared/ touched by one AAT runshared/ total — 16 belong to other modes or post-run rollupsLocates the service repo, the AAT suite and the report directory; pins one timestamp and one discovery model for the whole run; hard-stops if any helper is missing rather than failing stage by stage.
/tmp/coverage-<ns>-env.sh — the state file every later block sourcesApollo subgraphs mis-score near 0% because the reconciler cannot attribute
POST /graphql scenarios to label-based resolver triggers. Those services are named in data and
stopped here instead of producing a misleading report.
Looks for a cached ledger and claims for this exact commit pair, then proves they are usable
with a trial reconcile to /dev/null. A stale or fabricated document is a cache miss here rather
than a crash three stages later.
Checks the report directory for this service/commit pair. No shared helper involved — pure git and filesystem, so a re-run of an unchanged service costs nothing.
Extracts the trigger set with no LLM: Spring and .NET route annotations
(including mappings declared on an implemented interface), minimal-API registrations,
@KafkaListener/IConsumer listeners with SpEL topic resolution, and scheduled jobs.
Also inventories every feature file and its scenario count so S3 can be batched and checked for truncation.
Runs only when a full S2 would otherwise be needed. Diffs the service commit against the cached ledger's commit and reuses every effect from an untouched file, so discovery re-analyses changed code only.
Sub-agents walk the service source and record every observable effect behind each trigger — HTTP responses, published events, persisted rows, outbound calls. The pinned model does this work; the denominator policy that decides which effects are even coverable lives in data, not in the prompt.
ledger.json — the denominatorBatched by feature file, using S1's scenario counts to catch a truncated return. Each claim names the ledger effect a scenario drives and the citation that proves it; ignored and disabled scenarios are detected by documented rules rather than guessed at.
claims.json — the numeratorThe only place coverage arithmetic happens. Claims are matched against ledger effects, rejected if they cite the wrong branch or a value the scenario never asserted, and the denominator is trimmed by the mode's observation channels. The verifier also records which model actually ran, versus the pin.
Composes the report paths once, writes machine-readable metrics, renders Markdown to a
standalone HTML file with pandoc, injects the chart, then commits and pushes to the coverage repo under
reports/<domain>/<service>/.
<report>.md + <report>.html + metrics.json, committed and pushed6 files · used by /contract-coverage
7 files · run after many reports exist
3 files · one-off or manual
Around all of it: SKILL.md is a single 1,037-line orchestrator (~105 KB) holding
every bash block, the report template and the prompts; shared/tests/ adds 13 pytest modules and 31
reference-fixture files that pin the reconciler's behaviour, and scripts/bulk-aat.sh drives the skill
across a service list. Neither the tests nor the batch driver are read during a run.