agentsclimarketplace

Critic instrumentation

Skill iampawan/Manifest/skills/critic-instrumentation

Critic that ensures every behavior carries an analytics event and that success metrics map to a fireable event. The keystone for post-launch verification. Invoked by contract-verify.From its SKILL.md

Install
npx -y skills add iampawan/Manifest --skill critic-instrumentation

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 5 stars5 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

4.5 KB, as published. Nobody here has run it

Instrumentation coverage critic

Protocol: Follow reference/CRITIC-RULES.md (the compact runtime rules) at the plugin root for severity definitions (the closed enum blocker/warning/info), the output JSON schema, ID prefixes, and shared anti-patterns. This skill defines only WHAT to look for. Do not invent severities like "high"/"medium" — the validator rejects them. Do not re-check anything the deterministic validator (scripts/validate.mjs) already covers; add the judgment layer on top.

The single most important critic. If this doesn't pass, the post-launch report cannot run, and you can't say whether the feature landed.

What to check

1. Every behavior has a measurement plan

Each ### B<N> block must declare ONE of the following — the plan for how this behavior will be measured post-launch:

# Option A: Client-side analytics event (preferred when project has
# Firebase Analytics, Amplitude, etc.)
- instrumentation:
    source: firebase-analytics       # or amplitude / segment
    eventName: snake_case_name
    properties: [prop_a, prop_b]
    expectedRatePerDay: <integer>

# Option B: Server-side structured log event (when no client analytics)
- instrumentation:
    source: server-log
    logger: "audit"                   # logger name / channel
    eventName: snake_case_name
    fields: [user_id, action, ...]
    expectedRatePerDay: <integer>

# Option C: Database-derived metric (for record-count behaviors)
- instrumentation:
    source: database
    dbQuery: "SELECT count(*) FROM payment_methods WHERE created_at > NOW() - INTERVAL '1 day'"
    expectedRatePerDay: <integer>

# Option D: Sentry release adoption (for "no regression" metrics)
- instrumentation:
    source: sentry-release
    releaseTag: <release-id>
    metric: error_rate | adoption_pct | p95_latency
    target: < 0.5%                    # or whatever budget

# Option E: Manual reporting (lowest-quality fallback)
- instrumentation:
    source: manual
    rationale: "No measurement infra; PM reports weekly in Slack thread"
    cadence: weekly

If missing → blocker with suggestion. The suggestion should default to the source the project actually has — read the project's .manifest/repos.yml to learn what's connected. Don't propose Firebase Analytics if the project doesn't use it.

The measurement plan is what the launch-report reads to know how to verify the feature post-launch. Manual reporting is acceptable but lower-quality — the launch report will note that the verdict is based on manual input.

2. Every success metric maps to a real eventName

Each entry in ## Success metrics must reference an eventName that exists in at least one behavior's instrumentation. Cross-reference and flag any orphan metrics.

3. The event isn't already in use for something else

If you have access to the repository, grep for the proposed eventName across the codebase. If it already exists with different semantics, flag it as a blocker — the team must rename or reuse intentionally.

# Example grep patterns (via Bash tool):
rg "track\(['\"]<eventName>" --type ts --type js
rg "logEvent\(['\"]<eventName>" --type swift --type kotlin
rg "amplitude\.logEvent\(['\"]<eventName>"

4. Properties follow conventions

  • All snake_case.
  • Required identity property if user-scoped (user_id should be auto-set by the SDK; don't ask the behavior to set it).
  • For revenue / conversion events, include amount and currency.

5. Expected rate is reasonable

If expectedRatePerDay is unrealistically high or low relative to the product's traffic (use Amplitude/Firebase Analytics MCP to ballpark current event volumes if available), warn.

Severity

  • blocker — missing instrumentation on a behavior, or success metric with no matching event.
  • warning — naming collision, non-conformant properties, missing identity property.
  • info — naming style nits, suggested additional properties.

Output

Same JSON array shape as other critics.

Why this critic is special

The orchestrator (contract-verify) treats every blocker from this critic as a hard gate. A contract cannot reach verified without instrumentation on every behavior. This is intentional — it forces the discipline that makes post-launch verification possible.

Keep looking

Skills are one crate of 627,801. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.