Skip to content

v0.14.0 — Cohort aliases + joint (model, effort) calibration primitive

Choose a tag to compare

@overdrive-dev overdrive-dev released this 17 Apr 02:14
· 433 commits to main since this release
e73b5bc

v0.14.0 — Cohort aliases + joint (model, effort) calibration primitive

One milestone (M010) reshapes /aih-calibrate around role-based cohorts — each cohort binds both model and effort jointly, so one flag downgrades a whole role in one commit. Also bundles a Phase-1 rendering bugfix.

Headline

  • 4 cohort aliases — :planner, :doer, :verifier, :adversarial — formalize the 43 agents into role buckets with canonical membership in pkg/.aihaus/skills/aih-calibrate/annexes/cohorts.md.
  • Joint (model, effort) calibration — /aih-calibrate --cohort :doer --model sonnet --effort high downgrades all 11 doers in one atomic commit. --agent <name> --model X --effort Y is an escape hatch for truly atypical agents (both axes required).
  • :adversarial is preset-immune — plan-checker, contrarian, reviewer, code-reviewer never mutate via --preset <name> (extends ADR-M008-C from 2 → 4 agents via ADR-M010-A).
  • Schema v2 sidecar — v1 auto-migrates. .aihaus/.calibration bumps v1 → v2 additively. Existing v0.13.0 sidecars keep restoring byte-identically on first v0.14.0 /aih-update; first subsequent /aih-calibrate writes v2.
  • Bundled bugfix — Phase-1 distribution report now renders as a GFM pipe table instead of Unicode box-drawing (the latter was clipping to garbage on narrow terminals / cmd.exe / split panes).

What changed (M010)

  • afd26d6 fix(calibrate): SKILL.md Phase 1 step 4 now prescribes a GFM pipe table (| Agent | Model | Effort | PermissionMode |) — explicit "NOT Unicode box-drawing" directive. Root cause in .aihaus/debug/calibrate-table-fragment.md.
  • 546581f feat(calibrate): new annexes/cohorts.md — canonical 43-agent → 4-cohort mapping. 5-column pipe table, totals 17 planners / 11 doers / 11 verifiers / 4 adversarials.
  • 34877bf feat(calibrate): annexes/presets.md rewrite — each preset now expressed as 4 cohort tuples + a bounded override block (≤ 5 grouped lines per preset). Covers cost-optimized, balanced, quality-first, auto-mode-safe. Applying balanced on a clean v0.13.0 install produces zero byte-diff (AC-07 zero-diff reversibility contract preserved).
  • 4d909d9 docs(calibrate): annexes/state-file.md documents sidecar schema v2 side-by-side with v1 legacy; migration algorithm auto-infers cohort rows from current frontmatter state, falls back to per-agent overrides when non-uniform.
  • 6a9df51 feat(calibrate): SKILL.md gets --cohort :<name> --model X --effort Y CLI surface + Phase-4 v2 sidecar write. Phase-2 preset-immune filter reads :adversarial members from cohorts.md (no hardcoded list). New annexes/cli-surface.md annex absorbs the Phase-3/4 detail to keep SKILL.md under 200 lines.
  • 925412c feat(calibrate): restore-calibration.sh + install.ps1::Restore-Calibration learn schema=2 + v1 auto-migration. Cohort membership resolved at runtime from <aihaus_root>/skills/aih-calibrate/annexes/cohorts.md. CRLF handling preserved.
  • 545bee9 test(calibrate): smoke Check 27 A5 asserts preset apply skips :adversarial members; new Check 28 covers v1→v2 migration round-trip (6 sub-assertions). New fixtures tools/fixtures/calibration/v2.calibration + v2-migration-input.calibration. Both checks source the production shared lib — no test/prod drift.
  • 6ce24b5 chore(release): pkg/VERSION 0.13.0 → 0.14.0, CLAUDE.md "Calibration and Permission Modes" paragraph extended with cohort shape, README v0.14.0 callout.

