@mutagent/evaluator 0.1.0-alpha.4 → 0.1.0-alpha.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/skills/mutagent-evaluator/SKILL.md +6 -5
- package/.claude/skills/mutagent-evaluator/assets/agents/evaluator.md +76 -12
- package/.claude/skills/mutagent-evaluator/assets/code-quality-criteria.yaml +75 -0
- package/.claude/skills/mutagent-evaluator/lenses/methodology-critic-lens.md +1 -1
- package/.claude/skills/mutagent-evaluator/references/edd-loop.md +6 -6
- package/.claude/skills/mutagent-evaluator/references/eval-stage.md +36 -3
- package/.claude/skills/mutagent-evaluator/references/memory-format.md +1 -1
- package/.claude/skills/mutagent-evaluator/references/operation-inventory.md +1 -0
- package/.claude/skills/mutagent-evaluator/schemas/methodology-review.schema.yaml +1 -1
- package/.claude/skills/mutagent-evaluator/scripts/agent-dispatch.ts +0 -0
- package/.claude/skills/mutagent-evaluator/scripts/build-review-ui.ts +320 -6
- package/.claude/skills/mutagent-evaluator/scripts/cli/audit-run.ts +6 -3
- package/.claude/skills/mutagent-evaluator/scripts/cli/prep.ts +32 -2
- package/.claude/skills/mutagent-evaluator/scripts/cli/profile-subject.ts +1 -1
- package/.claude/skills/mutagent-evaluator/scripts/code-quality-verdict.ts +277 -0
- package/.claude/skills/mutagent-evaluator/scripts/config/schema.ts +3 -3
- package/.claude/skills/mutagent-evaluator/scripts/contracts/eval-matrix.ts +39 -0
- package/.claude/skills/mutagent-evaluator/scripts/determine-outcome.ts +8 -0
- package/.claude/skills/mutagent-evaluator/scripts/edd/change-request.ts +1 -1
- package/.claude/skills/mutagent-evaluator/scripts/edd/edd-types.ts +2 -2
- package/.claude/skills/mutagent-evaluator/scripts/judge-prompt-template.ts +144 -15
- package/.claude/skills/mutagent-evaluator/scripts/memory/append.ts +1 -1
- package/.claude/skills/mutagent-evaluator/scripts/memory/ratify.ts +165 -0
- package/.claude/skills/mutagent-evaluator/scripts/persist-eval-criteria.ts +232 -0
- package/.claude/skills/mutagent-evaluator/scripts/prep-tasks.ts +15 -4
- package/.claude/skills/mutagent-evaluator/scripts/read-manifest.ts +120 -0
- package/.claude/skills/mutagent-evaluator/scripts/read-unitf-traces.ts +34 -2
- package/.claude/skills/mutagent-evaluator/scripts/render-build-cards.ts +37 -0
- package/.claude/skills/mutagent-evaluator/scripts/render-eval-report.ts +9 -91
- package/.claude/skills/mutagent-evaluator/scripts/report-fragments.ts +173 -0
- package/.claude/skills/mutagent-evaluator/scripts/route-failures.ts +14 -4
- package/.claude/skills/mutagent-evaluator/scripts/run-deterministic.ts +114 -18
- package/.claude/skills/mutagent-evaluator/scripts/run-pipeline.ts +39 -4
- package/.claude/skills/mutagent-evaluator/scripts/subject-profile.ts +82 -0
- package/.claude/skills/mutagent-evaluator/scripts/sync-eval-criteria.ts +244 -0
- package/.claude/skills/mutagent-evaluator/scripts/unitf-to-evaltrace.ts +64 -21
- package/bin/mutagent-cli.mjs +659 -8
- package/package.json +2 -2
|
@@ -23,7 +23,7 @@ license: Proprietary. LICENSE.txt has complete terms.
|
|
|
23
23
|
compatibility: Designed for Claude Code, Codex, Cursor, OpenCode and similar coding-agent runtimes; works with git, gh CLI, jq, curl, and Bun/pnpm/npm runtimes.
|
|
24
24
|
metadata:
|
|
25
25
|
author: mutagent
|
|
26
|
-
version: "0.1.0-alpha.
|
|
26
|
+
version: "0.1.0-alpha.4"
|
|
27
27
|
# allowed-tools: OMITTED — agent uses all native tools per host runtime
|
|
28
28
|
---
|
|
29
29
|
|
|
@@ -103,7 +103,7 @@ reason for the rest. NEVER improvise.
|
|
|
103
103
|
| `*discover-evals` | hybrid | `references/workflows/orchestrator-protocol.md` + `scripts/prep-tasks.ts` + `scripts/determine-outcome.ts` + `scripts/discover-criteria.ts` + `assets/agents/evaluator.md` (`#mode-discover`) | PREP determiner tasks → fan out `evaluator` (`#mode-discover`, mass-parallel) → AGGREGATE ✓/✗ → mine emergent BINARY ACTIONABLE criteria (EV-041/042/052) **+ T6 failure/uncertain DATASET CANDIDATES** (`collectDatasetCandidates`, reuses the derive-dataset selectors → `*build-dataset`). **GA split** — **code:** sample (broken+healthy) · aggregate · `diff-discriminate` · ground-gate · dataset-candidates; **LLM leaf:** determine + 3 detectors + cite refs + typed assumptions (root-not-symptom). |
|
|
104
104
|
| `*build-evals` | hybrid | `references/workflows/orchestrator-protocol.md` + `scripts/eval-engine.ts` + `scripts/codegen-evals.ts` + `scripts/prep-tasks.ts` + `scripts/build-evals.ts` + `assets/agents/evaluator.md` (`#mode-judge-criterion`) + `scripts/render-build-cards.ts` | **ENGINE-FORK FIRST (ADL F7/F9/F14).** ASKS the eval implementation mode via `chooseEvalEngineOptions(target)` — Path A `native-matrix` (eval-matrix + LLM-judge SUB-AGENTS; SURFACES the Claude-Code + log-sink dependency up front) vs Path B `code-written` (`codegen-evals.ts` emits a portable bun/TS suite — runs WITHOUT Claude Code, F14). Target-conditional: a code framework offers BOTH, a `harness:*` target is native-only. **Path A** then PREPs judge tasks (criterion × trace-slice) → fan out `evaluator` (`#mode-judge-criterion`, mass-parallel) → one binary+confidence judge per criterion (EV-043). **GA split** — **code:** engine-resolve · spec render · `lint-grounding` · `resolve-ref` (BIND) · codegen; **LLM leaf:** judge + VERIFY (cite refs · note assumptions · abstain). Streams progress + a verbose evals entity card (F13/F16/F22). |
|
|
105
105
|
| `*evaluate` | hybrid | `references/workflows/orchestrator-protocol.md` + `scripts/matrix-judge.ts` + `scripts/contracts/eval-matrix.ts` + `assets/agents/evaluator.md` (`#mode-judge-trajectory`) + `scripts/evaluate.ts` | **DEFAULT (headline):** **T1 TIER-0 deterministic pre-pass** (code-method rows run first, zero judge tokens) → PREP one matrix packet per RESIDUAL judge trajectory (**T5 adaptive-K guard, default 1:1**) → fan out `evaluator` (`#mode-judge-trajectory` — one judge/trajectory scoring the WHOLE matrix, emitting the **T2 Judge DAG v2 walk** = `judge_steps[]` + dense na-explicit map + confidence band + early-INCOMPLETE + node-2.5 candidates) → AGGREGATE: fold code+judge verdicts → **T3 independent verifier** refutes GATING fails (downgrade-only) → **T4 consolidate-by-locus + walk-derived health** → GATE verdict + variance view (EV-048). **GA split** — **code:** tier-0 · prep · `lint-grounding` · `resolve-ref` · `assemble-scorecard` (gate `fail ▸ incomplete ▸ pass`) · consolidate-by-locus · route-failures; **LLM leaf:** trajectory judge (DAG v2 walk: BIND · GROUND[absence-split] · cite · abstain) + independent VERIFY. **MAY now return `incomplete`** (indeterminate → calibrate). **ADL F20:** the rollup ALSO renders a SCORECARD DASHBOARD wireframe (`renderScorecardDashboard` — per-criterion pass/fail bar + variance + samples), not a flat terminal dump. Under a **Path B** engine, `*evaluate` instead runs the portable `codegen-evals.ts` suite (no Claude Code) and reads back its scorecard JSON from the discoverable sink. |
|
|
106
|
-
| `*
|
|
106
|
+
| `*optimize` | hybrid | `references/edd-loop.md` + `scripts/edd/variance-gate.ts` + `scripts/edd/change-request.ts` + `scripts/edd/edd-types.ts` + `schemas/edd-change-request.schema.yaml` + `assets/agents/evaluator.md` (`#mode-optimize`) | **ADL ③ OPTIMIZE / EDD loop (F18+F19).** **F19 VARIANCE-FIRST:** repeat-N (default 5) the SAME cases → `evaluateVarianceGate` → accuracy is entered ONLY when the variance gate passes (`assertVarianceStableBeforeAccuracy` THROWS otherwise — "accuracy over big samples is wasted on a flapping verdict"). **F18 CLOSURE:** still JUDGE-ONLY (EV-051), the evaluator emits a grounded `EddChangeRequest` (failing cases + `ref{obs,path,value}` + remedy target `agentspec`\|`impl`) to the `mutagent-builder ai-engineer` over **SendMessage**, consumes the `ChangeRequestResponse`, and re-evals on `amended`. **Bounded terminator** (`decideEddLoop`, afkloop-legal): `full-green` ▸ DONE \| `max-swings`\|`max-wallclock`\|`no-improvement-streak` ▸ STOPPED + convergence delta. **GA split** — **code:** variance gate · request/response validate · loop terminator (all PURE, injected wall-clock); **LLM leaf:** localize the flap/fail to its root + author the grounded request + decide remedy target. |
|
|
107
107
|
| `*validate` | hybrid | `scripts/validate-judge.ts` + `references/validate-evaluator.md` + `assets/agents/evaluator.md` (`#mode-judge-criterion`) | **ENGINED (EV-044)** — calibrate a judge vs `*review` labels: confusion matrix → TPR/TNR · split-disjointness + test-once · Rogan-Gladen θ · deterministic bootstrap CI; `<MIN_LABELS` stays `unvalidated`+bias-corrected. **GA split** — **code:** entire path is deterministic (filter EXCLUDES indeterminate · confusion · RG · assumption-agreement). |
|
|
108
108
|
| `*review` | hybrid | `scripts/build-review-ui.ts` + `references/build-review-interface.md` | **ENGINED (EV-045)** — CODE renders a browser annotation UI (one trace/screen · Pass/Fail/Defer · keyboard · auto-save · labels export); **HITL**: a human labels → `mergeLabels` persists → feeds `*validate`. |
|
|
109
109
|
| `*eval` | agent-chain | `references/eval-stage.md` + `scripts/eval-engine.ts` + `scripts/materialize-dataset.ts` + `scripts/render-build-cards.ts` | **THE ADL EVAL-STAGE ENTRY (F15).** Called after `*build` hands a freshly-built agent + its agentspec. INTERACTIVELY offers `*build-dataset` / `*build-evals` derived from `agentspec.definition.evals`, and lets the user PICK THE EVAL ENGINE (mutagent native eval-matrix [Path A] vs code-written-in-target-lang [Path B]) via the target-conditional menu (`chooseEvalEngineOptions`). Surfaces Path A's Claude-Code + log-sink dependency UP FRONT (F7/F9). Streams wireframe progress + entity cards (F13/F16/F22). Parent-session only (AskUserQuestion). |
|
|
@@ -138,7 +138,7 @@ When you encounter a *<name> token:
|
|
|
138
138
|
Invoke me with:
|
|
139
139
|
- `evaluate skill <name>` / `evaluate agent <name>` / `/mutagent-evaluator` → **`*evaluate`** (default)
|
|
140
140
|
- `*discover-evals` (mine criteria) · `build evals for <x>` · `validate judge <x>` · `*audit <subject>` (explicit only)
|
|
141
|
-
- `*
|
|
141
|
+
- `*optimize` (the ADL ③ EDD loop — variance-first then request-amend-reeval to full green, bounded)
|
|
142
142
|
- `*self-audit` (the eval-of-the-eval — audit my OWN eval-dev; on-demand only)
|
|
143
143
|
- borrowed by `mutagent-skill-builder` SIMULATE (SimVerifier role)
|
|
144
144
|
- `--reconfigure` to re-enter onboarding (subject + substrate)
|
|
@@ -151,7 +151,7 @@ Minimal eval-dev spine (build order — do NOT reorder):
|
|
|
151
151
|
*discover-evals → deep-read traces, determine ✓/✗, mine 5-10 binary actionable criteria
|
|
152
152
|
*build-evals → one critique-before-verdict judge (or code-check) per criterion
|
|
153
153
|
*evaluate → run vs target → per-criterion binary+confidence → GATE verdict + variance
|
|
154
|
-
*
|
|
154
|
+
*optimize → ADL ③ EDD loop: F19 variance-first (stabilize per-case spread, repeat-N)
|
|
155
155
|
BEFORE accuracy, then F18 closure (judge-only REQUESTS the ai-engineer to
|
|
156
156
|
amend agentspec|impl over SendMessage → re-eval) → full green OR bounded STOP
|
|
157
157
|
```
|
|
@@ -159,7 +159,7 @@ Minimal eval-dev spine (build order — do NOT reorder):
|
|
|
159
159
|
`*validate` (calibrate the judge) layers on top. `*audit` (the v1 4-tab master-audit) is an
|
|
160
160
|
**explicit-only** specialized surface (complex / HTML-artifact subjects) — NOT part of the default
|
|
161
161
|
evaluate spine and never an automatic fallback.
|
|
162
|
-
`*
|
|
162
|
+
`*optimize` is the OPTIMIZE stage — it runs AFTER an initial `*build` + `*evaluate` and is **bounded**
|
|
163
163
|
(never infinite): full-green ⇒ DONE; else max-swings / max-wallclock / no-improvement ⇒ STOP + delta.
|
|
164
164
|
|
|
165
165
|
**ADL EVAL-stage entry (`*eval`).** When `*build` hands over a freshly-built agent +
|
|
@@ -276,6 +276,7 @@ applies, EV-053/EQ5):
|
|
|
276
276
|
| `scripts/aggregate-discover.ts` | P2 (§5a) + §9.4 (T6) | code | The real `*discover-evals` AGGREGATE half: parse the leaf's per-trace verdict files + per-batch mining report → `TraceAnnotation[]` (FAIL-LOUD via `missingVerdictKeys`; THROW on an undispatched-trace category ref) → `deriveMinedCriteria` (§5b metadata + §5c DR-2) → `growLivingSuite` (append-only, monotonic, saturation-stop). **T6:** `collectDatasetCandidates` (failure/uncertain → `DatasetCase[]` via the derive-dataset selectors) + `unmatchedDetectionCandidates` (the `*evaluate` judge's node-2.5 handoff) → consumable by `*build-dataset`. `DiscoverMiningReport` contract. No hand-rolled annotations. |
|
|
277
277
|
| `scripts/code-eval.ts` | P3 (EX-2) | code | The v2 CODE-track primitive library — generic PURE `(trace) → {result, detail}` checks: presence · string-equality · format-validity · schema-conformance · ref-integrity (cross-stage). SV-1 dotted-path read incl. `obs:<name>.<path>`. Exhaustive `runCodeEval` (unknown primitive → THROW). NO LLM, byte-identical. Disjoint from the v1 `run-deterministic.ts` audit world. |
|
|
278
278
|
| `scripts/check-method-router.ts` | P3 (EX-2) | hybrid | THE load-bearing §5b `check_method` router: `deterministic`→CODE-EXEC (judge NEVER called) · `llm-judge`→JUDGE seam · `hybrid`→code pre-filter that GATES the judge. Unknown → THROW (exhaustive). `RoutedCriterionVerdict` = `CriterionVerdict` + provenance `{producedBy, codeResult, judgeReached}` (structural superset → `evaluate.ts` rollup unchanged). `extractCodeEval(registry)` fail-loud (a code-class criterion with no spec THROWS — never silently judge). "Code before judge" lives INSIDE the agent. |
|
|
279
|
+
| `scripts/code-quality-verdict.ts` | W2I1 (⑤ OPTIMIZE) | hybrid | The **code-quality JUDGE mode** (`#mode-judge-code-quality`) — the (b) half of the ⑤ OPTIMIZE code-target BOTH-gate. Scores a `code` subject's QUALITY (spec-faithfulness · addresses-diagnosis · no-regression · error-handling · maintainability) BEYOND tests-green → severity-gated binary PASS/FAIL. `buildCodeQualityPrompt` (pure renderer, critique-before-verdict) + `codeQualityGatePass` (pure aggregate) + `runCodeQualityJudge` (C-PIN run wrapper on the injected JudgeInvoke seam). Judge-only (EV-051), host-runtime, pinned model + temp 0. **DISTINCT from `code-eval.ts`** (deterministic primitives — no LLM). `DEFAULT_CODE_QUALITY_CRITERIA` + its aggregation rule are FLAGGED-for-operator-sign-off. |
|
|
279
280
|
| `scripts/run-evaluate.ts` | P5 + §9.4 (T1·T3·T4·T5) | hybrid | The real-engine `*evaluate` end-to-end COMPOSER: `tier0Plan` (T1 — code rows decided in the pre-pass, residual judge rows only in packets) → `prepMatrixPackets` (residual-only) → `adaptivePacketPlan` (T5 overload guard, default 1:1) → [dispatch #mode-judge-trajectory] → `aggregateEvaluate` (FAIL-LOUD readiness gate over DISPATCHED ids → `aggregateMatrixScorecard` folding code+judge + T3 `independentVerify` downgrade-only on gating fails → GATE + variance → T4 `consolidateByLocus` lociClusters → EV-051 `routeFailures`→validated HandoverBundle). `maskedScorecard` = the C-PIN byte-identity artifact. |
|
|
280
281
|
| `scripts/render-eval-report.ts` | P4 (D-1/2/3) | code | The v2 reporting (v1 `render-report.ts` untouched): `renderEvalCards` (D-1 terminal per-criterion cards) + `buildEvalReportInput` (derives the rich tabs from real run data — ledger · coverage · cohorts · gating rolls · top-findings · judge-health) + `renderEvalReport` (the operator-APPROVED 5 tabs: ① Overview KPIs+coverage+gating-table+top-findings · ② Trajectory‖Judge ledger + click-row Target-Agent‖Judge side-by-side · ③ Eval Scorecard cohort heatmap + nested subcards + inline calibration · ④ Findings verbatim-evidence + judge chain + agree/revise/refute · ⑤ Self-Eval [INTERNAL, strip-marked]). Consumes the §9.4 judge-walk (`judge_steps[]` + dense map) when present, degrades to the per-trajectory scorecard otherwise. Tabs are `<button>` (no `<s>` strikethrough). Unified design-system tokens (`assets/brand/theme.css`). byte-identical after the `generatedAt` mask. `autoOpenCommand` cross-platform helper (orchestrator fires it). |
|
|
281
282
|
| `scripts/contracts/eval-types.ts` *(extended)* | P2/P2b | code | + `MinedCriterion` (additive subtype of `DiscoveredCriterion`) carrying the §5b `MetricMetadata` (generality·dimension·level·check_method [3-value SF-2 router]·substrate·applies_to·severity·judge_inputs·flag) + the §5c `DiscoveryRationale` (DR-2: targets·why·evidence{grounding observed\|inferred·prevalence k/n·refs}·assumptions·expected_impact). `parseMinedCriterion` enforces the evidence-first gate (OBSERVED ⇒ refs + k>0). |
|
|
@@ -20,9 +20,9 @@ ACTIVATION-NOTICE: This file contains your full agent operating guidelines. Read
|
|
|
20
20
|
class: pure_subagent_executor
|
|
21
21
|
isolation: none
|
|
22
22
|
|
|
23
|
-
modes: [discover, judge, verify,
|
|
23
|
+
modes: [discover, judge, verify, optimize] # discover · judge · verify (GA-5) · optimize (EDD ③ — F18/F19)
|
|
24
24
|
judge_axes: [trajectory, criterion] # judge-mode fan-out axes
|
|
25
|
-
# `
|
|
25
|
+
# `optimize` is the ADL ③ OPTIMIZE / Eval-Driven-Development (EDD) LOOP mode (F18+F19). It is a MODE of
|
|
26
26
|
# this ONE agent (the roster stays 3) — it drives the variance-first gate (F19) then, while still
|
|
27
27
|
# JUDGE-ONLY (EV-051), REQUESTS the mutagent-builder ai-engineer to amend the Agent/AgentSpec (F18) over
|
|
28
28
|
# SendMessage and re-evals, bounded by an afkloop-legal terminator. It NEVER fixes the subject itself.
|
|
@@ -456,9 +456,9 @@ commands:
|
|
|
456
456
|
- "emit verified verdict (never flip, never fix)"
|
|
457
457
|
preserves: "the GA-5 result-verifier contract (scripts/result-verify.ts verifyVerdict / verifyVerdicts) — see '## Mode: verify' below. A MODE of evaluator, not a 4th registered agent (grounded-adjudication.md sign-off c4)."
|
|
458
458
|
|
|
459
|
-
# F18+F19: the ADL ③
|
|
459
|
+
# F18+F19: the ADL ③ OPTIMIZE / Eval-Driven-Development loop. A MODE of evaluator (roster stays 3),
|
|
460
460
|
# not a new subagent. JUDGE-ONLY held: this mode REQUESTS the engineer to fix; it never patches.
|
|
461
|
-
-
|
|
461
|
+
- optimize:
|
|
462
462
|
meta:
|
|
463
463
|
what: "Drive the EDD loop: variance-first (F19) → REQUEST the builder ai-engineer to amend (F18) → re-eval → bounded terminate."
|
|
464
464
|
does: "After the initial *build, FIRST stabilizes per-case VARIANCE (repeat-N the SAME cases, default 5; gate the spread) BEFORE measuring accuracy. While JUDGE-ONLY (EV-051), emits a structured EddChangeRequest (failing cases + grounded refs + remedy target agentspec|impl) to the mutagent-builder ai-engineer over SendMessage; consumes the ChangeRequestResponse; re-evals; loops to full green OR a bounded STOP."
|
|
@@ -466,7 +466,7 @@ commands:
|
|
|
466
466
|
how: "scripts/edd/variance-gate.ts gates variance (evaluateVarianceGate · nextPhaseAfterVariance · assertVarianceStableBeforeAccuracy); scripts/edd/change-request.ts is the seam + the bounded terminator (buildChangeRequest · validate{Change,Response} · reEvalWarranted · decideEddLoop). The eval-runner (sibling) is consumed via the clean interface (references/edd-loop.md §Assumed eval-runner interface) — this mode REBUILDS no runner."
|
|
467
467
|
display: "The EDD loop — variance-first, then request-amend-reeval to full green (bounded)"
|
|
468
468
|
description: |
|
|
469
|
-
PURPOSE: the ADL ③
|
|
469
|
+
PURPOSE: the ADL ③ OPTIMIZE stage. Drive the subject to full green via the
|
|
470
470
|
Eval-Driven-Development loop — F19 VARIANCE-FIRST (stabilize per-case spread
|
|
471
471
|
BEFORE accuracy) then F18 EDD CLOSURE (REQUEST the builder ai-engineer to amend the
|
|
472
472
|
Agent/AgentSpec, re-eval, repeat) — bounded by an afkloop-legal terminator.
|
|
@@ -475,11 +475,11 @@ commands:
|
|
|
475
475
|
JUDGE-ONLY (EV-051): this mode NEVER edits the subject — it emits a grounded
|
|
476
476
|
EddChangeRequest over SendMessage and re-evals what the engineer amends.
|
|
477
477
|
NEVER self-dispatches the engineer's fix; NEVER skips re-eval on an amend.
|
|
478
|
-
dispatch: { mode:
|
|
478
|
+
dispatch: { mode: optimize }
|
|
479
479
|
pre_gate.loads:
|
|
480
480
|
- "references/edd-loop.md" # the F18/F19 loop doctrine + assumed eval-runner interface
|
|
481
481
|
- "references/grounded-adjudication.md" # GA doctrine: every failing-case ask is grounded (≥1 ref)
|
|
482
|
-
- "references/workflows/orchestrator-protocol.md" # the
|
|
482
|
+
- "references/workflows/orchestrator-protocol.md" # the optimize dispatch step
|
|
483
483
|
workflow:
|
|
484
484
|
- "Pre-read references/edd-loop.md (the EDD doctrine + the assumed eval-runner interface) + references/grounded-adjudication.md"
|
|
485
485
|
- "PHASE = variance (F19): for each case run repeat-N (default 5) via the eval-runner; collect per-case CaseVarianceObservation {verdicts[], trajectories?}"
|
|
@@ -496,7 +496,7 @@ commands:
|
|
|
496
496
|
- "build GROUNDED change-request (failing cases + remedy target) — judge-only, request-not-patch"
|
|
497
497
|
- "SendMessage to ai-engineer · consume response · re-eval on amend"
|
|
498
498
|
- "bounded terminator (decideEddLoop): full-green ▸ DONE | swings/wallclock/no-improve ▸ STOPPED+delta"
|
|
499
|
-
preserves: "JUDGE-ONLY (EV-051) — the
|
|
499
|
+
preserves: "JUDGE-ONLY (EV-051) — the optimize mode REQUESTS a fix and re-evals; it never edits the subject. The amend is the mutagent-builder ai-engineer's job (the ONE agent allowed to touch the Agent/AgentSpec). See '## Mode: optimize' below."
|
|
500
500
|
|
|
501
501
|
resolution_contract: |
|
|
502
502
|
When you encounter a *<name> token:
|
|
@@ -507,7 +507,8 @@ resolution_contract: |
|
|
|
507
507
|
mode: judge, axis: trajectory => run #mode-judge-trajectory (preserves eval-matrix-judge); input is a .packet.json.
|
|
508
508
|
mode: judge, axis: criterion => run #mode-judge-criterion (preserves eval-judge); input is a .task.json.
|
|
509
509
|
mode: verify => run #mode-verify (GA-5 result-verifier; reviewer≠judge, downgrade-only); input is a decided verdict + its situation.
|
|
510
|
-
mode:
|
|
510
|
+
mode: optimize => run #mode-optimize (EDD ③ loop — F19 variance-first then F18 request-amend-reeval, bounded). JUDGE-ONLY: REQUEST, never patch.
|
|
511
|
+
mode: judge, axis: code-quality => run #mode-judge-code-quality (Wave-2 W2I1 — score a CODE subject's QUALITY for the ⑤ OPTIMIZE code-target BOTH-gate). JUDGE-ONLY; binary quality PASS/FAIL. Rubric mirrored in scripts/code-quality-verdict.ts.
|
|
511
512
|
4. DISPATCH-INPUT DISAMBIGUATION — the parent hands you files:
|
|
512
513
|
a *.packet.json (MatrixPacket) => judge/trajectory, ALWAYS (matrix-judge path; no unit field).
|
|
513
514
|
a *.task.json (JudgeTaskSpec) => unit.kind: "discover" => discover; else unit.axis: "criterion" => judge/criterion.
|
|
@@ -948,9 +949,9 @@ registered subagent** (the roster stays evaluator · dataset-builder · audit-ex
|
|
|
948
949
|
- **Feeds the gate:** a downgraded CRIT/HIGH verdict makes the run **INCOMPLETE** (the ternary gate
|
|
949
950
|
`fail ▸ incomplete ▸ pass`) — the latent false-green killer.
|
|
950
951
|
|
|
951
|
-
## Mode:
|
|
952
|
+
## Mode: optimize ← EDD ③ OPTIMIZE loop (F18 closure + F19 variance-first)
|
|
952
953
|
|
|
953
|
-
THE **Eval-Driven-Development loop** — the ADL ③
|
|
954
|
+
THE **Eval-Driven-Development loop** — the ADL ③ OPTIMIZE stage. After the initial `*build` +
|
|
954
955
|
`*evaluate`, this mode drives the subject to **full green**. It is a **MODE of `evaluator`, not a new
|
|
955
956
|
registered subagent** (the roster stays evaluator · dataset-builder · audit-executor). It backs
|
|
956
957
|
`scripts/edd/variance-gate.ts` (F19) + `scripts/edd/change-request.ts` (F18). It stays **JUDGE-ONLY
|
|
@@ -1012,7 +1013,7 @@ never re-implements, the runner. The interface this mode ASSUMES (documented ver
|
|
|
1012
1013
|
### Governing invariants (must survive any merge)
|
|
1013
1014
|
|
|
1014
1015
|
- `variance_before_accuracy` (F19): "Stabilize per-case variance (repeat-N, default 5) BEFORE measuring accuracy. The accuracy phase is entered ONLY when the variance gate passes (`assertVarianceStableBeforeAccuracy` THROWS otherwise). Accuracy over big samples is wasted on a flapping verdict."
|
|
1015
|
-
- `judge_only_requests_never_patches` (F18 · EV-051): "The
|
|
1016
|
+
- `judge_only_requests_never_patches` (F18 · EV-051): "The optimize mode REQUESTS the builder ai-engineer to amend (over SendMessage) and re-evals what is amended. It NEVER edits the subject/spec/source itself — the mutagent-builder ai-engineer is the ONE agent allowed to touch the Agent/AgentSpec."
|
|
1016
1017
|
- `grounded_change_request` (F18 · GA-1): "Every failing case in a change-request carries the verbatim critique + ≥1 structured ref{obs,path,value}. An ungrounded ask fails loud (`validateChangeRequest`)."
|
|
1017
1018
|
- `remedy_target_def_vs_impl` (F18): "The evaluator PROPOSES where the fix belongs — `agentspec` (the DEFINITION is wrong → def→impl cascade via *build) vs `impl` (a wiring/faithfulness defect). It proposes; the engineer decides + may reject with a reason."
|
|
1018
1019
|
- `reeval_always_follows_amend` (F18): "An `amended` response ALWAYS triggers a fresh evaluation swing (from the variance phase). There is no 'fixed it, trust me, skip re-eval' path. A `rejected` response never re-evals an unchanged subject."
|
|
@@ -1029,6 +1030,69 @@ never re-implements, the runner. The interface this mode ASSUMES (documented ver
|
|
|
1029
1030
|
C-PIN (pinned model + temperature 0).
|
|
1030
1031
|
- **Additive to the runner:** consumes the assumed eval-runner interface; rebuilds nothing.
|
|
1031
1032
|
|
|
1033
|
+
## Mode: judge — axis code-quality ← the ⑤ OPTIMIZE code-target quality verdict (Wave-2 W2I1)
|
|
1034
|
+
|
|
1035
|
+
The **(b) half of the ⑤ OPTIMIZE loop's code-target BOTH-gate.** For a `code`-kind subject, "converged"
|
|
1036
|
+
requires BOTH (a) the subject's OWN test suite green — a hard DETERMINISTIC gate the ai-engineer
|
|
1037
|
+
reports and the optimize oracle records as `testsGreen` — AND (b) THIS code-quality verdict passing.
|
|
1038
|
+
This mode is (b): score the QUALITY of the applied code change, BEYOND tests-green (a deterministic
|
|
1039
|
+
primitive cannot decide spec-faithfulness, scope, error-handling, maintainability — a judge must).
|
|
1040
|
+
|
|
1041
|
+
### What it does (per dispatch)
|
|
1042
|
+
|
|
1043
|
+
Judge the CODE subject (the amend diff / scaffold against the agentspec definition it must realize)
|
|
1044
|
+
on the DRAFT criteria set — **critique-BEFORE-verdict, strictly BINARY** per criterion — and emit a
|
|
1045
|
+
severity-gated binary quality **PASS/FAIL**. The authoritative rubric + the drafted default criteria
|
|
1046
|
+
live in `scripts/code-quality-verdict.ts` (`DEFAULT_CODE_QUALITY_CRITERIA` — Q1 spec-faithful [crit] ·
|
|
1047
|
+
Q2 addresses-diagnosis [high] · Q3 no-regression [high] · Q4 error-handling [high] · Q5 maintainable
|
|
1048
|
+
[med]); this mode is that rubric's dispatched form (the provider-callable mirror is the same file,
|
|
1049
|
+
mirroring how the other judge prompts mirror their agent modes).
|
|
1050
|
+
|
|
1051
|
+
> **⚠️ FLAGGED-FOR-OPERATOR-SIGN-OFF.** The exact acceptance criteria + the severity-gated aggregation
|
|
1052
|
+
> rule (CRIT/HIGH `fail`|`uncertain` blocks; MEDIUM advisory) are a DRAFT default, implemented behind
|
|
1053
|
+
> a clearly-named constant so the operator can confirm/adjust WITHOUT a loop code change. Do not treat
|
|
1054
|
+
> the current set as final.
|
|
1055
|
+
|
|
1056
|
+
### Boundaries
|
|
1057
|
+
|
|
1058
|
+
- **Judge-only (EV-051):** score the quality; NEVER propose or write a fix (the ⑤ loop's ai-engineer
|
|
1059
|
+
amends). A FAIL just keeps the loop iterating.
|
|
1060
|
+
- **Host-runtime, no provider key; C-PIN:** pinned model + temperature 0 — byte-identical reruns.
|
|
1061
|
+
- **Separate from tests-green:** you judge quality, NOT whether tests pass; the deterministic test
|
|
1062
|
+
gate is ai-engineer's report, ANDed by the oracle — never fold it into your quality verdict.
|
|
1063
|
+
|
|
1064
|
+
## Eval-leg reconcile — criteria MAINTENANCE, not judging (Wave-2 W2I5 · KP-003)
|
|
1065
|
+
|
|
1066
|
+
The evaluator owns the **eval leg** of the def → impl → eval triad — the third leg of `#sync-spec`. When
|
|
1067
|
+
an impl amends (the ⑤ OPTIMIZE loop's ai-engineer, or brownfield drift), the eval criteria that ground the
|
|
1068
|
+
subject's evaluation can go stale. The reconcile REASONING — which criteria a changed impl makes stale,
|
|
1069
|
+
what new criterion it needs — is the **ai-architect's** (`#sync-spec`, session-dispatched, Model-B). The
|
|
1070
|
+
evaluator exposes only the deterministic CONTRACT the reconcile reads/writes, in
|
|
1071
|
+
`scripts/sync-eval-criteria.ts`:
|
|
1072
|
+
|
|
1073
|
+
- `evalLegForSubjectKind(kind)` — the shape resolver: agent/skill/composite → the **eval-suite criteria**
|
|
1074
|
+
(this cell's discovered/maintained criteria); code → the **code-quality criteria**
|
|
1075
|
+
(`DEFAULT_CODE_QUALITY_CRITERIA` / `#mode-judge-code-quality`, Wave-2 W2I1).
|
|
1076
|
+
- `flagEvalLegDrift(...)` / `assessEvalLeg(...)` — a pure freshness FLAG (mirrors the builder probe).
|
|
1077
|
+
- `reconcileEvalCriteria(request)` — the COMPUTE: upsert the ai-architect-proposed criteria delta by id,
|
|
1078
|
+
append the novel, and NEVER drop a criterion (EV-053, via `assertMonotonicGrowth`). It returns the grown
|
|
1079
|
+
set as DATA (`result.criteria`) — it does **not** touch disk; the reconcile hook COMPUTES, it is not the write.
|
|
1080
|
+
- `persistEvalCriteria(result, { cwd, updatedAt? })` (`scripts/persist-eval-criteria.ts`) — the WRITE: the
|
|
1081
|
+
evaluator session PERSISTS `result.criteria` back to the located criteria artifact
|
|
1082
|
+
(`.mutagent/evaluator/living-suite/<leg>.criteria.json`, per-leg — eval-suite for an agent/skill/composite
|
|
1083
|
+
subject, code-quality for a code subject). That write is what BUMPS the artifact's freshness (its mtime — and
|
|
1084
|
+
the optional `updatedAt` marker the builder probe reads), which returns the eval leg to `in-sync`: the loop
|
|
1085
|
+
only closes once the reconciled criteria are on disk, not when they are merely computed.
|
|
1086
|
+
|
|
1087
|
+
> **Judge-only PRESERVED (EV-051).** This is criteria MAINTENANCE — growing/revising the criteria SET to
|
|
1088
|
+
> match a changed impl — NOT judging a subject. `sync-eval-criteria.ts` scores nothing and decides no
|
|
1089
|
+
> pass/fail; it is pure set algebra + a freshness flag (no clock/random/network — C-PIN byte-identical). The
|
|
1090
|
+
> `persist-eval-criteria.ts` WRITER is the IO layer (it is the one place that touches disk, mirroring how
|
|
1091
|
+
> `artifact-paths.ts` does IO while `living-suite.ts` stays pure); its serialization is still deterministic
|
|
1092
|
+
> (stable key order, no clock unless the caller passes `updatedAt`), so a persisted artifact round-trips
|
|
1093
|
+
> byte-faithful. The evaluator never mutates the impl and never fixes the subject; it only maintains — and now
|
|
1094
|
+
> persists — its own criteria.
|
|
1095
|
+
|
|
1032
1096
|
## Boundaries (shared)
|
|
1033
1097
|
|
|
1034
1098
|
judge-only (EV-051) · model-intent-sacred · critique-before-verdict · binary-not-Likert ·
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# code-quality-criteria.yaml — the CODE-QUALITY rubric (⑤ OPTIMIZE code-target BOTH-gate, W2I1)
|
|
2
|
+
# ═══════════════════════════════════════════════════════════════════════════════
|
|
3
|
+
# THIS FILE IS THE RUBRIC. Edit it to tune what "code quality-pass" means — no code
|
|
4
|
+
# change, no release. `scripts/code-quality-verdict.ts` loads it at import time and
|
|
5
|
+
# exports it as DEFAULT_CODE_QUALITY_CRITERIA.
|
|
6
|
+
#
|
|
7
|
+
# WHAT IT GATES: for a subject whose medium is `code`, "converged" = the subject's OWN
|
|
8
|
+
# test suite green (deterministic) AND this rubric PASSes. Neither alone converges.
|
|
9
|
+
# Prompt/markdown subjects never touch this file — they converge on evals alone.
|
|
10
|
+
#
|
|
11
|
+
# AGGREGATION (severity-gated): a `fail` OR `uncertain` on any `critical`/`high`
|
|
12
|
+
# criterion BLOCKS the quality-pass. `medium` is advisory (recorded, never blocking).
|
|
13
|
+
#
|
|
14
|
+
# EDITING RULES:
|
|
15
|
+
# - `id` is a byte-identity key + report anchor. Changing an id breaks historical
|
|
16
|
+
# comparison — add a new criterion instead of renaming an old one.
|
|
17
|
+
# - Every criterion must be BINARY (decidable pass/fail), never a Likert score.
|
|
18
|
+
# - `severity` must be exactly one of: critical | high | medium.
|
|
19
|
+
# - Keep passDefinition/failDefinition CONCRETE — the judge must not have to guess.
|
|
20
|
+
# - Bump `version` on any change to this file.
|
|
21
|
+
#
|
|
22
|
+
# STATUS: the picks below are the conservative, subject-agnostic starting set
|
|
23
|
+
# (FLAGGED-for-operator-sign-off, Wave-2 W2I1) — a default, not a final contract.
|
|
24
|
+
|
|
25
|
+
version: 1
|
|
26
|
+
|
|
27
|
+
criteria:
|
|
28
|
+
- id: Q1-spec-faithful
|
|
29
|
+
statement: The implementation realizes the agentspec definition the amend targeted.
|
|
30
|
+
passDefinition: >-
|
|
31
|
+
PASS: every spec-declared tool / job-to-be-done is present and the operative
|
|
32
|
+
system_prompt is unchanged except where the amend intended; the def→impl cascade held.
|
|
33
|
+
failDefinition: >-
|
|
34
|
+
FAIL: a spec-declared tool or JTBD is missing, or the system_prompt was altered
|
|
35
|
+
beyond the amend intent (the impl forked from the SSoT).
|
|
36
|
+
severity: critical
|
|
37
|
+
|
|
38
|
+
- id: Q2-addresses-diagnosis
|
|
39
|
+
statement: The change targets the diagnosed root-cause locus, not an adjacent symptom.
|
|
40
|
+
passDefinition: >-
|
|
41
|
+
PASS: the edit is at (or directly causes a fix at) the RCA-named locus / the
|
|
42
|
+
failing-case root.
|
|
43
|
+
failDefinition: >-
|
|
44
|
+
FAIL: the change edits an unrelated place or patches a symptom while the root
|
|
45
|
+
cause remains.
|
|
46
|
+
severity: high
|
|
47
|
+
|
|
48
|
+
- id: Q3-no-regression
|
|
49
|
+
statement: The change introduces no unrelated regression and stays in scope.
|
|
50
|
+
passDefinition: >-
|
|
51
|
+
PASS: only the remedy-named surface changed; no unrelated behavior was removed
|
|
52
|
+
or broken.
|
|
53
|
+
failDefinition: >-
|
|
54
|
+
FAIL: unrelated code was changed/removed, or a previously-working path was broken.
|
|
55
|
+
severity: high
|
|
56
|
+
|
|
57
|
+
- id: Q4-error-handling
|
|
58
|
+
statement: Failure paths are handled, not silently dropped.
|
|
59
|
+
passDefinition: >-
|
|
60
|
+
PASS: error/failure branches surface, recover, or log per the subject's contract;
|
|
61
|
+
no new silent drop.
|
|
62
|
+
failDefinition: >-
|
|
63
|
+
FAIL: a failure is swallowed with no recovery/notify/observability (a silent-drop
|
|
64
|
+
regression).
|
|
65
|
+
severity: high
|
|
66
|
+
|
|
67
|
+
- id: Q5-maintainable
|
|
68
|
+
statement: The code is readable, framework-idiomatic, and free of obvious footguns.
|
|
69
|
+
passDefinition: >-
|
|
70
|
+
PASS: clear structure, idiomatic to the target framework, no dead code /
|
|
71
|
+
copy-paste / obvious footgun introduced.
|
|
72
|
+
failDefinition: >-
|
|
73
|
+
FAIL: unreadable/duplicated/dead code or an obvious maintainability footgun was
|
|
74
|
+
introduced.
|
|
75
|
+
severity: medium
|
|
@@ -44,7 +44,7 @@ findings:
|
|
|
44
44
|
- mr: MR-7
|
|
45
45
|
verdict: <fit | mis-fit | inefficient>
|
|
46
46
|
observation: <what the run actually did at this methodology decision>
|
|
47
|
-
recommendation: <concrete rearrange/
|
|
47
|
+
recommendation: <concrete rearrange/optimize proposal>
|
|
48
48
|
impactRank: <1=highest> # ranked self-feedback (MR-5)
|
|
49
49
|
advisory: true # NEVER gates the run
|
|
50
50
|
```
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
# edd-loop — the ADL ③
|
|
1
|
+
# edd-loop — the ADL ③ OPTIMIZE / Eval-Driven-Development loop (F18 + F19)
|
|
2
2
|
|
|
3
|
-
> **Loaded by:** the evaluator `
|
|
3
|
+
> **Loaded by:** the evaluator `optimize` mode (`assets/agents/evaluator.md#mode-optimize`). Load on demand.
|
|
4
4
|
> **Backed by:** `scripts/edd/variance-gate.ts` (F19) · `scripts/edd/change-request.ts` (F18) ·
|
|
5
5
|
> `scripts/edd/edd-types.ts` + `schemas/edd-change-request.schema.yaml` (the contract).
|
|
6
6
|
> **Sibling refs:** `grounded-adjudication.md` (every ask is grounded) · `validate-evaluator.md` (trust the judge first).
|
|
7
7
|
|
|
8
|
-
The
|
|
8
|
+
The OPTIMIZE stage closes the **PR-011 spec↔impl↔eval triad**. A judge that only reports is half a
|
|
9
9
|
loop; EDD drives the subject to **full green** while the evaluator stays **judge-only (EV-051)** — it
|
|
10
10
|
**REQUESTS** the `ai-engineer` to amend the Agent/AgentSpec and **re-evals**, but never
|
|
11
11
|
patches the subject itself.
|
|
@@ -100,11 +100,11 @@ controller never reads a clock) → the decision is PURE + deterministic (C-PIN)
|
|
|
100
100
|
## Assumed eval-runner interface (the clean seam — REBUILD nothing)
|
|
101
101
|
|
|
102
102
|
The EVAL engine (dataset build · the eval runner · Path A/B) is built **in parallel** (sibling
|
|
103
|
-
worktree). The `
|
|
103
|
+
worktree). The `optimize` mode is **additive**: it orchestrates the LOOP around the runner and assumes
|
|
104
104
|
this interface — it does not re-implement it.
|
|
105
105
|
|
|
106
106
|
```
|
|
107
|
-
// the runner the
|
|
107
|
+
// the runner the optimize mode CONSUMES (owned by the eval engine, e.g. run-evaluate.ts):
|
|
108
108
|
runOnce(caseIds: string[]) -> Array<{
|
|
109
109
|
caseId: string;
|
|
110
110
|
criterionId: string;
|
|
@@ -116,7 +116,7 @@ runOnce(caseIds: string[]) -> Array<{
|
|
|
116
116
|
- **repeat-N** = `runOnce` called N times over the SAME `caseIds`; the per-rerun verdicts feed
|
|
117
117
|
`CaseVarianceObservation.verdicts[]` (+ `trajectories[]`) → `evaluateVarianceGate`.
|
|
118
118
|
- **accuracy** = `runOnce` over the FULL dataset → per-case verdicts → an accuracy ratio vs target.
|
|
119
|
-
- the runner is **C-PIN** (pinned model + temperature 0). The
|
|
119
|
+
- the runner is **C-PIN** (pinned model + temperature 0). The optimize mode adds **no** provider call.
|
|
120
120
|
|
|
121
121
|
If the sibling runner exposes a different shape, adapt at the seam (map its result into
|
|
122
122
|
`CaseVarianceObservation` / the accuracy ratio) — keep the gate + loop modules untouched. The gate
|
|
@@ -38,8 +38,37 @@ After `*build`, OFFER the two derivations (AskUserQuestion, parent session only)
|
|
|
38
38
|
1. **`*build-dataset`** — materialize + grow the golden dataset from the spec.
|
|
39
39
|
2. **`*build-evals`** — build the eval suite (and pick the engine).
|
|
40
40
|
|
|
41
|
+
**State what the stage will produce, up front (EVAL-1).** Before running either build,
|
|
42
|
+
EMIT the "what this stage will produce" notice (`renderStageProducesNotice`, `scripts/
|
|
43
|
+
render-build-cards.ts`) naming the deliverables — a **dataset** (golden cases + the sink
|
|
44
|
+
file) and/or the **eval criteria** (the judges/code-checks + their sink) — so the operator
|
|
45
|
+
knows what's coming. Notification only — **no approval gate** (operator constraint): once a
|
|
46
|
+
build is triggered, run it; don't ask for edit-approval, just present clearly.
|
|
47
|
+
|
|
41
48
|
Let the user run either/both. They are independent; `*evaluate` consumes both.
|
|
42
49
|
|
|
50
|
+
**Either order — no hard sequence (EVAL-4).** There is NO build-time ordering rule between
|
|
51
|
+
the dataset and the criteria: you may build the **criteria first** and derive a dataset to
|
|
52
|
+
exercise them (when you can define "good" up front), or build a **dataset first** and mine
|
|
53
|
+
criteria from it (when you bring examples of good/bad and fit criteria to them). Start from
|
|
54
|
+
either end. The ONLY directional constraint is a RUN-TIME prerequisite, not a build order:
|
|
55
|
+
`*evaluate` cannot run against no dataset, so it auto-routes to `*build-dataset` first (below).
|
|
56
|
+
Do not mistake that run-time prerequisite for a build-time sequence.
|
|
57
|
+
|
|
58
|
+
**The three dataset pipelines — kept SEPARATE (EVAL-2).** Do NOT fuse the source paths into
|
|
59
|
+
one step (on a cold start there are no traces to ground against). They stay distinct:
|
|
60
|
+
1. **cold-from-definition** — materialize the dataset from the agentspec (`materialize-dataset.ts`
|
|
61
|
+
`materializeFromAgentspec`). The only path with no traces.
|
|
62
|
+
2. **from-labeled-traces** — grow the set from already-labeled traces
|
|
63
|
+
(`derive-dataset.ts` `deriveRegressionCases` / `growRegressionSet`).
|
|
64
|
+
3. **seed-then-ground** — seed from the definition, THEN ground from traces (definition seeds →
|
|
65
|
+
traces ground). Reuses the shared monotonic merge floor (`build-dataset.ts` — nothing is ever
|
|
66
|
+
dropped), so the paths can be combined later without losing cases.
|
|
67
|
+
|
|
68
|
+
**Precedence — scored traces outrank a stale spec (EVAL-2).** When BOTH a spec and traces
|
|
69
|
+
carrying feedback/scores exist for the same case, the **scored traces WIN**: real observed
|
|
70
|
+
outcomes outrank a possibly-stale definition. The spec seeds; the scored traces correct.
|
|
71
|
+
|
|
43
72
|
**Dataset gate (dogfood H5).** `*evaluate` REQUIRES a materialized dataset. If `*build-evals` runs
|
|
44
73
|
(or `*evaluate` is invoked) with no dataset present, do NOT dead-end — auto-route to `*build-dataset`
|
|
45
74
|
(interactive) first, then resume. Never leave the user with an eval suite and nothing to run it on.
|
|
@@ -126,9 +155,13 @@ Stream PROGRESS as wireframe cards for BOTH `*build-dataset` and `*build-evals`
|
|
|
126
155
|
|
|
127
156
|
- `renderBuildDatasetProgressCard` / `renderBuildEvalsProgressCard` — phase +
|
|
128
157
|
progress bar + counters, emitted per phase (F13/F16).
|
|
129
|
-
- After each, emit the VERBOSE entity
|
|
130
|
-
(
|
|
131
|
-
SURFACED CC/log-sink dependency ·
|
|
158
|
+
- **REQUIRED emission (EVAL-1).** After each build, you MUST emit the VERBOSE entity
|
|
159
|
+
card (F22) — this is not optional: `renderDatasetEntityCard` (per-category breakdown ·
|
|
160
|
+
version · sink) · `renderEvalsEntityCard` (engine · SURFACED CC/log-sink dependency ·
|
|
161
|
+
criteria). A build that reports and a build that stays silent must NOT look identical
|
|
162
|
+
(the dogfood symptom). The renderers WARN loudly (`⚠ EMPTY`) when a build produced no
|
|
163
|
+
items/criteria, so a silent no-op build can never render as a success. No approval
|
|
164
|
+
branch — notification only.
|
|
132
165
|
|
|
133
166
|
---
|
|
134
167
|
|
|
@@ -21,7 +21,7 @@ name: <short-kebab-case-slug>
|
|
|
21
21
|
description: <one-line summary — used to decide relevance during recall>
|
|
22
22
|
metadata:
|
|
23
23
|
type: user | feedback | project | reference # Claude Code's four types
|
|
24
|
-
lifecycle: spec|build|evaluate|diagnose|
|
|
24
|
+
lifecycle: spec|build|evaluate|diagnose|optimize|general # ADL extension
|
|
25
25
|
created: YYYY-MM-DD # REQUIRED · every memory is DATED (stale-pruning)
|
|
26
26
|
---
|
|
27
27
|
|
|
@@ -76,6 +76,7 @@ makes NO pass/fail decision; the LLM/HITL halves are Type B (below).
|
|
|
76
76
|
| `*build-dataset` expand (EV-046) | `scripts/build-dataset.ts` | `buildCase` · cartesian dimension×value expand · deterministic token-Jaccard near-dup removal · content-derived id · `mergeCases` MONOTONIC merge. The agent PROPOSES realism; the script ENFORCES non-redundancy. Code half of the 3-way `*build-dataset` Hybrid. |
|
|
77
77
|
| `*discover-dataset` distill (EV-047) | `scripts/derive-dataset.ts` | Distill a living regression set from past ✓/✗ — reuses EV-052 `sample-traces.ts` selectors (failure/outlier/uncertainty) + EV-046 monotonic merge; trace→`DatasetCase` whose query IS the real input. Labels already on traces (from `*discover-evals`); makes NO new decision. Type A Code-only. |
|
|
78
78
|
| Living-suite writer (EV-053) | `scripts/living-suite.ts` | `appendOnly` + `assertMonotonicGrowth` — generic-over-`T` append-only writer (a living artifact NEVER shrinks) shared by datasets + criteria. Pure-counter provenance (no clock → byte-identity, C-PIN). Pure set algebra w/ fail-loud monotonicity guard. |
|
|
79
|
+
| Eval-leg reconcile contract (W2I5 · KP-003) | `scripts/sync-eval-criteria.ts` | The eval leg of `#sync-spec` (def → impl → eval triad). `evalLegForSubjectKind` (agent/skill → eval-suite · code → code-quality) · `flagEvalLegDrift`/`assessEvalLeg` (pure freshness flag) · `reconcileEvalCriteria` (upsert-by-id criteria MAINTENANCE via `assertMonotonicGrowth` — never drops, EV-053). Criteria maintenance, NOT judging (EV-051): scores nothing, decides no pass/fail. The reconcile REASONING is `ai-architect #sync-spec`'s (Model-B); this holds only the deterministic contract. Pure (no clock/random/network, C-PIN). |
|
|
79
80
|
| W2 dataset contract | `scripts/contracts/dataset.ts` | TypeBox `Dimension`/`DatasetTuple`/`DatasetCase`/`Dataset` (companion to `schemas/dataset.schema.yaml`) + `tupleKey`. NEW W2-OWN file — does NOT touch shared `contracts/eval-types.ts`. Data contract only. |
|
|
80
81
|
| W2 trust contract | `scripts/contracts/validation.ts` | TypeBox `HumanLabel` (produced by `*review`, consumed by `*validate`) + the confusion-matrix / validation-result shapes. NEW W2-OWN file; disjoint from shared types. Data contract only. |
|
|
81
82
|
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
# This is the SECOND requirement family: FITNESS, not conformance. It does not
|
|
6
6
|
# pass/fail a component; it interrogates the methodology's own decision-tree,
|
|
7
7
|
# workflow structure, and data-flow, and emits ranked recommendations to
|
|
8
|
-
# rearrange /
|
|
8
|
+
# rearrange / optimize the process. MR-1..9 (Tab-4 lens reads these).
|
|
9
9
|
# ============================================================================
|
|
10
10
|
$id: mutagent-evaluator/methodology-review
|
|
11
11
|
title: Subject Methodology-Review Rubric
|
|
Binary file
|