Integrate release recovery, semantic review, coverage and Windows packaging

This commit is contained in:
Codex
2026-09-06 16:31:55 -07:00
parent c091f80e6e
commit 2b2d2bc18b
174 changed files with 27635 additions and 127 deletions
+74
View File
@@ -642,6 +642,11 @@ fn atomic_annotation_full_path_updates_only_selected_row() {
let rows = values_mut(&mut q, b.message);
assert_eq!(rows.len(), 2);
assert!(rows.contains(&retained));
assert_eq!(AnnotationKey::from(&rows[0]), b.first);
assert_eq!(
rows[1], retained,
"Unselected rows retain their authored position"
);
assert!(
rows.iter()
.any(|v| AnnotationKey::from(v) == b.first && v.expression == "new first")
@@ -651,6 +656,73 @@ fn atomic_annotation_full_path_updates_only_selected_row() {
.any(|v| AnnotationKey::from(v) == b.second && v.expression == retained.expression)
);
}
#[test]
fn keeping_keyed_rows_with_an_unrelated_header_candidate_preserves_exact_authored_order() {
for binding in [false, true] {
for reverse in [false, true] {
let mut p = Project::empty();
let (oa, sa, selector, references) = if binding {
let a = scenario_use(&mut p, Layer::Oa, "oa");
let b = scenario_use(&mut p, Layer::Sa, "sa");
(
a.use_id,
b.use_id,
FacetSelector::Binding(KeyPair {
oa: Some(a.referenced),
sa: Some(b.referenced),
}),
BTreeMap::from([(a.referenced, b.referenced)]),
)
} else {
let a = payload(&mut p, Layer::Oa, "oa");
let b = payload(&mut p, Layer::Sa, "sa");
let mut references: BTreeMap<_, _> = a
.first
.path
.iter()
.copied()
.zip(b.first.path.iter().copied())
.collect();
references.insert(a.leaf, b.leaf);
(
a.message,
b.message,
FacetSelector::Annotation(KeyPair {
oa: Some(a.first),
sa: Some(b.first),
}),
references,
)
};
trace(&mut p, oa, sa);
let (source, target) = if reverse { (sa, oa) } else { (oa, sa) };
let mut candidate = p.elements[&target].clone();
candidate.description = "Review the header while retaining authored rows".into();
let mut review = request(
source,
target,
vec![
(selector, SemanticDecision::KeepTarget),
(
FacetSelector::Header(HeaderFacet::Description),
SemanticDecision::Candidate,
),
],
);
if reverse {
review.transition.direction = TransitionDirection::SaToOa;
}
review.references = references;
review
.candidates
.push(SemanticRecord::Element(candidate.clone()));
let accepted = applied(&p, review);
assert_eq!(accepted.elements[&target], candidate);
assert_eq!(accepted.elements[&source], p.elements[&source]);
}
}
}
#[test]
fn atomic_binding_updates_local_and_rejects_pair_collision_and_remapping_without_reset() {
let mut p = Project::empty();
@@ -671,6 +743,8 @@ fn atomic_binding_updates_local_and_rejects_pair_collision_and_remapping_without
r.references = BTreeMap::from([(a.referenced, b.referenced), (a.alternate, b.alternate)]);
let mut q = applied(&p, r.clone());
assert!(bindings_mut(&mut q, b.use_id).contains(&retained));
assert_eq!(bindings_mut(&mut q, b.use_id)[0].referenced, b.referenced);
assert_eq!(bindings_mut(&mut q, b.use_id)[1], retained);
assert!(
bindings_mut(&mut q, b.use_id)
.iter()