Binding decisions (ADRs)

  • ADR-M008-A (amended M010) — cohort-scoped model: edits now allowed via three explicit paths: (a) --preset <name> iterating cohort tuples excluding :adversarial; (b) --cohort :<name> --model X --effort Y; (c) --agent <name> --model X --effort Y (escape hatch, both axes required). Still rejected: bare --model X; --agent <name> --model X without effort.
  • ADR-M010-A (new) — 4 cohorts with joint (model, effort) as calibration primitive; membership in cohorts.md (single source of truth — not duplicated into frontmatter); preset-map expressed as cohort tuples + overrides; :adversarial cohort formalizes preset-immunity.
  • ADR-M008-C (superseded by ADR-M010-A) — preset-immune list extended from 2 → 4 agents via :adversarial cohort; semantics preserved byte-identically.
  • ADR-M009-A (preserved) — sidecar ownership (user-owned, never-committed, gitignored, absolute values) unchanged; only schema version + field shape evolved.

Usage

New CLI surface

# Interactive — Phase-1 now renders as a readable pipe table
/aih-calibrate

# Apply a preset (cohort tuples + overrides)
/aih-calibrate --preset balanced

# Downgrade a whole cohort in one atomic commit
/aih-calibrate --cohort :doer --model sonnet --effort high

# Per-agent escape hatch (both axes required)
/aih-calibrate --agent pattern-mapper --model haiku --effort medium

# Read-only audit (includes new Cohort column)
/aih-calibrate --inspect

Cohort membership

  • :planner (17) — analyst, architect, planner, product-manager, roadmapper, eval-planner, domain-researcher, phase-researcher, project-researcher, ai-researcher, framework-selector, ux-designer, ui-researcher, advisor-researcher, assumptions-analyzer, brainstorm-synthesizer, research-synthesizer
  • :doer (11) — implementer, frontend-dev, executor, code-fixer, doc-writer, intel-updater, test-writer, notion-sync, project-analyst, codebase-mapper, pattern-mapper
  • :verifier (11) — verifier, integration-checker, security-auditor, doc-verifier, eval-auditor, nyquist-auditor, ui-auditor, ui-checker, debugger, debug-session-manager, user-profiler
  • :adversarial (4, preset-immune) — plan-checker, contrarian, reviewer, code-reviewer

Full mapping with current (model, effort) per agent: pkg/.aihaus/skills/aih-calibrate/annexes/cohorts.md.

Upgrade notes

v0.13.0 → v0.14.0 is byte-safe

  • /aih-update from v0.13.0 restores v1 .aihaus/.calibration cleanly through the v2-aware reader (auto-migration happens in memory; file stays v1 until next /aih-calibrate).
  • /aih-calibrate --preset balanced on a clean v0.13.0-state install produces zero byte-diff — the new cohort+overrides spec is mathematically equivalent to v0.13.0's per-agent enumeration.
  • First calibrate run on v0.14.0 rewrites .aihaus/.calibration in schema v2 format.

New preset vocabulary, same effective distribution

v0.14.0 ships the same effective distribution as v0.13.0 cost-optimized (no silent tier shifts). The cohort redesign is representational — users opt into the new vocabulary when they next run /aih-calibrate.

--agent <name> --model X without --effort is rejected

If you were hand-editing model: frontmatter outside /aih-calibrate under v0.13.0 (not officially supported but technically possible), run /aih-calibrate --preset <your-preset> once on v0.14.0 to populate a consistent v2 sidecar before the next /aih-update.

Claude Code requirements (unchanged from v0.13.0)

  • effort: xhigh requires Claude Code ≥ v2.1.111. Older releases silently fall back to effort: high.
  • permissions.defaultMode: auto requires Claude Code ≥ v2.1.83. Older releases ignore the field.

Deferred / follow-up

  • R11 — pre-existing update_aihaus_dir rm -rf + cp -R crash window (Ctrl-C leaves agents/ empty). Out of scope; dedicated plan if prioritized.
  • R12 — pre-v0.13.0 hand-edited frontmatter migration. One-time user action; documented in state-file.md.
  • L1/L2 (carried from M009) — --dry-run phantom guard doc cleanup; "warn-per-line" spec/code alignment. Both LOW, deferred to follow-up doc sweep.
  • G2 — smoke Check 28 fixture doesn't exercise cohort.planner.* apply (sets doer + verifier only). All 4 cohorts traverse identical production code; risk negligible.

Full changelog

See the merged PR: M010 — #10