Conformance levels
Three levels — Minimum, Standard, Strict — declared in every adapter and stack-pack manifest, verified by a harness in @aidokit/core.
Level comparison
Each level is a strict superset of the one below. Capabilities accumulate.
flowchart LR
classDef min fill:#fffbeb,stroke:#b45309,color:#78350f;
classDef std fill:#eff6ff,stroke:#2563eb,color:#0f172a;
classDef str fill:#f0fdf4,stroke:#15803d,color:#14532d;
subgraph M ["Minimum — MUST"]
direction TB
M1[3 verbs emitted]
M2[6 roles, capability-scoped]
M3[watchdog stops armed]
M4[manifest + deterministic emit]
end
subgraph S ["Standard — MUST + SHOULD"]
direction TB
S1[+ subagents]
S2[+ repair caps]
S3[+ monitoring stream]
S4[+ 5 output styles]
end
subgraph X ["Strict — MUST + SHOULD + MAY"]
direction TB
X1[+ workspace isolation]
X2[+ 7th role: Frontend-Browser-Tester]
X3[+ structured artifact schemas]
end
M --> S --> X
class M min
class S std
class X str
Figure 1. Conformance is additive. Declared > verified is a CI failure.
The levels
| Level | What it includes | Suitable for |
|---|---|---|
| Minimum | All MUST requirements from the contract. | CLIs with basic prompt-driven workflows. |
| Standard recommended default | Minimum + all SHOULD requirements. | Most teams. Subagents, repair caps, monitoring stream. |
| Strict | Standard + all MAY requirements promoted to expected. | Teams wanting full discipline. Workspace isolation, output styles, seventh role. |
What each level guarantees
Minimum (~24 MUST checks for adapters)
- The three verbs (
intake,implement-task,orchestrator-next) are emitted. - Six roles are emitted with correct capability profiles (Builder is scope-limited-write; Researcher / Architect / Planner / Tester-Reviewer are read-only).
- All required skills are emitted with metadata preserved.
- Watchdog stop conditions: test-loop, command-loop, file-edit counter, repair cap, out-of-scope block, version-bump gate, tracked-deletion gate, blocker emitter.
- Manifest declares conformance, spec version, capability declarations, CLI target.
- Emissions are deterministic (same input → byte-identical output).
Standard (Minimum + ~8 SHOULDs)
- MCP install / remove / list fully implemented.
preSyncclassifies every file (create / update / delete / skip).doctorimplemented and runs all checks (no short-circuit).- Monitoring stream writes events to
agent-artifacts/monitoring/events.jsonl. - Doctor verifies CLI installation and required files.
Strict (Standard + MAYs promoted)
- Seventh role (
frontend-browser-tester) emitted. - Output styles emitted (test report, change summary, maintenance report, blocker, …).
- Monitoring stream covers every workflow stage transition.
- Doctor runs a conformance subset.
How verification works
Every adapter and stack-pack package ships a conformance.test.ts:
typescript
import { runAdapterConformance } from '@aidokit/core';
import { adapter } from '../src/index.js';
test(`${adapter.manifest.name} conforms to declared level`, async () => {
const report = await runAdapterConformance(adapter, adapter.manifest.conformance);
expect(report.overall).toBe('pass');
});
The harness:
- Reads the declared level from
manifest.conformance. - Resolves the check set for that level (inclusive of lower levels).
- Invokes each emit method against synthetic
ProjectContextfixtures. - Applies pass / fail criteria; collects evidence.
- Reports per-check and overall
pass | fail.
CI gate Adapters and stack packs cannot publish if conformance fails. Declared-greater-than-verified is a CI failure, not a footnote.
v1.0 declared levels
| Package | Declared | Notes |
|---|---|---|
@aidokit/adapter-claude-code | Strict | Seven roles + five output styles. |
@aidokit/adapter-codex | Minimum | No hook mechanism; gap documented. |
@aidokit/adapter-copilot | Minimum | No hook mechanism; partial MCP; gap documented. |
@aidokit/stack-pack-node-ts | Standard | |
@aidokit/stack-pack-node-js | Standard | |
@aidokit/stack-pack-python | Standard | |
@aidokit/stack-pack-react | Standard | |
@aidokit/stack-pack-go | Standard |
Project-level conformance
Your project picks its target level in .aido/adapter.md:
yaml
--- adapter: claude-code conformanceTarget: standard specVersion: '2.0' ---
The target MUST be ≤ the installed adapter's declared level. A Strict project requires an adapter that declares Strict.
aidokit doctor — drift detection
At install time the CLI writes .aido/conformance-snapshot.json. aidokit doctor re-runs a subset of the harness and compares against the snapshot, reporting drift:
shell
$ npx aidokit doctor ✓ Node.js 20.11.0 ✓ Claude Code 2.1.34 ✓ Adapter: claude-code@0.1.0 (Strict conformance) ✓ All 18 skills present ✗ MCP scoping mismatch: 'context7' missing from researcher role Fix: aidokit mcp scope context7 --add-role researcher 1 failure, 0 warnings
- Exit 0 — all checks pass.
- Exit 13 — any MUST check failed (
CONFORMANCE_FAILED). --strictflag — treat warnings as failures.
Recovery from common drift
| Failure | Recovery |
|---|---|
| Adapter version mismatch | aidokit sync |
| Skill file deleted | aidokit sync --skills |
| Hook scripts lost execute permission | aidokit sync --scripts or chmod +x |
| MCP scoping divergence | aidokit mcp scope <id> --set-roles <list> |
| Adapter no longer claims declared level | aidokit doctor --strict; upgrade or replace adapter |