Correct CLI migration test expectations for source8

This commit is contained in:
2026-09-24 22:07:49 -07:00
parent f232482293
commit f10490b13b
3 changed files with 43 additions and 8 deletions
+3 -3
View File
@@ -7,7 +7,7 @@ use std::{
collections::BTreeMap, collections::BTreeMap,
fs, fs,
path::{Path, PathBuf}, path::{Path, PathBuf},
process::{Command, Output}, process::{Command as ProcessCommand, Output},
}; };
#[path = "../../oa-core/src/language/analysis_source/model_oracle.rs"] #[path = "../../oa-core/src/language/analysis_source/model_oracle.rs"]
mod independent_model; mod independent_model;
@@ -65,7 +65,7 @@ impl Fixture {
} }
fn run(&self, options: &[&str]) -> Output { fn run(&self, options: &[&str]) -> Output {
let before = self.inventory(); let before = self.inventory();
let result = Command::new(env!("CARGO_BIN_EXE_arcadia")) let result = ProcessCommand::new(env!("CARGO_BIN_EXE_arcadia"))
.arg("check-mixed") .arg("check-mixed")
.arg(self.entry()) .arg(self.entry())
.args(options) .args(options)
@@ -473,7 +473,7 @@ fn mixed_cli_direct_disk_error_uses_existing_operation_error_envelope() {
f.put(".arcadia-save-reserved.arcadia", document("")); f.put(".arcadia-save-reserved.arcadia", document(""));
let before = f.inventory(); let before = f.inventory();
let entry = f.0.join(".arcadia-save-reserved.arcadia"); let entry = f.0.join(".arcadia-save-reserved.arcadia");
let output = Command::new(env!("CARGO_BIN_EXE_arcadia")) let output = ProcessCommand::new(env!("CARGO_BIN_EXE_arcadia"))
.arg("check-mixed") .arg("check-mixed")
.arg(&entry) .arg(&entry)
.arg("--json") .arg("--json")
+10 -3
View File
@@ -69,6 +69,8 @@ fn complete_alarm_example_preview_then_write_and_fixed_point() {
let source = include_str!( let source = include_str!(
"../../../harness/experiments/textual-authoring-20260911/alarm-response.arcadia" "../../../harness/experiments/textual-authoring-20260911/alarm-response.arcadia"
); );
assert!(source.starts_with("arcadia 7;"));
let migrated_source = source.replacen("arcadia 7;", "arcadia 8;", 1);
fixture.put("project.arcadia", source); fixture.put("project.arcadia", source);
let (code, check) = fixture.cli(&["check"]); let (code, check) = fixture.cli(&["check"]);
assert_eq!(code, 0); assert_eq!(code, 0);
@@ -76,6 +78,8 @@ fn complete_alarm_example_preview_then_write_and_fixed_point() {
let (code, preview) = fixture.cli(&["stabilize"]); let (code, preview) = fixture.cli(&["stabilize"]);
assert_eq!(code, 0); assert_eq!(code, 0);
assert_eq!(preview["identities_to_stabilize"], 40); assert_eq!(preview["identities_to_stabilize"], 40);
assert_eq!(preview["migration"]["from_schema"], 7);
assert_eq!(preview["migration"]["to_schema"], 8);
assert_eq!(preview["status"], "preview"); assert_eq!(preview["status"], "preview");
assert_eq!(fixture.read("project.arcadia"), source); assert_eq!(fixture.read("project.arcadia"), source);
assert!( assert!(
@@ -94,7 +98,10 @@ fn complete_alarm_example_preview_then_write_and_fixed_point() {
for (id, _) in project.identities() { for (id, _) in project.identities() {
stripped = stripped.replace(&format!(" id \"{id}\""), ""); stripped = stripped.replace(&format!(" id \"{id}\""), "");
} }
assert_eq!(stripped, source, "only identity clauses may be inserted"); assert_eq!(
stripped, migrated_source,
"only identity clauses and the schema 7→8 header token may change"
);
let (code, again) = fixture.cli(&["stabilize", "--write"]); let (code, again) = fixture.cli(&["stabilize", "--write"]);
assert_eq!(code, 0); assert_eq!(code, 0);
assert_eq!(again["changes"], serde_json::json!([])); assert_eq!(again["changes"], serde_json::json!([]));
@@ -306,9 +313,9 @@ fn rename_shows_missing_identity_and_separate_source_migration() {
let report = candidate.report(); let report = candidate.report();
assert_eq!(report.identities_to_stabilize, 2); assert_eq!(report.identities_to_stabilize, 2);
assert_eq!(report.migration.as_ref().unwrap().from_schema, 5); assert_eq!(report.migration.as_ref().unwrap().from_schema, 5);
assert_eq!(report.migration.as_ref().unwrap().to_schema, 7); assert_eq!(report.migration.as_ref().unwrap().to_schema, 8);
assert!(report.changes[0].diff.contains("-arcadia 5;")); assert!(report.changes[0].diff.contains("-arcadia 5;"));
assert!(report.changes[0].diff.contains("+arcadia 7;")); assert!(report.changes[0].diff.contains("+arcadia 8;"));
assert!(report.changes[0].after.contains("oa_entity crew")); assert!(report.changes[0].after.contains("oa_entity crew"));
assert_eq!(fixture.read("project.arcadia"), old); assert_eq!(fixture.read("project.arcadia"), old);
assert_eq!(candidate.write().exit_code, 0); assert_eq!(candidate.write().exit_code, 0);
@@ -1,8 +1,8 @@
# Mixed CLI read interface # Mixed CLI read interface
Implements the selected `harness/analysis-mixed-cli-contract-20260925.md` contract Implements the selected `harness/analysis-mixed-cli-contract-20260925.md` contract
in the integration owner's root records. Local implementation checkpoint; no in the integration owner's root records. Local implementation checkpoint;
runtime claim is made by this note. initial execution evidence and remaining acceptance boundaries are recorded below.
`oa_cli::check_mixed(&Path) -> Report` loads `MixedSourceSnapshot`, checks its `oa_cli::check_mixed(&Path) -> Report` loads `MixedSourceSnapshot`, checks its
borrowed original bundle only when discovery diagnostics are empty, and copies borrowed original bundle only when discovery diagnostics are empty, and copies
@@ -35,3 +35,31 @@ metadata error; no parser, formatter or CLI output generates expected reports.
The parent owns compilation/runtime acceptance. This source note does not imply The parent owns compilation/runtime acceptance. This source note does not imply
Linux coverage, full mixed editing, GUI adoption or an atomic disk snapshot. Linux coverage, full mixed editing, GUI adoption or an atomic disk snapshot.
## Initial execution and narrow test corrections
Parent-run source `f2324822936374c5b9092518b986375233dc7882` passed all five
`mixed_source_files` external tests and all six `mixed_cli` executable tests.
The mixed test import nevertheless produced `hidden_glob_reexports` because
`std::process::Command` shadowed the public core `Command` re-export used by the
independent model helper. The local name is now `ProcessCommand`; behavior and
expectations are unchanged.
The initial existing `source_cli` suite completed 10 passes and two failures:
`complete_alarm_example_preview_then_write_and_fixed_point` compared the whole
ID-stripped output against an unchanged schema7 header, and
`rename_shows_missing_identity_and_separate_source_migration` expected target
schema7. Ordinary source has already selected schema8. The correction preserves
the original alarm fixture, explicitly asserts its schema7 prefix and compares
all stripped bytes against exactly one header-token replacement to schema8.
It also asserts the preview's 7→8 migration report. The 40 identities, unchanged
preview, complete saved text and repeated-save fixed-point assertions remain.
The rename fixture still originates at schema5; only its expected migration
target and added diff line change to schema8. No production changes accompany
these evaluator corrections.
Original logs/receipts remain under the integration owner's
`.local/analysis-mixed-cli-gates-20260925/`, including
`mixed-cli-integration-suite-source_cli-f232482-1.*`. This records actual initial
failures rather than claiming they passed; corrected-source reruns and final
acceptance remain the parent's responsibility.