Move the harness-config files out of the mixed .specify/level5 and .specify/agentops
dirs (which also hold governance/domain/state) into packages/casan-harness, leaving a
per-file compat symlink at each old path. Runtime state and governance stay in place.
Moved (+ .specify symlink each):
level5: drift-policy.yaml kpi-schema.yaml model-fallback.yaml tool-registry.yaml
harness-package.json project-registry.json provider-usage-sample.json
agentops: alerts.yaml hallucination-tracking.yaml metrics.yaml rate-limits.yaml tracking.yaml
top: init-options.json
Stays in .specify: level5/central-governance (governance), level5/golden-runs (domain,
Phase 3), agentops/alerts.log (state), traceability-map.json (domain, Phase 3).
Full gate: PASS=64 FAIL=0 SKIP=3 (CASAN_CI_STEP_TIMEOUT_SEC=1200).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
casan-harness (package skeleton)
Core CASAN harness (gate H1→H7) as a reusable package, independent of domain data.
Populated incrementally by Plan-01 (Phase 0→6). During migration, files move here from
.specify/ wave-by-wave; the full harness gate must stay green (PASS=64 FAIL=0) after each phase.
Layout:
scripts/— bash + powershell gate logic (H1→H7), path resolvercasan-paths.shsecurity/— filter/policy rules (prompt-filter, pii-rules, output-policy, ...)governance/,agentops/— H5/H6 codelevel5/— L5 config (drift/kpi/model-fallback/tool-registry YAMLs)templates/,config/— spec/plan templates, loop-policytests/— reproducible harness test suites + integrity manifest
Runtime state (logs, audit chain, tenant state) is NOT part of this package — it stays with
the app under CASAN_STATE_ROOT. Domain data (golden-runs, corpus, input) lives in
apps/okr/domain/ under CASAN_DOMAIN_ROOT.