use std::collections::{BTreeMap, BTreeSet};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(crate) enum Axis {
Harness,
Model,
Role,
Arm,
Stage,
}
const ALL_AXES: [Axis; 5] = [
Axis::Harness,
Axis::Model,
Axis::Role,
Axis::Arm,
Axis::Stage,
];
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub(crate) enum Band {
Preamble,
Harness,
Model,
Role,
Stage,
Project,
}
const ALL_BANDS: [Band; 6] = [
Band::Preamble,
Band::Harness,
Band::Model,
Band::Role,
Band::Stage,
Band::Project,
];
const DEFAULT_SEGMENT: &str = "_default";
impl Band {
pub(crate) fn as_str(self) -> &'static str {
match self {
Band::Preamble => "preamble",
Band::Harness => "harness",
Band::Model => "model",
Band::Role => "role",
Band::Stage => "stage",
Band::Project => "project",
}
}
pub(crate) fn from_segment(seg: &str) -> Option<Band> {
ALL_BANDS.into_iter().find(|b| b.as_str() == seg)
}
pub(crate) fn primary_axis(self) -> Option<Axis> {
match self {
Band::Harness => Some(Axis::Harness),
Band::Model => Some(Axis::Model),
Band::Role => Some(Axis::Role),
Band::Stage => Some(Axis::Stage),
Band::Preamble | Band::Project => None,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(crate) enum Role {
Orchestrator,
Worker,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(crate) enum Arm {
Subagent,
Subprocess,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub(crate) enum Provenance {
Framework,
User,
}
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub(crate) struct Slot {
pub band: Band,
pub label: String,
}
impl Slot {
pub(crate) fn new(band: Band, label: impl Into<String>) -> Slot {
Slot {
band,
label: label.into(),
}
}
pub(crate) fn path(&self) -> String {
format!("{}/{}", self.band.as_str(), self.label)
}
}
#[derive(Debug, Clone, Default, PartialEq, Eq)]
pub(crate) struct Selector {
pub harness: Option<String>,
pub model: BTreeSet<String>,
pub role: Option<Role>,
pub arm: Option<Arm>,
pub stage: Option<String>,
pub replaces: Option<Slot>,
}
impl Selector {
fn depth_of(&self, axis: Axis) -> u32 {
match axis {
Axis::Harness => u32::from(self.harness.is_some()),
Axis::Role => u32::from(self.role.is_some()),
Axis::Arm => u32::from(self.arm.is_some()),
Axis::Stage => u32::from(self.stage.is_some()),
Axis::Model => self.model.iter().map(|p| model_depth(p)).sum(),
}
}
}
#[derive(Debug, Clone)]
pub(crate) struct Snippet {
pub slot: Slot,
pub selector: Selector,
pub provenance: Provenance,
pub body: String,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub(crate) enum BandFilter {
All,
Only(BTreeSet<Band>),
}
impl BandFilter {
pub(crate) fn includes(&self, band: Band) -> bool {
match self {
BandFilter::All => true,
BandFilter::Only(set) => set.contains(&band),
}
}
}
#[derive(Debug, Clone)]
pub(crate) struct ContextVector {
pub role: Role,
pub harness: Option<String>,
pub model: BTreeSet<String>,
pub arm: Option<Arm>,
pub stage: Option<String>,
pub bands: BandFilter,
}
#[derive(Debug, Clone, Default)]
pub(crate) struct SealSet(pub BTreeSet<Slot>);
impl SealSet {
fn contains(&self, slot: &Slot) -> bool {
self.0.contains(slot)
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub(crate) enum ResolveError {
NonTopReplacer(Slot),
DuplicateTarget(Slot),
Cycle(Vec<Slot>),
}
impl std::fmt::Display for ResolveError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
ResolveError::NonTopReplacer(s) => {
write!(
f,
"`replaces` on {} which is not the unique most-specific active snippet for its slot",
s.path()
)
}
ResolveError::DuplicateTarget(s) => {
write!(
f,
"two active snippets `replaces` the same slot {}",
s.path()
)
}
ResolveError::Cycle(slots) => {
let path = slots.iter().map(Slot::path).collect::<Vec<_>>().join(" → ");
write!(f, "`replaces` cycle: {path}")
}
}
}
}
impl std::error::Error for ResolveError {}
pub(crate) fn validate_replaces(corpus: &[Snippet]) -> Result<(), ResolveError> {
let all: Vec<&Snippet> = corpus.iter().collect();
replaces_suppression(&all)?;
Ok(())
}
pub(crate) type Spec = (Vec<(String, u32)>, u32);
type PrecedenceKey = (Band, Spec, Provenance, String);
pub(crate) fn precedence_key(s: &Snippet) -> PrecedenceKey {
(
s.slot.band,
specificity(s.slot.band, &s.selector),
s.provenance,
s.slot.path(),
)
}
fn model_depth(pat: &str) -> u32 {
let count = pat.split('/').filter(|s| *s != DEFAULT_SEGMENT).count();
u32::try_from(count).unwrap_or(u32::MAX)
}
fn model_root_pair(pat: &str) -> (String, u32) {
let root = pat.split('/').next().unwrap_or("").to_string();
(root, model_depth(pat))
}
fn model_pairs(set: &BTreeSet<String>) -> Vec<(String, u32)> {
let mut v: Vec<(String, u32)> = set.iter().map(|p| model_root_pair(p)).collect();
v.sort();
v
}
fn segments_prefix_match(pat: &str, key: &str) -> bool {
let pat_segs: Vec<&str> = pat.split('/').collect();
let key_segs: Vec<&str> = key.split('/').collect();
if pat_segs.len() > key_segs.len() {
return false;
}
pat_segs
.iter()
.zip(key_segs.iter())
.all(|(p, c)| *p == DEFAULT_SEGMENT || p == c)
}
fn model_pattern_matches(pat: &str, ctx: &BTreeSet<String>) -> bool {
ctx.iter().any(|key| segments_prefix_match(pat, key))
}
pub(crate) fn specificity(band: Band, sel: &Selector) -> Spec {
let primary: Vec<(String, u32)> = match band.primary_axis() {
Some(Axis::Model) => model_pairs(&sel.model),
Some(ax) => vec![(String::new(), sel.depth_of(ax))],
None => vec![],
};
let other: u32 = ALL_AXES
.iter()
.filter(|&&ax| Some(ax) != band.primary_axis())
.map(|&ax| sel.depth_of(ax))
.sum();
(primary, other)
}
pub(crate) fn matches(sel: &Selector, ctx: &ContextVector) -> bool {
if let Some(h) = &sel.harness
&& ctx.harness.as_deref() != Some(h.as_str())
{
return false;
}
if !sel.model.is_empty()
&& !sel
.model
.iter()
.all(|p| model_pattern_matches(p, &ctx.model))
{
return false;
}
if let Some(r) = sel.role
&& ctx.role != r
{
return false;
}
if let Some(a) = sel.arm
&& ctx.arm != Some(a)
{
return false;
}
if let Some(s) = &sel.stage
&& ctx.stage.as_deref() != Some(s.as_str())
{
return false;
}
true
}
pub(crate) fn traits_covered(declared: &BTreeSet<String>, corpus: &[Snippet]) -> Vec<String> {
declared
.iter()
.filter(|key| {
let singleton: BTreeSet<String> = std::iter::once((*key).clone()).collect();
!corpus.iter().any(|s| {
s.slot.band == Band::Model
&& !s.selector.model.is_empty()
&& s.selector
.model
.iter()
.all(|p| model_pattern_matches(p, &singleton))
})
})
.cloned()
.collect()
}
pub(crate) fn worker_context(traits: &BTreeSet<String>) -> ContextVector {
let mut bands = BTreeSet::from([Band::Role]);
if !traits.is_empty() {
bands.insert(Band::Model);
}
ContextVector {
role: Role::Worker,
harness: None,
model: traits.clone(),
arm: None,
stage: None,
bands: BandFilter::Only(bands),
}
}
pub(crate) fn resolve(
ctx: &ContextVector,
corpus: &[Snippet],
sealed: &SealSet,
) -> Result<String, ResolveError> {
let active: Vec<&Snippet> = corpus
.iter()
.filter(|s| !(s.provenance == Provenance::User && sealed.contains(&s.slot)))
.filter(|s| ctx.bands.includes(s.slot.band))
.filter(|s| matches(&s.selector, ctx))
.collect();
let suppressed = replaces_suppression(&active)?;
let mut kept: Vec<&Snippet> = active
.iter()
.enumerate()
.filter(|(i, _)| !suppressed.contains(i))
.map(|(_, s)| *s)
.collect();
kept.sort_by_key(|s| precedence_key(s));
Ok(kept
.iter()
.map(|s| s.body.as_str())
.collect::<Vec<_>>()
.join("\n"))
}
struct Replacer {
carrier: usize,
own: Slot,
target: Slot,
}
fn replaces_suppression(active: &[&Snippet]) -> Result<BTreeSet<usize>, ResolveError> {
let mut replacers: Vec<Replacer> = Vec::new();
for (i, s) in active.iter().enumerate() {
if let Some(target) = &s.selector.replaces {
if !is_unique_top_of_slot(active, s) {
return Err(ResolveError::NonTopReplacer(s.slot.clone()));
}
replacers.push(Replacer {
carrier: i,
own: s.slot.clone(),
target: target.clone(),
});
}
}
let mut by_target: BTreeMap<Slot, usize> = BTreeMap::new();
for (i, r) in replacers.iter().enumerate() {
if by_target.insert(r.target.clone(), i).is_some() {
return Err(ResolveError::DuplicateTarget(r.target.clone()));
}
}
if let Some(cycle) = find_replaces_cycle(&replacers) {
return Err(ResolveError::Cycle(cycle));
}
let mut suppressed = BTreeSet::new();
for r in &replacers {
for (j, s) in active.iter().enumerate() {
if s.slot == r.target && j != r.carrier {
suppressed.insert(j);
}
}
}
Ok(suppressed)
}
fn is_unique_top_of_slot(active: &[&Snippet], me: &Snippet) -> bool {
let my_key = precedence_key(me);
let at_or_above = active
.iter()
.filter(|s| s.slot == me.slot && precedence_key(s) >= my_key)
.count();
at_or_above == 1
}
fn find_replaces_cycle(replacers: &[Replacer]) -> Option<Vec<Slot>> {
let mut adj: BTreeMap<Slot, Slot> = BTreeMap::new();
for r in replacers {
if r.own != r.target {
adj.insert(r.own.clone(), r.target.clone());
}
}
for start in adj.keys() {
let mut seen: Vec<Slot> = Vec::new();
let mut node = start.clone();
loop {
if let Some(pos) = seen.iter().position(|s| s == &node) {
return Some(seen.into_iter().skip(pos).collect());
}
seen.push(node.clone());
match adj.get(&node) {
Some(next) => node = next.clone(),
None => break,
}
}
}
None
}
#[cfg(test)]
mod tests {
use super::*;
fn snip(band: Band, label: &str, sel: Selector, prov: Provenance, body: &str) -> Snippet {
Snippet {
slot: Slot::new(band, label),
selector: sel,
provenance: prov,
body: body.into(),
}
}
fn ctx(role: Role) -> ContextVector {
ContextVector {
role,
harness: None,
model: BTreeSet::new(),
arm: None,
stage: None,
bands: BandFilter::All,
}
}
fn resolve_ok(ctx: &ContextVector, corpus: &[Snippet]) -> String {
resolve(ctx, corpus, &SealSet::default()).expect("valid corpus resolves")
}
#[test]
fn band_segment_round_trips() {
for band in ALL_BANDS {
assert_eq!(Band::from_segment(band.as_str()), Some(band));
}
assert_eq!(Band::from_segment("nope"), None);
}
#[test]
fn role_selector_discriminates_orchestrator_from_worker() {
let corpus = vec![
snip(
Band::Role,
"orchestrator",
Selector {
role: Some(Role::Orchestrator),
..Default::default()
},
Provenance::Framework,
"ORCH",
),
snip(
Band::Role,
"worker",
Selector {
role: Some(Role::Worker),
..Default::default()
},
Provenance::Framework,
"WORKER",
),
];
assert_eq!(resolve_ok(&ctx(Role::Orchestrator), &corpus), "ORCH");
assert_eq!(resolve_ok(&ctx(Role::Worker), &corpus), "WORKER");
}
#[test]
fn arm_axis_matches_only_the_pinned_arm() {
let corpus = vec![snip(
Band::Project,
"subprocess-note",
Selector {
arm: Some(Arm::Subprocess),
..Default::default()
},
Provenance::Framework,
"SUBPROC",
)];
let mut sub = ctx(Role::Worker);
sub.arm = Some(Arm::Subprocess);
assert_eq!(resolve_ok(&sub, &corpus), "SUBPROC");
let mut agent = ctx(Role::Worker);
agent.arm = Some(Arm::Subagent);
assert_eq!(resolve_ok(&agent, &corpus), "");
}
#[test]
fn specificity_model_band_exact_beats_shallow_plus_extra_axes() {
let exact = Selector {
model: ["anthropic/claude-sonnet-4".into()].into(),
..Default::default()
};
let shallow = Selector {
model: ["anthropic".into()].into(),
harness: Some("claude".into()),
role: Some(Role::Worker),
..Default::default()
};
assert_eq!(
specificity(Band::Model, &exact),
(vec![("anthropic".to_string(), 2)], 0)
);
assert_eq!(
specificity(Band::Model, &shallow),
(vec![("anthropic".to_string(), 1)], 2)
);
assert!(specificity(Band::Model, &exact) > specificity(Band::Model, &shallow));
}
#[test]
fn specificity_default_tail_does_not_add_depth() {
let vendor_default = Selector {
model: ["anthropic/_default".into()].into(),
..Default::default()
};
let bare_vendor = Selector {
model: ["anthropic".into()].into(),
..Default::default()
};
assert_eq!(
specificity(Band::Model, &vendor_default),
(vec![("anthropic".to_string(), 1)], 0)
);
assert_eq!(
specificity(Band::Model, &bare_vendor),
(vec![("anthropic".to_string(), 1)], 0)
);
}
#[test]
fn specificity_bandless_axis_counts_as_other() {
let sel = Selector {
harness: Some("claude".into()),
model: ["anthropic/claude-sonnet-4".into()].into(),
..Default::default()
};
assert_eq!(
specificity(Band::Harness, &sel),
(vec![(String::new(), 1)], 2)
);
}
#[test]
fn specificity_preamble_has_no_primary_axis() {
let sel = Selector {
harness: Some("claude".into()),
..Default::default()
};
assert_eq!(specificity(Band::Preamble, &sel), (vec![], 1));
}
#[test]
fn band_order_is_fixed_regardless_of_label() {
let corpus = vec![
snip(
Band::Project,
"z",
Selector::default(),
Provenance::Framework,
"PROJECT",
),
snip(
Band::Preamble,
"a",
Selector::default(),
Provenance::Framework,
"PREAMBLE",
),
snip(
Band::Role,
"worker",
Selector {
role: Some(Role::Worker),
..Default::default()
},
Provenance::Framework,
"ROLE",
),
];
assert_eq!(
resolve_ok(&ctx(Role::Worker), &corpus),
"PREAMBLE\nROLE\nPROJECT"
);
}
#[test]
fn specificity_dominates_provenance_framework_exact_beats_user_vendor_default() {
let mut c = ctx(Role::Worker);
c.model = ["anthropic/claude-sonnet-4".into()].into();
let corpus = vec![
snip(
Band::Model,
"anthropic/_default",
Selector {
model: ["anthropic/_default".into()].into(),
..Default::default()
},
Provenance::User,
"USER-DEFAULT",
),
snip(
Band::Model,
"anthropic/claude-sonnet-4",
Selector {
model: ["anthropic/claude-sonnet-4".into()].into(),
..Default::default()
},
Provenance::Framework,
"FW-EXACT",
),
];
assert_eq!(resolve_ok(&c, &corpus), "USER-DEFAULT\nFW-EXACT");
}
#[test]
fn same_slot_equal_specificity_user_wins_the_provenance_tiebreak() {
let corpus = vec![
snip(
Band::Harness,
"claude",
Selector {
harness: Some("claude".into()),
..Default::default()
},
Provenance::Framework,
"FW",
),
snip(
Band::Harness,
"claude",
Selector {
harness: Some("claude".into()),
..Default::default()
},
Provenance::User,
"USER",
),
];
let mut c = ctx(Role::Worker);
c.harness = Some("claude".into());
assert_eq!(resolve_ok(&c, &corpus), "FW\nUSER");
}
#[test]
fn alpha_breaks_equal_band_specificity_provenance() {
let corpus = vec![
snip(
Band::Project,
"zebra",
Selector::default(),
Provenance::Framework,
"Z",
),
snip(
Band::Project,
"alpha",
Selector::default(),
Provenance::Framework,
"A",
),
];
assert_eq!(resolve_ok(&ctx(Role::Worker), &corpus), "A\nZ");
}
#[test]
fn non_match_is_absence_not_override() {
let corpus = vec![
snip(
Band::Preamble,
"u",
Selector::default(),
Provenance::Framework,
"UNIVERSAL",
),
snip(
Band::Harness,
"claude",
Selector {
harness: Some("claude".into()),
..Default::default()
},
Provenance::Framework,
"CLAUDE",
),
];
let mut c = ctx(Role::Worker);
c.harness = Some("pi".into());
assert_eq!(resolve_ok(&c, &corpus), "UNIVERSAL");
}
#[test]
fn missing_tier_degrades_to_empty_no_error() {
let corpus: Vec<Snippet> = vec![];
assert_eq!(resolve_ok(&ctx(Role::Worker), &corpus), "");
}
#[test]
fn band_filter_restricts_output() {
let corpus = vec![
snip(
Band::Preamble,
"u",
Selector::default(),
Provenance::Framework,
"PREAMBLE",
),
snip(
Band::Role,
"worker",
Selector {
role: Some(Role::Worker),
..Default::default()
},
Provenance::Framework,
"ROLE",
),
];
let mut c = ctx(Role::Worker);
c.bands = BandFilter::Only([Band::Role].into_iter().collect());
assert_eq!(resolve_ok(&c, &corpus), "ROLE");
}
#[test]
fn model_default_tail_matches_but_exact_is_not_required() {
let mut c = ctx(Role::Worker);
c.model = ["anthropic/claude-sonnet-4".into()].into();
let corpus = vec![
snip(
Band::Model,
"anthropic",
Selector {
model: ["anthropic".into()].into(),
..Default::default()
},
Provenance::Framework,
"VENDOR",
),
snip(
Band::Model,
"anthropic/_default",
Selector {
model: ["anthropic/_default".into()].into(),
..Default::default()
},
Provenance::Framework,
"VENDOR-DEFAULT",
),
];
assert_eq!(resolve_ok(&c, &corpus), "VENDOR\nVENDOR-DEFAULT");
}
#[test]
fn model_membership_single_pattern_fires_on_any_ctx_member() {
let ctx_set: BTreeSet<String> =
["anthropic/claude-sonnet-4".into(), "openai/gpt-5".into()].into();
assert!(model_pattern_matches("openai", &ctx_set));
assert!(!model_pattern_matches("google", &ctx_set));
let hit = Selector {
model: ["openai".into()].into(),
..Default::default()
};
let miss = Selector {
model: ["google".into()].into(),
..Default::default()
};
let mut c = ctx(Role::Worker);
c.model = ctx_set;
assert!(matches(&hit, &c));
assert!(!matches(&miss, &c));
}
#[test]
fn model_conjunction_matches_intersection_misses_proper_subset() {
let sel = Selector {
model: ["capability/code".into(), "capability/reasoning".into()].into(),
..Default::default()
};
let mut both = ctx(Role::Worker);
both.model = [
"capability/code/high".into(),
"capability/reasoning/high".into(),
]
.into();
let mut subset = ctx(Role::Worker);
subset.model = ["capability/code/high".into()].into();
assert!(
matches(&sel, &both),
"intersection: every pinned pattern hits a member"
);
assert!(
!matches(&sel, &subset),
"a proper subset misses the intersection"
);
assert!(matches(&Selector::default(), &subset));
}
#[test]
fn specificity_root_wise_table_adherence_capability() {
let m = |pats: &[&str]| Selector {
model: pats.iter().map(|p| (*p).to_string()).collect(),
..Default::default()
};
let spec = |sel: &Selector| specificity(Band::Model, sel);
assert!(spec(&m(&["capability/code/high"])) > spec(&m(&["capability/code"])));
let inter = m(&["adherence/low", "capability/code/high"]);
assert!(spec(&inter) > spec(&m(&["adherence/low"])));
let two_sub = m(&["capability/code/high", "capability/reasoning/high"]);
assert!(spec(&two_sub) > spec(&m(&["capability/code/high"])));
assert!(spec(&inter) < spec(&m(&["capability/code/high"])));
assert_eq!(
spec(&m(&["capability/code/high"])),
(vec![("capability".to_string(), 3)], 0)
);
assert!(spec(&m(&["adherence/low"])) < spec(&m(&["capability/code"])));
assert!(spec(&m(&["adherence/low"])) < spec(&m(&["capability/code/high"])));
}
#[test]
fn resolve_is_deterministic_regardless_of_corpus_order() {
let mk = |prov_order: bool| {
let a = snip(
Band::Preamble,
"a",
Selector::default(),
Provenance::Framework,
"A",
);
let z = snip(
Band::Project,
"z",
Selector::default(),
Provenance::Framework,
"Z",
);
if prov_order { vec![a, z] } else { vec![z, a] }
};
assert_eq!(
resolve_ok(&ctx(Role::Worker), &mk(true)),
resolve_ok(&ctx(Role::Worker), &mk(false))
);
}
#[test]
fn sealed_slot_drops_user_disk_twin_but_keeps_framework() {
let slot = Slot::new(Band::Role, "worker");
let corpus = vec![
snip(
Band::Role,
"worker",
Selector {
role: Some(Role::Worker),
..Default::default()
},
Provenance::Framework,
"FW-WORKER",
),
snip(
Band::Role,
"worker",
Selector {
role: Some(Role::Worker),
..Default::default()
},
Provenance::User,
"USER-SHADOW",
),
];
let sealed = SealSet([slot].into_iter().collect());
let out = resolve(&ctx(Role::Worker), &corpus, &sealed).unwrap();
assert_eq!(out, "FW-WORKER");
}
#[test]
fn unsealed_slot_keeps_user_twin() {
let corpus = vec![
snip(
Band::Role,
"worker",
Selector {
role: Some(Role::Worker),
..Default::default()
},
Provenance::Framework,
"FW-WORKER",
),
snip(
Band::Role,
"worker",
Selector {
role: Some(Role::Worker),
..Default::default()
},
Provenance::User,
"USER-WORKER",
),
];
assert_eq!(
resolve_ok(&ctx(Role::Worker), &corpus),
"FW-WORKER\nUSER-WORKER"
);
}
#[test]
fn exposed_slot_self_replaces_single_emit() {
let slot = Slot::new(Band::Role, "worker");
let corpus = vec![
snip(
Band::Role,
"worker",
Selector {
role: Some(Role::Worker),
..Default::default()
},
Provenance::Framework,
"B",
),
snip(
Band::Role,
"worker",
Selector {
role: Some(Role::Worker),
replaces: Some(slot),
..Default::default()
},
Provenance::User,
"B",
),
];
assert_eq!(resolve_ok(&ctx(Role::Worker), &corpus), "B");
}
#[test]
fn exposed_edited_body_suppresses_framework() {
let slot = Slot::new(Band::Role, "worker");
let corpus = vec![
snip(
Band::Role,
"worker",
Selector {
role: Some(Role::Worker),
..Default::default()
},
Provenance::Framework,
"FW-BODY",
),
snip(
Band::Role,
"worker",
Selector {
role: Some(Role::Worker),
replaces: Some(slot),
..Default::default()
},
Provenance::User,
"USER-EDIT",
),
];
let out = resolve_ok(&ctx(Role::Worker), &corpus);
assert_eq!(out, "USER-EDIT");
assert!(
!out.contains("FW-BODY"),
"framework body must be suppressed, got: {out}"
);
}
#[test]
fn replaces_unique_most_specific_suppresses_lower_in_slot() {
let slot = Slot::new(Band::Harness, "claude");
let corpus = vec![
snip(
Band::Harness,
"claude",
Selector {
harness: Some("claude".into()),
..Default::default()
},
Provenance::Framework,
"FW",
),
snip(
Band::Harness,
"claude",
Selector {
harness: Some("claude".into()),
replaces: Some(slot),
..Default::default()
},
Provenance::User,
"USER-ONLY",
),
];
let mut c = ctx(Role::Worker);
c.harness = Some("claude".into());
assert_eq!(resolve_ok(&c, &corpus), "USER-ONLY");
}
#[test]
fn replaces_by_non_top_snippet_is_rejected() {
let slot = Slot::new(Band::Harness, "claude");
let corpus = vec![
snip(
Band::Harness,
"claude",
Selector {
harness: Some("claude".into()),
replaces: Some(slot),
..Default::default()
},
Provenance::Framework,
"FW",
),
snip(
Band::Harness,
"claude",
Selector {
harness: Some("claude".into()),
..Default::default()
},
Provenance::User,
"USER",
),
];
let mut c = ctx(Role::Worker);
c.harness = Some("claude".into());
let err = resolve(&c, &corpus, &SealSet::default()).unwrap_err();
assert_eq!(
err,
ResolveError::NonTopReplacer(Slot::new(Band::Harness, "claude"))
);
}
#[test]
fn two_active_replaces_targeting_one_slot_is_rejected() {
let target = Slot::new(Band::Project, "target");
let corpus = vec![
snip(
Band::Project,
"a",
Selector {
replaces: Some(target.clone()),
..Default::default()
},
Provenance::Framework,
"A",
),
snip(
Band::Project,
"b",
Selector {
replaces: Some(target.clone()),
..Default::default()
},
Provenance::Framework,
"B",
),
snip(
Band::Project,
"target",
Selector::default(),
Provenance::Framework,
"TARGET",
),
];
let err = resolve(&ctx(Role::Worker), &corpus, &SealSet::default()).unwrap_err();
assert_eq!(err, ResolveError::DuplicateTarget(target));
}
#[test]
fn replaces_cycle_is_rejected() {
let a = Slot::new(Band::Project, "a");
let b = Slot::new(Band::Project, "b");
let corpus = vec![
snip(
Band::Project,
"a",
Selector {
replaces: Some(b.clone()),
..Default::default()
},
Provenance::Framework,
"A",
),
snip(
Band::Project,
"b",
Selector {
replaces: Some(a.clone()),
..Default::default()
},
Provenance::Framework,
"B",
),
];
let err = resolve(&ctx(Role::Worker), &corpus, &SealSet::default()).unwrap_err();
match err {
ResolveError::Cycle(slots) => {
assert_eq!(slots.len(), 2);
assert!(slots.contains(&a) && slots.contains(&b));
}
other => panic!("expected cycle, got {other:?}"),
}
}
#[test]
fn replaces_own_slot_self_edge_is_not_a_cycle() {
let slot = Slot::new(Band::Project, "only");
let corpus = vec![
snip(
Band::Project,
"only",
Selector {
replaces: Some(slot),
..Default::default()
},
Provenance::Framework,
"ONLY",
),
snip(
Band::Project,
"other",
Selector::default(),
Provenance::Framework,
"OTHER",
),
];
assert_eq!(resolve_ok(&ctx(Role::Worker), &corpus), "ONLY\nOTHER");
}
fn model_snippet(label: &str, pats: &[&str]) -> Snippet {
snip(
Band::Model,
label,
Selector {
model: pats.iter().map(|p| (*p).to_string()).collect(),
..Default::default()
},
Provenance::Framework,
"BODY",
)
}
#[test]
fn traits_covered_exact_match_is_not_returned() {
let declared: BTreeSet<String> = ["adherence/low".to_string()].into();
let corpus = vec![model_snippet("adherence-low", &["adherence/low"])];
assert_eq!(traits_covered(&declared, &corpus), Vec::<String>::new());
}
#[test]
fn traits_covered_wildcard_default_tail_covers_declared_key() {
let declared: BTreeSet<String> = ["adherence/low".to_string()].into();
let corpus = vec![model_snippet("adherence-default", &["adherence/_default"])];
assert_eq!(traits_covered(&declared, &corpus), Vec::<String>::new());
}
#[test]
fn traits_covered_typo_key_matches_nothing_and_is_returned() {
let declared: BTreeSet<String> = ["adherance/low".to_string()].into();
let corpus = vec![model_snippet("adherence-default", &["adherence/_default"])];
assert_eq!(
traits_covered(&declared, &corpus),
vec!["adherance/low".to_string()]
);
}
#[test]
fn traits_covered_empty_declared_set_is_empty() {
let declared: BTreeSet<String> = BTreeSet::new();
let corpus = vec![model_snippet("adherence-default", &["adherence/_default"])];
assert_eq!(traits_covered(&declared, &corpus), Vec::<String>::new());
}
#[test]
fn worker_context_traitless_is_role_only_and_byte_identical() {
let cx = worker_context(&BTreeSet::new());
assert!(cx.model.is_empty());
assert_eq!(
cx.bands,
BandFilter::Only(BTreeSet::from([Band::Role])),
"a trait-less worker must resolve exactly the role band (VT-4 byte-identity)"
);
}
#[test]
fn worker_context_with_traits_adds_model_band_and_carries_keys() {
let traits: BTreeSet<String> = ["adherence/low".to_string()].into();
let cx = worker_context(&traits);
assert_eq!(cx.model, traits);
assert_eq!(
cx.bands,
BandFilter::Only(BTreeSet::from([Band::Role, Band::Model]))
);
}
}