aeon-skill-evals · git:20260512.9addfe3 · 2026-05-12 · sha256 d432adddee6c72ee

aeon-skill-evals git:20260512.9addfe3A

Immutable. This exact content is served forever at /api/v1/blob/d432adddee6c72ee.

---
name: aeon-skill-evals
description: |
  Validate skill outputs against assertion manifests, diff vs prior runs to flag regressions, file
  issues for new failures, queue concrete fixes. Production-grade quality net for the skill catalog.
  Use for continuous quality monitoring, pre-deploy gates on new skill variations, or triage source
  for systemic catalog issues.
  Triggers: "evaluate my skills", "check skill output quality", "regression scan", "bootstrap evals
  for skill X", "which skills are failing assertions".
---

# aeon-skill-evals

Quality net for the skill catalog. Each skill can declare an assertion manifest — pattern matches, word-count floors, forbidden phrases, required structure. Every run's output is checked against the manifest; failing assertions produce regression alerts and queued fixes routed to `aeon-skill-repair`.

The job isn't to prevent bad output. It's to catch it the moment it ships and route the fix before a human notices.

## Manifest format

```yaml
# evals.json (or YAML)
token-movers:
  min_words: 200
  required_patterns:
    - "Top movers"
    - "24h"
  forbidden_patterns:
    - "I cannot"
    - "as an AI"
  output_pattern: "memory/logs/*.md"
  min_distinct_tokens: 5
  must_cite_source: true

narrative-tracker:
  min_words: 400
  required_patterns:
    - "TRANSITIONS"
    - "MAP"
  required_sections:
    - "transitions"
    - "positions"
  forbidden_patterns:
    - "exciting"
    - "consider"
  must_have_position_call: true
```

Assertion types: minimum/maximum word counts, required substrings, forbidden phrases, output-shape regex, source-citation requirements, deduplication minimums, per-section presence checks, position-call requirements.

## Regression detection

Compares the current run's assertion-pass set against the prior run's:

| State | Meaning | Action |
|---|---|---|
| **NEW_FAIL** | Passing last run, failing now. | File an issue; severity scales with prior pass streak. |
| **NEW_PASS** | Failing last run, passing now. | Close the open issue, log the win. |
| **CHRONIC** | Failing > 3 consecutive runs. | Escalate severity, recommend `enabled: false` until repair. |
| **STABLE_FAIL** | Always failing. | Don't re-file; flag as known issue needing redesign. |

## Issue filing

For each `NEW_FAIL`, files a structured issue:

```yaml
---
id: ISS-104
title: "token-movers: forbidden 'as an AI' matched in output"
status: open
severity: medium
category: quality-regression
detected_by: aeon-skill-evals
detected_at: 2026-05-12
affected_skills: [token-movers]
---

## Failing assertion
forbidden_patterns: "as an AI"

## Where it appeared
memory/logs/2026-05-12.md, line 42 of token-movers output

## Pass streak before failure
17 consecutive runs

## Recommended next
aeon-skill-repair --target=token-movers (category: prompt-bug)
```

## Bootstrap mode

Pointed at a skill with no manifest:

| Field | How bootstrapped |
|---|---|
| Word-count floor | p25 of historical successful runs. |
| Required patterns | Most common section headers in recent successful outputs. |
| Forbidden patterns | Default list (refusals, hedging filler, hallucination markers). |
| Output pattern | The skill's actual write target. |

Proposed manifest is presented as a PR for review, never auto-committed.

## Output

```
*Skill Evals — 2026-05-12*

47 skills checked
  42 PASS
  3 NEW_FAIL — issues filed
  2 NEW_PASS — issues closed
  5 CHRONIC — operator review recommended
  1 coverage gap (no manifest)

NEW_FAIL details
  token-movers — forbidden "as an AI" matched (3-line refusal in output)
    Pass streak before failure: 17 runs
    Severity: medium (regression, not always-broken)
    Filed: ISS-104, recommended next: aeon-skill-repair --target=token-movers

  daily-routine — required pattern "Top tokens" absent (output truncated)
    Pass streak before failure: 8 runs
    Severity: medium
    Filed: ISS-105, recommended next: aeon-skill-repair --target=daily-routine

  narrative-tracker — min_words 400 not met (actual 220 — empty signals day)
    This may be expected on a quiet day; flagged as intermittent.

NEW_PASS
  github-trending — back to passing after autoresearch evolution last week. ISS-098 closed.
  paper-pick — back to passing after repair PR #412 landed. ISS-101 closed.

CHRONIC — recommend operator review
  ai-framework-watch (4 runs failing): required pattern "watchlist" absent
  ...

Coverage
  46/47 skills have manifests; bootstrap recommended for: spawn-instance
```

## Pipeline integration

- **Downstream of:** any skill that writes output.
- **Upstream of:**
  - `aeon-skill-repair` (uses failing assertions as fix targets).
  - `aeon-skill-health` (consumes pass-rate over time).
  - `aeon-operator-scorecard` (weekly synthesis input).

## Guidelines

- Assertions are observations, not specifications. Bootstrap from real output, don't write speculatively.
- Forbidden patterns catch hallucination markers and refusals — keep the list tight.
- Chronic failures get escalated, not re-filed.
- Manifest changes go through PR, never inline.
- Coverage gaps (skills without manifests) are surfaced separately — they're a different problem from failures.

## Pairs with

- `aeon-skill-repair` (downstream — fixes the failures).
- `aeon-autoresearch` (when failures are quality-regression, not deterministic).