Eou audit
Audit an EOU spec — classification, authority, validators, failure modes, trace, blast radius, responsibility. <example> Context: Auditing an EOU before promoting it to active. user: "$eou-audit eou-diagnose" assistant: "Loading spec + governance + maturity model; report goes to foundry/audits/eou-audits/." </example> <example> Context: Re-audit after applying an ECP. user: "$eou-audit foundry/eous/audit-foundry.yml" assistant: "Re-running. Rule 94 (executor != approver) is hard-checked first." </example>From its SKILL.md
npx -y skills add xiaolai/eou-foundry --skill eou-auditAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 9 stars9 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
7.6 KB, as published. Nobody here has run it
EOU Audit
Audit an EOU spec at $target, or all specs in foundry/eous/ and foundry/meta-eous/ when no target is given.
Inputs
$target(optional) — EOU ID resolved tofoundry/eous/{id}.ymlorfoundry/meta-eous/{id}.yml, or a direct file path. When omitted, audits all specs in both directories.captured_workflow(optional, ECP-0017 / Rule 96) — auto-discovered fromfoundry/captured-workflows/cw-*.yml. When present with all fourhuman_approvalgates populated AND the audited spec'starget_objectis not inrule_96_exempt_target_objects, the Value Operationalization Test runs.
Required reading
foundry/constitution.ymlfoundry/governance.ymlfoundry/failure-taxonomy.ymlschemas/eou.schema.yml- Target EOU spec(s)
Stop conditions
Stop and record a critical finding before proceeding if:
schemas/eou.schema.ymldoes not exist — cannot validate spec completeness.$targetis provided but does not resolve to any spec file infoundry/eous/orfoundry/meta-eous/.
Procedure
Step 1 — Deterministic validation
python3 scripts/validate_foundry.py
Record any schema errors as critical findings before proceeding.
Step 2 — Faceted classification (per EOU)
Verify all six classification facets are present and use schema-allowed values:
| Facet | Allowed values |
|---|---|
function | generate | specify | validate | diagnose | promote | refactor | audit | propose | activate | implement | retire |
automation_mode | deterministic | LLM_assisted | hybrid | human_executed |
authority_level | suggest_only | draft_only | write_candidate | write_inactive | mutate_active | approve | publish |
risk_level | low | medium | high | critical |
lifecycle_stage | candidate | draft | simulated | pilot | active | monitored | stable | deprecated | retired |
Finding: any missing or out-of-vocabulary value → severity high.
Step 3 — Authority and blast-radius consistency
mutate_activeor higher requiresrisk_level: highorcritical.blast_radius.forbidden_scopemust be declared formutate_activeor higher.authority_levelmust not exceed what the EOU'sfunctionrequires.
Finding: mismatched authority/risk → severity high.
Step 4 — Required structural fields
Each EOU must declare: purpose (with non_goals), inputs (with forbidden_assumptions), context_manifest, execution (with stop_conditions), outputs, success_criteria, failure_modes (with repair_actions), escalation, responsibility, versioning, blast_radius.
Finding: any missing field → severity medium. Placeholder text (e.g. "Perform bounded operation", "target artifact") → severity high.
Step 5 — Separation of concerns
deterministicwork (scripts, schema checks) must not be mixed withLLM_assistedjudgment steps in a single EOU step.- Self-approval:
responsibility.executormust not equalresponsibility.approver.
Finding: violation → severity high.
Step 6 — Trace preservation
outputsmust includetrace: foundry/runs/{eou_id}/{run_id}.yml.execution.stepsmust be specific enough to reconstruct what ran.
Finding: absent trace output → severity medium.
Step 7 — Generating-EOU additional checks
For every EOU with function: generate:
generation_envelope.forbidden_outputsmust includeactive_eou,approved_eou,constitution_change.generation_envelope.default_statusmust becandidate.generation_budget.max_candidatesmust be declared.minimality_testandoperational_value_testmust be declared.counter_generation.requiredmust betrue.
Finding: any violation → severity high.
Step 8 — Human-approval escalation
- Any EOU that affects publication, finance, health, legal, safety, or constitution must declare
escalation.require_human_when. responsibility.cannot_delegatemust list at least one item for EOUs withauthority_level: mutate_activeor higher.
Finding: absent escalation on high-stakes EOU → severity high.
Step 9 — Value Operationalization Test (ECP-0017 / Rule 96)
Skip if no captured_workflow exists with complete human_approval, OR if the spec's target_object is in rule_96_exempt_target_objects (declared in engine/governance.yml).
Otherwise, verify that success_criteria.must_pass contains at least one entry whose text references at least one domain_value.id of priority ≤ 3 from the loaded captured_workflow.
Severity escalation by lifecycle_stage:
active,monitored,stable→blockingfinding (must repair before promotion)pilot→highdraftorcandidate→medium
Record the operationalized domain_value.id entries in the audit report under a new operationalized_values field so future audits can detect drift (a spec that operationalized dv-001 at v1.0 but no longer does at v2.0 is suspect).
Limit: the test is string-match based. A spec could cite an id without actually operationalizing the value (citation theater). Reviewers SHOULD spot-check value invocations for decorative pattern. The counterfactual-swap defense lands in the deferred agentic-judgment ECP package (see dev-docs/07-agentic-judgment-proposal.md).
Output
Write one file per audited EOU to foundry/audits/eou-audits/{eou_id}.audit.yml:
audit_date:
eou_id:
eou_version:
checks:
- check_name: # faceted_classification | authority_blast_radius | structural_fields | separation_of_concerns | trace | generating_eou | escalation
status: # pass | fail | skip
findings:
- severity: # critical | high | medium | low
field: # YAML field path where the violation occurs
description:
required_fix:
summary:
total_findings:
by_severity: {critical: 0, high: 0, medium: 0, low: 0}
verdict: # PASS | FAIL | CONDITIONAL_PASS
When auditing the whole foundry/ directory, write one file per EOU. Do not merge findings across specs.
Constraints
- Do not modify any EOU spec — produce the audit report only.
- Treat missing required fields as failures, not warnings.
- Run
validate_foundry.pybefore manual checks — its output is authoritative for schema errors.
Scope Note
Upstream: receives an EOU spec id or path. Typically invoked on EOUs at lifecycle_stage pilot or active, or on ECP packages awaiting approval.
Downstream: findings feed $eou-diagnose (when an audit failure needs root-cause diagnosis), $eou-refactor (when findings suggest structural change), and $eou-promote (audit pass is a gate for active promotion).
Related: $eou-validate (sibling — structural validation, deterministic); $foundry-audit (sibling — system-wide rather than per-EOU); $audit-candidate-eou-set (sibling — audits a set, not a spec).
Pipeline: eou-specify → eou-audit → eou-promote (if pass) | eou-diagnose (if fail)