Conformance Reference
Purpose #
The per-level check tables and a complete list of check ids. Authoritative source: .docs/docs/specs/conformance-levels.md (Appendix B is the canonical id reference).
Tier ↔ ConformanceLevel mapping #
User-facing tier names (introduced in A1) map 1:1 to the internal
ConformanceLevel. The schema, adapter manifests, and the project state
file all use ConformanceLevel; only the CLI surface, prompts, and
user-facing docs use tier names.
| Tier (user-facing) | ConformanceLevel (internal) |
Audience |
|---|---|---|
starter |
minimum |
New to structured AI workflows; 60-second setup |
standard |
standard |
Outgrew hand-rolled CLAUDE.md; the default |
strict |
strict |
Audit-ready; capability declarations + signed manifest |
tierToConformance() / conformanceToTier() in @aidokit/core are the
canonical mappers. See the tier landing pages for
the user-facing surface.
Per-level totals #
| Level | Adapter MUST | Adapter SHOULD | Stack-pack MUST | Stack-pack SHOULD |
|---|---|---|---|---|
| Minimum | ~24 | ~3 | ~11 | ~2 |
| Standard | ~32 | ~6 | ~16 | ~3 |
| Strict | ~36 | ~8 | ~18 | ~4 |
Exact counts depend on spec evolution; the harness is authoritative.
Adapter check ids (~36 at Strict) #
From .docs/docs/specs/conformance-levels.md Appendix B.1:
Manifest #
adapter.manifest.declared-leveladapter.manifest.spec-versionadapter.manifest.capabilities-declaredadapter.manifest.cli-target
Agent rules file #
adapter.emit-rules.exactly-one-fileadapter.emit-rules.owner-is-adapteradapter.emit-rules.references-source-of-truth-chainadapter.emit-rules.includes-validation-commands
Engine config #
adapter.emit-engine.paths-under-engine-diradapter.emit-engine.all-paths-relative
Verbs #
adapter.emit-verbs.intake-presentadapter.emit-verbs.implement-task-presentadapter.emit-verbs.orchestrator-next-presentadapter.emit-verbs.intake-stops-before-code
Roles #
adapter.emit-roles.six-required-roles-presentadapter.emit-roles.builder-scope-limitedadapter.emit-roles.read-only-roles-correctadapter.emit-roles.seventh-role(MAY at Minimum, SHOULD at Standard)adapter.emit-roles.seventh-role-strict(MUST at Strict)
Skills #
adapter.emit-skills.required-skills-emittedadapter.emit-skills.preserves-triggersadapter.emit-skills.stack-pack-skills-marked(SHOULD)
Watchdog #
adapter.watchdog.test-loop-detectionadapter.watchdog.command-loop-detectionadapter.watchdog.file-edit-counteradapter.watchdog.repair-capadapter.watchdog.out-of-scope-blockadapter.watchdog.version-bump-gateadapter.watchdog.tracked-deletion-gateadapter.watchdog.blocker-emitteradapter.watchdog.monitoring-stream(SHOULD at Standard, MUST at Strict)adapter.watchdog.monitoring-stream-strict(MUST at Strict)
Post-install #
adapter.post-install.executable-scripts-markedadapter.post-install.beads-init-when-enabled(SHOULD)
Determinism #
adapter.determinism.repeated-invocation-stable
MCP #
adapter.mcp.install-implemented(SHOULD at Minimum, MUST at Standard)adapter.mcp.remove-implemented(SHOULD/MUST)adapter.mcp.list-implemented(SHOULD/MUST)
Sync #
adapter.sync.pre-sync-implemented(SHOULD/MUST)adapter.sync.classifies-all-files(MUST at Standard)
Doctor #
adapter.doctor.implemented(SHOULD/MUST)adapter.doctor.verifies-cli-installation(MUST at Standard)adapter.doctor.verifies-required-files(MUST at Standard)adapter.doctor.runs-conformance-subset(SHOULD at Strict)
Output styles #
adapter.output-styles.emitted(SHOULD at Standard, MUST at Strict)
v1.0 capability cross-check #
AD-STD-CAP-01— declared capabilities match actual source-level imports (child_process) and call sites (fetch(,http(s).request(). See CHANGELOG[Unreleased].
Stack-pack check ids (~21 at Strict) #
From .docs/docs/specs/conformance-levels.md Appendix B.2:
stack-pack.manifest.declared-level
stack-pack.manifest.languages-non-empty
stack-pack.manifest.spec-version
stack-pack.detect.returns-result
stack-pack.detect.confidence-categorical
stack-pack.detect.no-shell-calls
stack-pack.detect.handles-missing-files
stack-pack.skills.at-least-one-skill
stack-pack.skills.source-marked
stack-pack.skills.has-review-markers
stack-pack.skills.no-secrets
stack-pack.skills.no-hard-coded-paths # SHOULD
stack-pack.determinism.repeated-invocation-stable
stack-pack.mcp.references-catalog-ids # MUST at Standard
stack-pack.mcp.no-sensitive-suggestions
stack-pack.validation.commands-well-formed # MUST at Standard
stack-pack.validation.ci-safety-marked
stack-pack.validation.respects-project-scripts # SHOULD
stack-pack.architecture.pattern-implemented # SHOULD at Strict
stack-pack.architecture.suggested-layout-non-empty # MUST when method exists
stack-pack.composability.composes-with-declared # SHOULD at Strict
Running the harness #
import { runAdapterConformance, runStackPackConformance } from '@aidokit/core';
import { adapter } from '../src/index.js';
const report = await runAdapterConformance(adapter, adapter.manifest.conformance);
// report.overall === 'pass' | 'fail'
// report.results: ConformanceResult[]
ConformanceOptions: { fixture?, onlyChecks?, skipChecks?, strictSoft? }. Pass packagePath to enable AD-STD-CAP-01 source-level capability cross-check.
Snapshots and drift #
At install time, the CLI writes <projectRoot>/.aido/conformance-snapshot.json. aidokit doctor re-runs a subset and reports drift. Full harness lives in the package CI; doctor is the user-time sanity check.
Recovery from common failures #
From .docs/docs/specs/conformance-levels.md §13.3:
| Failure | Recovery |
|---|---|
| Adapter version mismatch | aidokit sync |
| Skill file deleted | aidokit sync --skills |
| Hook scripts lost execute permission | aidokit sync --scripts or chmod +x manually |
| Adapter no longer claims declared level | aidokit doctor --strict; upgrade/replace adapter |
| MCP scoping divergence | aidokit mcp scope <id> --set-roles <list> |