Expand description
Target emitters. Each emitter consumes the same CordancePack IR and
writes a deterministic, fence-aware file.
Every emitter:
- Refuses to follow symlinks / Windows reparse points via
cordance_core::fs::safe_write_with_mkdir(ancestor walk included). - Merges fenced regions (
<!-- cordance:begin <key> -->) so hand-edits outside fences survive regeneration. - Sanitises target-controlled strings before fence interpolation so a
hostile
cordance.tomlcan’t inject fake fence markers.
§Golden path
use camino::Utf8PathBuf;
use cordance_core::advise::AdviseReport;
use cordance_core::lock::SourceLock;
use cordance_core::pack::{CordancePack, PackTargets, ProjectIdentity};
use cordance_core::schema;
use cordance_emit::{TargetEmitter, agents_md::AgentsMdEmitter};
let repo_root = Utf8PathBuf::from(".");
let pack = CordancePack {
schema: schema::CORDANCE_PACK_V1.into(),
project: ProjectIdentity {
name: "my-project".into(),
repo_root: repo_root.clone(),
kind: "rust-workspace".into(),
host_os: "linux".into(),
axiom_pin: None,
},
sources: vec![],
doctrine_pins: vec![],
targets: PackTargets::all(),
outputs: vec![],
source_lock: SourceLock::empty(),
advise: AdviseReport::empty(),
residual_risk: vec!["claim_ceiling=candidate".into()],
};
let outputs = AgentsMdEmitter.emit(&pack, &repo_root).expect("emit AGENTS.md");
for out in &outputs {
println!("wrote {} ({} bytes)", out.path, out.bytes);
}Modules§
- agents_
md AGENTS.mdemitter.- claude_
md CLAUDE.mdemitter.- codex
.codex/AGENTS.md+agents/codex/AGENTS.mdemitter.- cursor
.cursor/rules/*.mdcemitter.- evidence_
map - Evidence map emitter. Writes
.cordance/evidence-map.json— the deterministic map from rule/output ID to the doctrine, ADR, schema, or scan anchor that produced it. - harness_
target pai-axiom-project-harness-target.v1JSON emitter.- pack_
json .cordance/pack.jsonIR emitter.
Enums§
Traits§
- Target
Emitter - Trait every target emitter implements.