Use when reviewing UI for accessibility — WCAG 2.2 AA, keyboard nav, focus, ARIA, contrast, screen-reader semantics — even on 'is this a11y-OK?' or 'mach das barrierefrei'.
日本語の概要は準備中です。原文の説明を表示しています。
Use when establishing what observability a project actually has — the four Golden Signals, required signal to detected implementation to evidence, and SLI/SLO provenance.
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Use when answering "what does this project actually have" for observability: which required signal exists, what implements it, and what evidence says so. Also when adding logging or wiring a monitoring stack — but the posture question comes first, because you cannot add the missing signal until you know which one is missing.
Do NOT use when:
alerting-doctrine)operational-readiness)grafana)dashboard-design)server-hardening)Four signals. The family is named in many places; these are the definitions. A posture report covers all four or records why it cannot — never four minus the inconvenient ones.
Measures how long a served request takes, split by outcome — successful and failed latency are different distributions, and averaging them hides both. Read it as percentiles (p50 / p95 / p99), never as a mean.
A missing one costs the ability to see degradation that is not yet an outage. The system is up, users are leaving, and every error-rate panel is green.
Typical detection paths — APM transaction traces, a request-duration histogram, reverse-proxy or load-balancer access logs, a middleware timer.
Measures demand on the system — requests per second, jobs enqueued, messages consumed, active sessions. The denominator every other signal needs.
A missing one costs all interpretation of the other three. Errors doubling is meaningless without knowing whether traffic doubled; a quiet incident and a quiet Sunday are indistinguishable.
Typical detection paths — a request counter, access-log volume, queue depth and enqueue rate, a CDN or gateway request metric.
Measures the rate of requests that failed — explicitly (a 5xx, a raised exception, a dead-lettered job) or implicitly (a 200 carrying a wrong body, a policy-violating success). Rate, not count.
A missing one costs the ability to distinguish a broken deploy from a slow one, and it is the signal most often mistaken for complete because an error-tracking SDK is installed. An exception tracker is not an error rate: it sees raised exceptions, not handled failures or wrong answers.
Typical detection paths — error-tracking SDK events, HTTP status
distribution, dead-letter queue depth, log-level counts at error and above.
Measures how full the constrained resource is — the one that runs out first. Connection pool, worker slots, disk, memory, file descriptors, a third-party rate-limit budget. Expressed against its ceiling, which means the ceiling has to be known.
A missing one costs every early warning. Saturation is the only one of the
four that is predictive: latency, traffic and errors report what already
happened, saturation reports what is about to. It is also the signal most often
absent entirely — see scale-discipline R-A12, which asks the finite-resource
question at review time.
Typical detection paths — pool-utilisation gauges, queue wait time (not depth), host memory and disk metrics, rate-limit headers from an upstream provider.
A number in a posture report is only as good as where it came from, and the failure this prevents is an agent-suggested SLO becoming a commitment nobody made. Provenance is part of the value, not a footnote.
| Provenance | Meaning | May be rendered as operational |
|---|---|---|
measured | Observed in running telemetry | Yes |
committed | Stated in a doc, contract or SLA, not yet verified | Yes, marked unverified |
proposed | The agent suggested it | Never |
unknown | Inspection could not establish a result | Never |
A proposed threshold stays proposed through every rendering. There is no
promotion path — not "it looks right", not "the user did not object". Promotion
requires a measurement or a stated commitment, which changes the provenance
first and the rendering second.
Two absences that are not the same thing, and collapsing them is how a gap becomes invisible:
unavailable — affirmatively established that the project cannot supply
this signal. Requires a non-empty reason. A recorded null.unknown — nobody looked, or the look was inconclusive. Never counts as
compliant, never counts as green, and is not a null — it is unfinished work.Reported signal count equals four minus the recorded unavailable nulls.
unknown reduces nothing; it is an open question.
config/logging.php in Laravel, LOGGING in
Django, winston/pino config in Node, config/environments in Rails),
then the metrics and APM wiring, then the dashboards and alert rules that
already exist. An installed SDK is evidence of a capability, never of a
signal — a Sentry integration does not give you latency percentiles.file:line, a dashboard panel, a metric name, a config key. A signal with no
artefact is unknown, not present.unavailable plus a reason. "No APM
configured, so no request-duration distribution exists" is a null. Silence is
not.alerting-doctrine consumes it to decide
what earns a page; operational-readiness consumes it as one input to a
go/no-go verdict. Neither re-derives it.unavailable with a
reason, or unknown. Four rows, always.proposed or unknown threshold is rendered as operational.unavailable rows carry a non-empty reason.error for handled conditions).unavailable nulls with their reasons, and the unknown rows as open
questions.Contract fixtures. Each pair differs only in the condition under test, and each case states the verdict it must produce. These are contract evidence for review, not an executable suite — no parser or runner reads them.
# malformed — logs and error tracking, no saturation anywhere.
# Scored as missing a signal, NOT as observable.
signals:
latency: { status: present, evidence: "APM: http.server.duration p95" }
traffic: { status: present, evidence: "nginx access log rate" }
errors: { status: present, evidence: "error-tracker project 41" }
# saturation omitted entirely
verdict: "missing-signal: saturation"
reason: "no pool, memory, disk or rate-limit utilisation metric detected"
# clean — the same project with the one signal supplied.
signals:
latency: { status: present, evidence: "APM: http.server.duration p95" }
traffic: { status: present, evidence: "nginx access log rate" }
errors: { status: present, evidence: "error-tracker project 41" }
saturation: { status: present, evidence: "db_pool_in_use / db_pool_size gauge" }
verdict: all-signals-detected
# malformed — an agent-suggested number rendered as a commitment.
slo:
name: checkout_availability
threshold: 99.9
provenance: proposed
operational: true # <- promotion with no measurement and no commitment
verdict: invalid-provenance
# clean — the suggestion stays a suggestion.
slo:
name: checkout_availability
threshold: 99.9
provenance: proposed
operational: false
verdict: valid-proposed-threshold
# malformed — a null with no reason is a silently dropped gap.
signals:
saturation: { status: unavailable }
verdict: invalid-unavailable-signal
# clean — the null carries why.
signals:
saturation:
status: unavailable
reason: "managed runtime exposes no pool or host metrics on this plan"
verdict: valid-unavailable-signal
Reached after detection, never before it. These are what a detected implementation looks like in one common stack; the neutral model above is what you reason from. Deep vendor material lives in the specialists, which this skill points at rather than absorbing.
| Tool | Signal it can carry | Reached by |
|---|---|---|
| Error tracker (Sentry) | errors (raised only) | sentry-integration |
| Grafana | any, if the metric exists | grafana, dashboard-design |
| Loki | errors and traffic via log volume | grafana |
| Slack webhook | none — a delivery channel | alerting-doctrine |
A delivery channel is not a signal. Slack carrying error-level messages tells you notifications work, not that an error rate exists.
A channel layout repeats across stacks whatever names it uses: a rotating file channel, an error-alert channel, an aggregation channel, and a composite that deliberately excludes the alert leg so a noisy job cannot page anyone. Aggregation labels carry app, service and environment; the service label is what separates log types in a query, and a workload needing its own labels gets its own scoped channel rather than a shared one. Which categories reach which channel is gated by config flags, not by call sites — so read the flags before concluding a category is unlogged.
→ Log levels, structured context, what to log, and error-tracker patterns:
guideline php/logging.md.
unknown, not present.snake_case.unavailable with a reason, or as unknown.proposed or unknown threshold as operational.unknown as green, compliant, or "probably fine".error level for expected, handled conditions.まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
Use when reviewing UI for accessibility — WCAG 2.2 AA, keyboard nav, focus, ARIA, contrast, screen-reader semantics — even on 'is this a11y-OK?' or 'mach das barrierefrei'.
日本語の概要は準備中です。原文の説明を表示しています。
Use when defining or auditing the activation event — aha-moment selection, retention correlation, falsifiable definition. Triggers on 'what is our aha moment', 'redefine activation'.
日本語の概要は準備中です。原文の説明を表示しています。
Use when capturing an architectural decision — file naming, next ADR number, Status / Context / Decision / Consequences, index regen; fires even without saying 'ADR'.
日本語の概要は準備中です。原文の説明を表示しています。
Adversarial critique — devil's advocate, stress-test, honest teardown ('poke holes', 'be brutal', 'was hältst du davon'); explicit request only. Routine code or design review → code-review.
日本語の概要は準備中です。原文の説明を表示しています。
Use when reading, creating, or updating agent documentation, module docs, roadmaps, or AGENTS.md. Understands the full .augment/, agents/, and copilot-instructions structure.
日本語の概要は準備中です。原文の説明を表示しています。
Use for an adversarial red-team / blue-team / auditor review of an AI agent's CONFIG + behaviour (rules, skills, MCP, hooks, permissions) — attack-chain → defensive-gap list, not a code audit.
日本語の概要は準備中です。原文の説明を表示しています。