Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ef28f1784e | ||
|
|
8e59309cbc | ||
|
|
046cdc1b46 | ||
|
|
0e83157e09 |
@@ -5417,17 +5417,11 @@ impl App {
|
||||
self.pan = iced::Vector::new(30., 30.);
|
||||
return;
|
||||
}
|
||||
let mut geometry = oa_core::routing::route_diagram(
|
||||
let geometry = oa_core::routing::route_diagram(
|
||||
self.project(),
|
||||
&self.project().diagrams[&self.active_diagram.unwrap()],
|
||||
&view,
|
||||
);
|
||||
crate::diagram::apply_label_experiment(
|
||||
self.project(),
|
||||
&self.project().diagrams[&self.active_diagram.unwrap()],
|
||||
&view,
|
||||
&mut geometry,
|
||||
);
|
||||
let left = geometry.bounds.position.x;
|
||||
let top = geometry.bounds.position.y;
|
||||
let right = left + geometry.bounds.size.width;
|
||||
@@ -5611,6 +5605,7 @@ fn write_snapshot_inner(
|
||||
.map_err(|errors| crate::document::DocumentError::Source(errors).to_string())?,
|
||||
);
|
||||
}
|
||||
let has_original_destination = previous.is_some();
|
||||
let previous = previous.filter(|disk| {
|
||||
path.parent()
|
||||
.filter(|p| !p.as_os_str().is_empty())
|
||||
@@ -5621,14 +5616,33 @@ fn write_snapshot_inner(
|
||||
== Some(&disk.root)
|
||||
&& entry == disk.bundle.entry
|
||||
});
|
||||
// A missing-file expectation colliding with an existing destination is
|
||||
// not evidence that an observed dependency changed outside the editor.
|
||||
// Keep save_project's conflict reporting unchanged for that latter case.
|
||||
let saving_existing = previous.is_some();
|
||||
let destination_error = |error: source_files::SourceFileError| match error {
|
||||
source_files::SourceFileError::Conflict(paths) => {
|
||||
let guidance = if saving_existing {
|
||||
"Review the new included file's destination before saving."
|
||||
} else if has_original_destination {
|
||||
"Choose a fresh directory for Save As, or use Save All to update the open project's current entry."
|
||||
} else {
|
||||
"Choose a fresh directory for Save As."
|
||||
};
|
||||
format!(
|
||||
"Source destination files already exist: {paths:?}. Existing files are protected. {guidance}"
|
||||
)
|
||||
}
|
||||
other => other.to_string(),
|
||||
};
|
||||
let mut disk = match previous {
|
||||
Some(disk) => disk,
|
||||
None => source_files::new_project(&path, LIMITS).map_err(|e| e.to_string())?,
|
||||
None => source_files::new_project(&path, LIMITS).map_err(&destination_error)?,
|
||||
};
|
||||
for path in snapshot.bundle.files.keys() {
|
||||
if !disk.expectations.contains_key(path) {
|
||||
source_files::expect_new_file(&mut disk, path, LIMITS)
|
||||
.map_err(|e| e.to_string())?;
|
||||
.map_err(&destination_error)?;
|
||||
}
|
||||
}
|
||||
Some(source_files::save_project(&disk, &snapshot, LIMITS).map_err(|e| e.to_string())?)
|
||||
|
||||
@@ -1,5 +1,148 @@
|
||||
use super::*;
|
||||
|
||||
fn saved_multifile_app(directory: &std::path::Path) -> (App, Id, PathBuf) {
|
||||
let mut project = Project::empty();
|
||||
let activity = project
|
||||
.add_element(Kind::Activity, Layer::Oa, "Assess incident", None)
|
||||
.unwrap();
|
||||
let mut app = App::with_project(project);
|
||||
let path = directory.join("project.arcadia");
|
||||
complete_save(&mut app, path.clone());
|
||||
assert!(app.document.bundle().files.len() > 1);
|
||||
(app, activity, path)
|
||||
}
|
||||
|
||||
fn rejected_save_preserves_editor(app: &mut App, path: PathBuf) -> String {
|
||||
let snapshot = app.document.snapshot();
|
||||
let revision = app.document.revision();
|
||||
let undo = app.document.can_undo();
|
||||
let redo = app.document.can_redo();
|
||||
let draft = app.source_workspace.text().to_owned();
|
||||
let original_path = app.path.clone();
|
||||
let dirty = app.dirty();
|
||||
let result = write_snapshot(
|
||||
app.canvas_document,
|
||||
revision,
|
||||
snapshot.clone(),
|
||||
path,
|
||||
app.disk_project.clone(),
|
||||
);
|
||||
let error = match result {
|
||||
Err(error) => error,
|
||||
Ok(_) => panic!("Expected collision refusal"),
|
||||
};
|
||||
let _ = app.update(Message::Saved(Err(error.clone())));
|
||||
assert!(Arc::ptr_eq(&snapshot, &app.document.snapshot()));
|
||||
assert_eq!(app.document.revision(), revision);
|
||||
assert_eq!(app.document.can_undo(), undo);
|
||||
assert_eq!(app.document.can_redo(), redo);
|
||||
assert_eq!(app.source_workspace.text(), draft);
|
||||
assert_eq!(app.path, original_path);
|
||||
assert_eq!(app.dirty(), dirty);
|
||||
error.message
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn same_root_new_entry_collision_preserves_files_draft_and_history() {
|
||||
let directory = tempfile::tempdir().unwrap();
|
||||
let (mut app, activity, original) = saved_multifile_app(directory.path());
|
||||
let bytes: Vec<_> = app
|
||||
.document
|
||||
.bundle()
|
||||
.files
|
||||
.keys()
|
||||
.map(|p| (p.clone(), std::fs::read(directory.path().join(p)).unwrap()))
|
||||
.collect();
|
||||
app.execute(Command::Rename(activity, "Review incident".into()));
|
||||
app.execute(Command::Rename(activity, "Evaluate incident".into()));
|
||||
let _ = app.update(Message::Undo);
|
||||
assert!(app.document.can_undo() && app.document.can_redo());
|
||||
let cursor = app.source_workspace.files[&app.source_workspace.entry].cursor;
|
||||
app.source_workspace.edit(
|
||||
format!("{}\n// retained draft", app.source_workspace.text()),
|
||||
cursor,
|
||||
);
|
||||
let destination = directory.path().join("renamed.arcadia");
|
||||
let error = rejected_save_preserves_editor(&mut app, destination.clone());
|
||||
assert!(error.contains("already exist") && error.contains("Save All"));
|
||||
assert!(!error.contains("changed outside"));
|
||||
assert!(!destination.exists());
|
||||
assert_eq!(app.path, Some(original));
|
||||
for (path, expected) in bytes {
|
||||
assert_eq!(
|
||||
std::fs::read(directory.path().join(path)).unwrap(),
|
||||
expected
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn fresh_root_existing_include_is_protected_before_any_bundle_write() {
|
||||
let original = tempfile::tempdir().unwrap();
|
||||
let destination = tempfile::tempdir().unwrap();
|
||||
let (mut app, activity, _) = saved_multifile_app(original.path());
|
||||
app.execute(Command::Rename(activity, "Review incident".into()));
|
||||
let fragment = app.document.compiled().index.declarations[&activity]
|
||||
.path
|
||||
.clone();
|
||||
let collision = destination.path().join(&fragment);
|
||||
std::fs::create_dir_all(collision.parent().unwrap()).unwrap();
|
||||
std::fs::write(&collision, b"// independent destination work").unwrap();
|
||||
let target = destination.path().join("copy.arcadia");
|
||||
let error = rejected_save_preserves_editor(&mut app, target.clone());
|
||||
assert!(error.contains(&fragment) && error.contains("fresh directory"));
|
||||
assert!(!error.contains("changed outside"));
|
||||
assert!(!target.exists());
|
||||
for path in app.document.bundle().files.keys() {
|
||||
let file = destination.path().join(path);
|
||||
if path == &fragment {
|
||||
assert_eq!(
|
||||
std::fs::read(file).unwrap(),
|
||||
b"// independent destination work"
|
||||
);
|
||||
} else {
|
||||
assert!(!file.exists(), "Unexpected write: {path}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn observed_dependency_change_remains_external_conflict_and_normal_saves_work() {
|
||||
let original = tempfile::tempdir().unwrap();
|
||||
let fresh = tempfile::tempdir().unwrap();
|
||||
let (mut app, activity, path) = saved_multifile_app(original.path());
|
||||
app.execute(Command::Rename(activity, "Review incident".into()));
|
||||
complete_save(&mut app, path.clone());
|
||||
assert!(!app.dirty());
|
||||
let fragment = app.document.compiled().index.declarations[&activity]
|
||||
.path
|
||||
.clone();
|
||||
let entry_before = std::fs::read(&path).unwrap();
|
||||
let original_fragment = std::fs::read(original.path().join(&fragment)).unwrap();
|
||||
std::fs::write(original.path().join(&fragment), b"// external edit").unwrap();
|
||||
app.execute(Command::Rename(activity, "Evaluate incident".into()));
|
||||
let error = rejected_save_preserves_editor(&mut app, path.clone());
|
||||
assert!(error.contains("changed outside") && error.contains(&fragment));
|
||||
assert!(!error.contains("fresh directory"));
|
||||
assert_eq!(std::fs::read(&path).unwrap(), entry_before);
|
||||
assert_eq!(
|
||||
std::fs::read(original.path().join(&fragment)).unwrap(),
|
||||
b"// external edit"
|
||||
);
|
||||
// Restore the observed bytes, then exercise the legitimate existing Save All.
|
||||
std::fs::write(original.path().join(&fragment), original_fragment).unwrap();
|
||||
complete_save(&mut app, path);
|
||||
assert!(!app.dirty());
|
||||
let model = app.project().clone();
|
||||
let target = fresh.path().join("copy.arcadia");
|
||||
complete_save(&mut app, target.clone());
|
||||
let saved = source_files::load_project(&target, LIMITS).unwrap();
|
||||
let compiled = source_project::compile_bundle(&saved.bundle, LIMITS).unwrap();
|
||||
assert_eq!(compiled.decoded.project, model);
|
||||
assert_eq!(&saved.bundle, app.document.bundle());
|
||||
assert!(!app.dirty());
|
||||
}
|
||||
|
||||
fn complete_save(app: &mut App, path: PathBuf) {
|
||||
let receipt = write_snapshot(
|
||||
app.canvas_document,
|
||||
|
||||
@@ -37,9 +37,6 @@ mod port_hit_tests;
|
||||
#[path = "diagram/view_options_tests.rs"]
|
||||
mod view_options_tests;
|
||||
|
||||
#[path = "diagram/label_layout_experiment.rs"]
|
||||
mod label_layout_experiment;
|
||||
|
||||
#[path = "diagram/port_labels.rs"]
|
||||
mod port_labels;
|
||||
pub use port_labels::PortLabels;
|
||||
@@ -91,14 +88,8 @@ pub struct State {
|
||||
cache: RefCell<Option<CachedScene>>,
|
||||
}
|
||||
struct Scene {
|
||||
label_layout: Option<label_layout_experiment::Layout>,
|
||||
profile: label_layout_experiment::Profile,
|
||||
font_version: Option<iced::advanced::graphics::text::Version>,
|
||||
work: Option<Arc<crate::app::allocation_drag::Preview>>,
|
||||
view: ProjectedView,
|
||||
/// Core routing is the gesture baseline. Presentation-only wrapping must
|
||||
/// never become a frozen label in a later core preview.
|
||||
core_routed: Arc<RoutedView>,
|
||||
routed: Arc<RoutedView>,
|
||||
}
|
||||
struct CachedScene {
|
||||
@@ -523,14 +514,6 @@ impl DiagramCanvas<'_> {
|
||||
}
|
||||
}
|
||||
fn scene(&self, state: &State) -> Arc<Scene> {
|
||||
self.scene_with_profile(state, label_layout_experiment::profile())
|
||||
}
|
||||
fn scene_with_profile(
|
||||
&self,
|
||||
state: &State,
|
||||
profile: label_layout_experiment::Profile,
|
||||
) -> Arc<Scene> {
|
||||
let font_version = label_layout_experiment::font_version(profile);
|
||||
if let Some(preview) = self.work_preview()
|
||||
&& state
|
||||
.work
|
||||
@@ -539,32 +522,13 @@ impl DiagramCanvas<'_> {
|
||||
{
|
||||
if let Some(scene) = state.work_cache.borrow().as_ref()
|
||||
&& scene.work.as_ref().is_some_and(|p| Arc::ptr_eq(p, preview))
|
||||
&& scene.profile == profile
|
||||
&& scene.font_version == font_version
|
||||
{
|
||||
return scene.clone();
|
||||
}
|
||||
let core_routed = preview.routed.clone();
|
||||
let mut routed = core_routed.clone();
|
||||
let label_layout = if profile == label_layout_experiment::Profile::Baseline {
|
||||
None
|
||||
} else {
|
||||
label_layout_experiment::apply(
|
||||
preview.project(),
|
||||
&preview.placement.diagram,
|
||||
&preview.placement.view,
|
||||
Arc::make_mut(&mut routed),
|
||||
profile,
|
||||
)
|
||||
};
|
||||
let scene = Arc::new(Scene {
|
||||
label_layout,
|
||||
profile,
|
||||
font_version,
|
||||
work: Some(preview.clone()),
|
||||
view: preview.placement.view.clone(),
|
||||
core_routed,
|
||||
routed,
|
||||
routed: preview.routed.clone(),
|
||||
});
|
||||
*state.work_cache.borrow_mut() = Some(scene.clone());
|
||||
return scene;
|
||||
@@ -590,8 +554,6 @@ impl DiagramCanvas<'_> {
|
||||
&& cache.preview == preview
|
||||
&& cache.route == route
|
||||
&& cache.port == port
|
||||
&& cache.scene.profile == profile
|
||||
&& cache.scene.font_version == font_version
|
||||
{
|
||||
return cache.scene.clone();
|
||||
}
|
||||
@@ -601,7 +563,7 @@ impl DiagramCanvas<'_> {
|
||||
self.project.diagrams[&self.diagram].clone()
|
||||
};
|
||||
let view = self.projected(&diagram);
|
||||
let core_routed = Arc::new(
|
||||
let routed = Arc::new(
|
||||
if let Some(gesture) = state
|
||||
.route_drag
|
||||
.as_ref()
|
||||
@@ -618,25 +580,9 @@ impl DiagramCanvas<'_> {
|
||||
route_diagram(self.project, &diagram, &view)
|
||||
},
|
||||
);
|
||||
let mut routed = core_routed.clone();
|
||||
let label_layout = if profile == label_layout_experiment::Profile::Baseline {
|
||||
None
|
||||
} else {
|
||||
label_layout_experiment::apply(
|
||||
self.project,
|
||||
&diagram,
|
||||
&view,
|
||||
Arc::make_mut(&mut routed),
|
||||
profile,
|
||||
)
|
||||
};
|
||||
let scene = Arc::new(Scene {
|
||||
label_layout,
|
||||
profile,
|
||||
font_version,
|
||||
work: None,
|
||||
view,
|
||||
core_routed,
|
||||
routed,
|
||||
});
|
||||
*state.cache.borrow_mut() = Some(CachedScene {
|
||||
@@ -649,23 +595,7 @@ impl DiagramCanvas<'_> {
|
||||
scene
|
||||
}
|
||||
fn begin_route(&self, state: &mut State, world: Point, handle: Handle, route: EdgeRoute) {
|
||||
self.begin_route_with_profile(
|
||||
state,
|
||||
world,
|
||||
handle,
|
||||
route,
|
||||
label_layout_experiment::profile(),
|
||||
);
|
||||
}
|
||||
fn begin_route_with_profile(
|
||||
&self,
|
||||
state: &mut State,
|
||||
world: Point,
|
||||
handle: Handle,
|
||||
route: EdgeRoute,
|
||||
profile: label_layout_experiment::Profile,
|
||||
) {
|
||||
let baseline = self.scene_with_profile(state, profile).core_routed.clone();
|
||||
let baseline = self.scene(state).routed.clone();
|
||||
state.route_drag = Some(Gesture {
|
||||
context: self.context,
|
||||
start: world,
|
||||
@@ -1425,27 +1355,16 @@ impl canvas::Program<Message> for DiagramCanvas<'_> {
|
||||
Size::new(label.bounds.size.width, label.bounds.size.height),
|
||||
Color::WHITE,
|
||||
);
|
||||
if let Some(layout) = scene
|
||||
.label_layout
|
||||
.as_ref()
|
||||
.filter(|_| edge.id == label_layout_experiment::edge_id())
|
||||
{
|
||||
for line in layout.canvas_lines(if active { style::TEAL } else { style::MUTED })
|
||||
{
|
||||
f.fill_text(line);
|
||||
}
|
||||
} else {
|
||||
f.fill_text(Text {
|
||||
content: label.text.clone(),
|
||||
position: point(label.center),
|
||||
color: if active { style::TEAL } else { style::MUTED },
|
||||
size: 13.into(),
|
||||
align_x: iced::widget::text::Alignment::Center,
|
||||
align_y: iced::alignment::Vertical::Center,
|
||||
max_width: f32::INFINITY,
|
||||
..Default::default()
|
||||
});
|
||||
}
|
||||
f.fill_text(Text {
|
||||
content: label.text.clone(),
|
||||
position: point(label.center),
|
||||
color: if active { style::TEAL } else { style::MUTED },
|
||||
size: 13.into(),
|
||||
align_x: iced::widget::text::Alignment::Center,
|
||||
align_y: iced::alignment::Vertical::Center,
|
||||
max_width: f32::INFINITY,
|
||||
..Default::default()
|
||||
});
|
||||
}
|
||||
if let Some(relation) = project.relations.get(&edge.id) {
|
||||
for end in routing::association_end_geometry(relation, routed) {
|
||||
@@ -2024,30 +1943,7 @@ impl std::fmt::Display for ExportError {
|
||||
}
|
||||
impl std::error::Error for ExportError {}
|
||||
|
||||
/// Private opt-in trial adapter for consumers that already own routed geometry.
|
||||
pub(crate) fn apply_label_experiment(
|
||||
p: &Project,
|
||||
diagram: &Diagram,
|
||||
view: &ProjectedView,
|
||||
routed: &mut RoutedView,
|
||||
) {
|
||||
let _ = label_layout_experiment::apply(
|
||||
p,
|
||||
diagram,
|
||||
view,
|
||||
routed,
|
||||
label_layout_experiment::profile(),
|
||||
);
|
||||
}
|
||||
|
||||
pub fn export_svg(p: &Project, diagram: Id) -> Result<String, ExportError> {
|
||||
export_svg_with_profile(p, diagram, label_layout_experiment::profile())
|
||||
}
|
||||
fn export_svg_with_profile(
|
||||
p: &Project,
|
||||
diagram: Id,
|
||||
profile: label_layout_experiment::Profile,
|
||||
) -> Result<String, ExportError> {
|
||||
let d = p
|
||||
.diagrams
|
||||
.get(&diagram)
|
||||
@@ -2056,8 +1952,7 @@ fn export_svg_with_profile(
|
||||
return Err(ExportError::UnsupportedScenario(diagram));
|
||||
}
|
||||
let view = project_view(p, diagram);
|
||||
let mut routed = route_diagram(p, d, &view);
|
||||
let label_layout = label_layout_experiment::apply(p, d, &view, &mut routed, profile);
|
||||
let routed = route_diagram(p, d, &view);
|
||||
let left = routed.bounds.position.x - 30.;
|
||||
let top = routed.bounds.position.y - 30.;
|
||||
let right = routed.bounds.position.x + routed.bounds.size.width + 30.;
|
||||
@@ -2134,12 +2029,7 @@ fn export_svg_with_profile(
|
||||
.join(" ");
|
||||
svg.push_str(&format!("<path data-edge=\"{}\" d=\"{path}\" fill=\"none\" stroke=\"#8999a9\" stroke-width=\"1.5\"{dashed}{arrow}><title>{}</title></path>",edge.id,escape(p.named(edge.id))));
|
||||
let label = &route.label;
|
||||
if let Some(layout) = label_layout
|
||||
.as_ref()
|
||||
.filter(|_| edge.id == label_layout_experiment::edge_id())
|
||||
{
|
||||
svg.push_str(&layout.svg());
|
||||
} else if !label.text.is_empty() {
|
||||
if !label.text.is_empty() {
|
||||
svg.push_str(&format!("<rect x=\"{}\" y=\"{}\" width=\"{}\" height=\"{}\" fill=\"white\"/><text x=\"{}\" y=\"{}\" text-anchor=\"middle\" dominant-baseline=\"central\" font-family=\"sans-serif\" font-size=\"13\" fill=\"#637487\">{}</text>",label.bounds.position.x,label.bounds.position.y,label.bounds.size.width,label.bounds.size.height,label.center.x,label.center.y,escape(&label.text)));
|
||||
}
|
||||
if let Some(relation) = p.relations.get(&edge.id) {
|
||||
|
||||
@@ -421,19 +421,14 @@ fn coincident_attachment_handles_honor_explicit_end_choice() {
|
||||
EdgeEnd::Target,
|
||||
)));
|
||||
let c = canvas(&app, 1.);
|
||||
let core_routed = Arc::new(route_diagram(
|
||||
c.project,
|
||||
&c.project.diagrams[&c.diagram],
|
||||
&projection::project_view(c.project, c.diagram),
|
||||
));
|
||||
let mut scene = Scene {
|
||||
label_layout: None,
|
||||
profile: label_layout_experiment::Profile::Baseline,
|
||||
font_version: None,
|
||||
work: None,
|
||||
view: projection::project_view(c.project, c.diagram),
|
||||
routed: core_routed.clone(),
|
||||
core_routed,
|
||||
routed: Arc::new(route_diagram(
|
||||
c.project,
|
||||
&c.project.diagrams[&c.diagram],
|
||||
&projection::project_view(c.project, c.diagram),
|
||||
)),
|
||||
};
|
||||
let routed = Arc::make_mut(&mut scene.routed);
|
||||
let edge = routed.edges.get_mut(&c.selected).unwrap();
|
||||
|
||||
@@ -1,767 +0,0 @@
|
||||
//! Explicit, one-fixture visual experiment. No persisted formatting policy.
|
||||
use super::*;
|
||||
use iced::advanced::{graphics::text as graphics_text, text as shaped};
|
||||
use shaped::Paragraph as _;
|
||||
use std::sync::{Mutex, OnceLock};
|
||||
|
||||
const DIAGRAM: u128 = 0x00000000003840008000000000000001;
|
||||
const EDGE: u128 = 0x63009b5f539e5914b630ec6b7fefb4d5;
|
||||
pub(super) fn edge_id() -> Id {
|
||||
Id::from_u128(EDGE)
|
||||
}
|
||||
|
||||
const NAME: &str = "Technician service conversation";
|
||||
const FONT_SIZE: f32 = 13.;
|
||||
const ADVANCE: f32 = 16.;
|
||||
|
||||
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
|
||||
pub(super) enum Profile {
|
||||
#[default]
|
||||
Baseline,
|
||||
E,
|
||||
F,
|
||||
}
|
||||
pub(super) fn profile() -> Profile {
|
||||
static PROFILE: OnceLock<Profile> = OnceLock::new();
|
||||
*PROFILE.get_or_init(
|
||||
|| match std::env::var("ARCADIA_LABEL_EXPERIMENT").as_deref() {
|
||||
Ok("E") => Profile::E,
|
||||
Ok("F") => Profile::F,
|
||||
_ => Profile::Baseline,
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
struct MeasuredLine {
|
||||
text: &'static str,
|
||||
width: f32,
|
||||
baseline: f32,
|
||||
family: String,
|
||||
}
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
pub(super) struct Line {
|
||||
pub text: &'static str,
|
||||
pub position: Position,
|
||||
pub baseline_y: f32,
|
||||
pub width: f32,
|
||||
pub family: String,
|
||||
}
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
pub(super) struct Layout {
|
||||
pub canonical_text: String,
|
||||
pub lines: Vec<Line>,
|
||||
pub geometry: routing::EdgeLabelGeometry,
|
||||
/// Authored moves retain their shape even outside the automatic guard.
|
||||
pub clear: bool,
|
||||
}
|
||||
|
||||
pub(super) fn font_version(profile: Profile) -> Option<graphics_text::Version> {
|
||||
(profile != Profile::Baseline).then(|| {
|
||||
graphics_text::font_system()
|
||||
.read()
|
||||
.expect("Read font system")
|
||||
.version()
|
||||
})
|
||||
}
|
||||
|
||||
fn measured(profile: Profile) -> Option<Arc<Vec<MeasuredLine>>> {
|
||||
type Entry = (Profile, graphics_text::Version, Arc<Vec<MeasuredLine>>);
|
||||
static CACHE: OnceLock<Mutex<Vec<Entry>>> = OnceLock::new();
|
||||
let version = font_version(profile)?;
|
||||
let mut cache = CACHE.get_or_init(|| Mutex::new(Vec::new())).lock().ok()?;
|
||||
if let Some((_, _, lines)) = cache
|
||||
.iter()
|
||||
.find(|(p, v, _)| *p == profile && *v == version)
|
||||
{
|
||||
return Some(lines.clone());
|
||||
}
|
||||
let strings: &[&'static str] = match profile {
|
||||
Profile::Baseline => return None,
|
||||
Profile::E => &["Technician service", "conversation"],
|
||||
Profile::F => &["Technician", "service", "conversation"],
|
||||
};
|
||||
let mut lines = Vec::new();
|
||||
for &content in strings {
|
||||
let paragraph = graphics_text::Paragraph::with_text(shaped::Text {
|
||||
content,
|
||||
bounds: Size::INFINITE,
|
||||
size: FONT_SIZE.into(),
|
||||
line_height: shaped::LineHeight::Absolute(ADVANCE.into()),
|
||||
font: iced::Font::default(),
|
||||
align_x: shaped::Alignment::Left,
|
||||
align_y: iced::alignment::Vertical::Top,
|
||||
shaping: shaped::Shaping::Basic,
|
||||
wrapping: shaped::Wrapping::None,
|
||||
});
|
||||
let mut runs = paragraph.buffer().layout_runs();
|
||||
let run = runs.next()?;
|
||||
if runs.next().is_some() || run.rtl || run.glyphs.is_empty() {
|
||||
return None;
|
||||
}
|
||||
let width = paragraph.min_width();
|
||||
if !width.is_finite() || width <= 0. || paragraph.min_height() > ADVANCE + 0.01 {
|
||||
return None;
|
||||
}
|
||||
// This fixed English witness must resolve to one actual font face.
|
||||
// Mixed fallback is not silently exported as a generic SVG font.
|
||||
let font_id = run.glyphs.first()?.font_id;
|
||||
if run.glyphs.iter().any(|glyph| glyph.font_id != font_id) {
|
||||
return None;
|
||||
}
|
||||
let family = graphics_text::font_system()
|
||||
.write()
|
||||
.ok()?
|
||||
.raw()
|
||||
.db()
|
||||
.face(font_id)?
|
||||
.families
|
||||
.first()?
|
||||
.0
|
||||
.clone();
|
||||
lines.push(MeasuredLine {
|
||||
text: content,
|
||||
width,
|
||||
baseline: run.line_y,
|
||||
family,
|
||||
});
|
||||
}
|
||||
let lines = Arc::new(lines);
|
||||
cache.retain(|(_, v, _)| *v == version);
|
||||
cache.push((profile, version, lines.clone()));
|
||||
Some(lines)
|
||||
}
|
||||
|
||||
/// Runs before any scene consumer; never edits the model or any routed points.
|
||||
pub(super) fn apply(
|
||||
project: &Project,
|
||||
diagram: &Diagram,
|
||||
view: &ProjectedView,
|
||||
routed: &mut RoutedView,
|
||||
profile: Profile,
|
||||
) -> Option<Layout> {
|
||||
if profile == Profile::Baseline || diagram.id.as_u128() != DIAGRAM {
|
||||
return None;
|
||||
}
|
||||
let id = Id::from_u128(EDGE);
|
||||
let edge = routed.edges.get(&id)?;
|
||||
if edge.label.text != NAME
|
||||
|| project.relations.get(&id)?.name != NAME
|
||||
|| edge.custom_suspended
|
||||
|| view
|
||||
.nodes
|
||||
.iter()
|
||||
.any(|node| node.visual_parent.is_some() || node.collapsed)
|
||||
{
|
||||
return None;
|
||||
}
|
||||
let metrics = measured(profile)?;
|
||||
let width = metrics.iter().map(|line| line.width).fold(0., f32::max) + 16.;
|
||||
let height = 8. + ADVANCE * metrics.len() as f32;
|
||||
let authored = diagram
|
||||
.routes
|
||||
.iter()
|
||||
.find(|route| route.edge == id)
|
||||
.and_then(|route| route.label.as_ref());
|
||||
let fraction = authored.map_or(if profile == Profile::E { 0.5 } else { 0.55 }, |label| {
|
||||
label.fraction
|
||||
});
|
||||
let anchor = routing::point_along_polyline(&edge.points, fraction)?;
|
||||
let offset = authored.map_or(
|
||||
Position {
|
||||
x: if profile == Profile::E {
|
||||
0.
|
||||
} else {
|
||||
18. + width / 2.
|
||||
},
|
||||
y: 0.,
|
||||
},
|
||||
|label| label.offset,
|
||||
);
|
||||
let center = Position {
|
||||
x: anchor.x + offset.x,
|
||||
y: anchor.y + offset.y,
|
||||
};
|
||||
let bounds = routing::RoutingBounds {
|
||||
position: Position {
|
||||
x: center.x - width / 2.,
|
||||
y: center.y - height / 2.,
|
||||
},
|
||||
size: oa_core::Size { width, height },
|
||||
};
|
||||
let clear = guarded(project, view, routed, id, bounds, profile);
|
||||
if authored.is_none() && !clear {
|
||||
return None;
|
||||
}
|
||||
let geometry = routing::EdgeLabelGeometry {
|
||||
text: edge.label.text.clone(),
|
||||
fraction,
|
||||
anchor,
|
||||
center,
|
||||
bounds,
|
||||
};
|
||||
let lines = metrics
|
||||
.iter()
|
||||
.enumerate()
|
||||
.map(|(index, line)| {
|
||||
let top = bounds.position.y + 4. + ADVANCE * index as f32;
|
||||
Line {
|
||||
text: line.text,
|
||||
position: Position {
|
||||
x: center.x - line.width / 2.,
|
||||
y: top,
|
||||
},
|
||||
baseline_y: top + line.baseline,
|
||||
width: line.width,
|
||||
family: line.family.clone(),
|
||||
}
|
||||
})
|
||||
.collect();
|
||||
let layout = Layout {
|
||||
canonical_text: edge.label.text.clone(),
|
||||
lines,
|
||||
geometry,
|
||||
clear,
|
||||
};
|
||||
routed.edges.get_mut(&id)?.label = layout.geometry.clone();
|
||||
// Retain conservative existing bounds; add authored placements outside them.
|
||||
// The fixed automatic witnesses are inside the unchanged node extents.
|
||||
let old = routed.bounds;
|
||||
let left = old.position.x.min(bounds.position.x);
|
||||
let top = old.position.y.min(bounds.position.y);
|
||||
let right = (old.position.x + old.size.width).max(bounds.position.x + width);
|
||||
let bottom = (old.position.y + old.size.height).max(bounds.position.y + height);
|
||||
routed.bounds = routing::RoutingBounds {
|
||||
position: Position { x: left, y: top },
|
||||
size: oa_core::Size {
|
||||
width: right - left,
|
||||
height: bottom - top,
|
||||
},
|
||||
};
|
||||
Some(layout)
|
||||
}
|
||||
|
||||
fn rectangle(bounds: routing::RoutingBounds, padding: f32) -> Rectangle {
|
||||
Rectangle {
|
||||
x: bounds.position.x - padding,
|
||||
y: bounds.position.y - padding,
|
||||
width: bounds.size.width + 2. * padding,
|
||||
height: bounds.size.height + 2. * padding,
|
||||
}
|
||||
}
|
||||
fn overlap(a: Rectangle, b: Rectangle) -> bool {
|
||||
a.x < b.x + b.width && a.x + a.width > b.x && a.y < b.y + b.height && a.y + a.height > b.y
|
||||
}
|
||||
fn crossing(bounds: Rectangle, span: &[Position]) -> bool {
|
||||
let [a, b] = [span[0], span[1]];
|
||||
if a.x == b.x {
|
||||
a.x >= bounds.x
|
||||
&& a.x <= bounds.x + bounds.width
|
||||
&& a.y.min(b.y) <= bounds.y + bounds.height
|
||||
&& a.y.max(b.y) >= bounds.y
|
||||
} else if a.y == b.y {
|
||||
a.y >= bounds.y
|
||||
&& a.y <= bounds.y + bounds.height
|
||||
&& a.x.min(b.x) <= bounds.x + bounds.width
|
||||
&& a.x.max(b.x) >= bounds.x
|
||||
} else {
|
||||
// The bounded witness supports orthogonal geometry only.
|
||||
true
|
||||
}
|
||||
}
|
||||
fn guarded(
|
||||
project: &Project,
|
||||
view: &ProjectedView,
|
||||
routed: &RoutedView,
|
||||
id: Id,
|
||||
bounds: routing::RoutingBounds,
|
||||
profile: Profile,
|
||||
) -> bool {
|
||||
let label = rectangle(bounds, 0.);
|
||||
if view.nodes.iter().any(|node| {
|
||||
overlap(
|
||||
label,
|
||||
Rectangle {
|
||||
x: node.position.x - 12.,
|
||||
y: node.position.y - 12.,
|
||||
width: node.size.width + 24.,
|
||||
height: node.size.height + 24.,
|
||||
},
|
||||
)
|
||||
}) {
|
||||
return false;
|
||||
}
|
||||
let stroke_bounds = rectangle(bounds, 3.);
|
||||
let mut own_crossings = Vec::new();
|
||||
for edge in routed.edges.values() {
|
||||
if edge.id != id
|
||||
&& !edge.label.text.is_empty()
|
||||
&& overlap(label, rectangle(edge.label.bounds, 4.))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if let Some(relation) = project.relations.get(&edge.id) {
|
||||
for end in routing::association_end_geometry(relation, edge) {
|
||||
if !end.label.text.is_empty() && overlap(label, rectangle(end.label.bounds, 4.)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
for span in edge.points.windows(2) {
|
||||
if crossing(stroke_bounds, span) {
|
||||
if edge.id != id || profile == Profile::F {
|
||||
return false;
|
||||
}
|
||||
own_crossings.push(span);
|
||||
}
|
||||
}
|
||||
}
|
||||
if profile == Profile::E {
|
||||
let [span] = own_crossings.as_slice() else {
|
||||
return false;
|
||||
};
|
||||
let [a, b] = [span[0], span[1]];
|
||||
// One complete straight crossing, not a bend, lead, tip, or shared run.
|
||||
(a.x == b.x
|
||||
&& a.y.min(b.y) < stroke_bounds.y
|
||||
&& a.y.max(b.y) > stroke_bounds.y + stroke_bounds.height)
|
||||
|| (a.y == b.y
|
||||
&& a.x.min(b.x) < stroke_bounds.x
|
||||
&& a.x.max(b.x) > stroke_bounds.x + stroke_bounds.width)
|
||||
} else {
|
||||
true
|
||||
}
|
||||
}
|
||||
|
||||
impl Layout {
|
||||
pub(super) fn canvas_lines(&self, color: Color) -> impl Iterator<Item = Text> + '_ {
|
||||
self.lines.iter().map(move |line| Text {
|
||||
content: line.text.into(),
|
||||
position: point(line.position),
|
||||
color,
|
||||
size: FONT_SIZE.into(),
|
||||
line_height: shaped::LineHeight::Absolute(ADVANCE.into()),
|
||||
font: iced::Font::default(),
|
||||
align_x: shaped::Alignment::Left,
|
||||
align_y: iced::alignment::Vertical::Top,
|
||||
shaping: shaped::Shaping::Basic,
|
||||
max_width: f32::INFINITY,
|
||||
})
|
||||
}
|
||||
pub(super) fn svg(&self) -> String {
|
||||
let bounds = self.geometry.bounds;
|
||||
let mut out = format!(
|
||||
"<g data-label-experiment=\"wrapped\"><title>{}</title><rect x=\"{}\" y=\"{}\" width=\"{}\" height=\"{}\" fill=\"white\"/>",
|
||||
escape(&self.canonical_text),
|
||||
bounds.position.x,
|
||||
bounds.position.y,
|
||||
bounds.size.width,
|
||||
bounds.size.height
|
||||
);
|
||||
for line in &self.lines {
|
||||
out.push_str(&format!("<text x=\"{}\" y=\"{}\" font-family=\"{}\" font-size=\"13\" fill=\"#637487\">{}</text>",
|
||||
line.position.x, line.baseline_y, escape(&line.family), escape(line.text)));
|
||||
}
|
||||
out.push_str("</g>");
|
||||
out
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
fn fixture() -> (Project, Id) {
|
||||
let p: Project = serde_json::from_slice(include_bytes!(
|
||||
"../../../../harness/experiments/wrapped-label-20261001/fixture/eight-card.json"
|
||||
))
|
||||
.unwrap();
|
||||
(p, Id::from_u128(DIAGRAM))
|
||||
}
|
||||
fn canvas(p: &Project, diagram: Id) -> DiagramCanvas<'_> {
|
||||
DiagramCanvas {
|
||||
selection: None,
|
||||
allocation: None,
|
||||
project: p,
|
||||
view_index: None,
|
||||
diagram,
|
||||
selected: edge_id(),
|
||||
navigation_focus: None,
|
||||
zoom: 1.,
|
||||
pan: Vector::ZERO,
|
||||
context: Context {
|
||||
document: p.id,
|
||||
diagram,
|
||||
revision: 0,
|
||||
epoch: 0,
|
||||
},
|
||||
selected_bend: None,
|
||||
selected_attachment: None,
|
||||
editable: true,
|
||||
placing: false,
|
||||
connection: None,
|
||||
}
|
||||
}
|
||||
#[test]
|
||||
fn baseline_is_exact_and_wrapping_changes_only_target_derived_geometry() {
|
||||
let (p, id) = fixture();
|
||||
let before = serde_json::to_vec(&p).unwrap();
|
||||
let diagram = &p.diagrams[&id];
|
||||
let view = project_view(&p, id);
|
||||
let baseline = route_diagram(&p, diagram, &view);
|
||||
assert_eq!(baseline.edges.len(), 12);
|
||||
let mut unchanged = baseline.clone();
|
||||
assert!(apply(&p, diagram, &view, &mut unchanged, Profile::Baseline).is_none());
|
||||
assert_eq!(unchanged, baseline);
|
||||
for profile in [Profile::E, Profile::F] {
|
||||
let mut routed = baseline.clone();
|
||||
let layout =
|
||||
apply(&p, diagram, &view, &mut routed, profile).expect("Measured witness must fit");
|
||||
assert!(layout.clear);
|
||||
assert_eq!(layout.canonical_text, NAME);
|
||||
assert_eq!(
|
||||
layout
|
||||
.lines
|
||||
.iter()
|
||||
.map(|line| line.text)
|
||||
.collect::<Vec<_>>()
|
||||
.join(" "),
|
||||
NAME
|
||||
);
|
||||
assert_eq!(routed.edges[&edge_id()].label.text, NAME);
|
||||
for (id, old) in &baseline.edges {
|
||||
assert_eq!(routed.edges[id].points, old.points);
|
||||
if *id != edge_id() {
|
||||
assert_eq!(&routed.edges[id], old);
|
||||
}
|
||||
}
|
||||
let mut restored = routed.clone();
|
||||
restored.edges.get_mut(&edge_id()).unwrap().label =
|
||||
baseline.edges[&edge_id()].label.clone();
|
||||
assert_eq!(
|
||||
restored, baseline,
|
||||
"No paths, ports, solver state, other labels or scene extents change"
|
||||
);
|
||||
assert_eq!(
|
||||
layout.geometry.bounds.size.height,
|
||||
8. + ADVANCE * layout.lines.len() as f32
|
||||
);
|
||||
let max_width = layout
|
||||
.lines
|
||||
.iter()
|
||||
.map(|line| line.width)
|
||||
.fold(0., f32::max);
|
||||
assert_eq!(layout.geometry.bounds.size.width, max_width + 16.);
|
||||
assert!(
|
||||
layout
|
||||
.lines
|
||||
.iter()
|
||||
.all(|line| !line.family.is_empty() && line.width > 0.)
|
||||
);
|
||||
if profile == Profile::F {
|
||||
assert_eq!(layout.geometry.fraction, 0.55);
|
||||
assert!(
|
||||
(layout.geometry.bounds.position.x - layout.geometry.anchor.x - 18.).abs()
|
||||
< 0.001
|
||||
);
|
||||
assert!(
|
||||
layout.geometry.bounds.size.width < 114.5,
|
||||
"Measured F loses own-is-closer margin"
|
||||
);
|
||||
} else {
|
||||
assert_eq!(layout.geometry.fraction, 0.5);
|
||||
assert_eq!(layout.geometry.center, layout.geometry.anchor);
|
||||
}
|
||||
println!(
|
||||
"{profile:?}: bounds={:?}; lines={:?}",
|
||||
layout.geometry.bounds, layout.lines
|
||||
);
|
||||
}
|
||||
assert_eq!(serde_json::to_vec(&p).unwrap(), before);
|
||||
}
|
||||
#[test]
|
||||
fn measured_backing_canvas_svg_picking_and_focus_share_geometry() {
|
||||
let (p, id) = fixture();
|
||||
let c = canvas(&p, id);
|
||||
for profile in [Profile::E, Profile::F] {
|
||||
let state = State::default();
|
||||
let scene = c.scene_with_profile(&state, profile);
|
||||
let layout = scene.label_layout.as_ref().unwrap();
|
||||
let bounds = rectangle(layout.geometry.bounds, 0.);
|
||||
let texts = layout.canvas_lines(Color::BLACK).collect::<Vec<_>>();
|
||||
let svg = super::super::export_svg_with_profile(&p, id, profile).unwrap();
|
||||
assert!(svg.contains(&layout.svg()));
|
||||
assert_eq!(
|
||||
crate::diagram_usage::edge_focus_bounds(&scene.routed.edges[&edge_id()]),
|
||||
bounds
|
||||
);
|
||||
for (line, text) in layout.lines.iter().zip(texts) {
|
||||
assert_eq!(text.content, line.text);
|
||||
assert_eq!(text.position, point(line.position));
|
||||
assert_eq!(text.size.0, FONT_SIZE);
|
||||
assert_eq!(
|
||||
text.line_height,
|
||||
shaped::LineHeight::Absolute(ADVANCE.into())
|
||||
);
|
||||
assert!(line.position.x >= bounds.x + 7.99);
|
||||
assert!(line.position.x + line.width <= bounds.x + bounds.width - 7.99);
|
||||
assert_eq!(
|
||||
c.hit_label(
|
||||
&scene.routed,
|
||||
Point::new(line.position.x + line.width / 2., line.position.y + 8.)
|
||||
),
|
||||
Some(edge_id())
|
||||
);
|
||||
assert!(svg.contains(&format!(
|
||||
"x=\"{}\" y=\"{}\" font-family=\"{}\"",
|
||||
line.position.x,
|
||||
line.baseline_y,
|
||||
escape(&line.family)
|
||||
)));
|
||||
}
|
||||
assert_eq!(
|
||||
c.hit_label(&scene.routed, Point::new(bounds.x + 1., bounds.y + 1.)),
|
||||
Some(edge_id())
|
||||
);
|
||||
}
|
||||
}
|
||||
#[test]
|
||||
fn automatic_guard_refuses_foreign_coincident_stroke_and_card() {
|
||||
let (p, id) = fixture();
|
||||
let diagram = &p.diagrams[&id];
|
||||
let view = project_view(&p, id);
|
||||
let baseline = route_diagram(&p, diagram, &view);
|
||||
for profile in [Profile::E, Profile::F] {
|
||||
let mut valid = baseline.clone();
|
||||
let layout = apply(&p, diagram, &view, &mut valid, profile).unwrap();
|
||||
let mut blocked = baseline.clone();
|
||||
let foreign = blocked
|
||||
.edges
|
||||
.keys()
|
||||
.copied()
|
||||
.find(|id| *id != edge_id())
|
||||
.unwrap();
|
||||
let bounds = layout.geometry.bounds;
|
||||
blocked.edges.get_mut(&foreign).unwrap().points = vec![
|
||||
Position {
|
||||
x: layout.geometry.center.x,
|
||||
y: bounds.position.y - 40.,
|
||||
},
|
||||
Position {
|
||||
x: layout.geometry.center.x,
|
||||
y: bounds.position.y + bounds.size.height + 40.,
|
||||
},
|
||||
];
|
||||
let snapshot = blocked.clone();
|
||||
assert!(apply(&p, diagram, &view, &mut blocked, profile).is_none());
|
||||
assert_eq!(blocked, snapshot);
|
||||
let mut occluded_view = view.clone();
|
||||
occluded_view.nodes[0].position = bounds.position;
|
||||
let mut routed = baseline.clone();
|
||||
assert!(apply(&p, diagram, &occluded_view, &mut routed, profile).is_none());
|
||||
assert_eq!(routed, baseline);
|
||||
}
|
||||
}
|
||||
#[test]
|
||||
fn authored_fraction_offset_keep_shape_even_during_conflicting_move() {
|
||||
let (mut p, id) = fixture();
|
||||
let view = project_view(&p, id);
|
||||
for profile in [Profile::E, Profile::F] {
|
||||
let original = route_diagram(&p, &p.diagrams[&id], &view);
|
||||
let mut automatic = original.clone();
|
||||
let initial = apply(&p, &p.diagrams[&id], &view, &mut automatic, profile).unwrap();
|
||||
let offset = Position {
|
||||
x: initial.geometry.center.x - initial.geometry.anchor.x + 17.,
|
||||
y: -9.,
|
||||
};
|
||||
p.diagrams.get_mut(&id).unwrap().routes = vec![EdgeRoute {
|
||||
edge: edge_id(),
|
||||
source_attachment: None,
|
||||
target_attachment: None,
|
||||
waypoints: vec![],
|
||||
label: Some(EdgeLabel {
|
||||
fraction: initial.geometry.fraction,
|
||||
offset,
|
||||
}),
|
||||
}];
|
||||
let c = canvas(&p, id);
|
||||
let state = State::default();
|
||||
let scene = c.scene_with_profile(&state, profile);
|
||||
let moved = scene.label_layout.as_ref().unwrap();
|
||||
assert_eq!(
|
||||
moved.lines.iter().map(|line| line.text).collect::<Vec<_>>(),
|
||||
initial
|
||||
.lines
|
||||
.iter()
|
||||
.map(|line| line.text)
|
||||
.collect::<Vec<_>>()
|
||||
);
|
||||
assert_eq!(moved.geometry.fraction, initial.geometry.fraction);
|
||||
assert!((moved.geometry.center.x - moved.geometry.anchor.x - offset.x).abs() < 0.001);
|
||||
assert!((moved.geometry.center.y - moved.geometry.anchor.y - offset.y).abs() < 0.001);
|
||||
let mut preview = State {
|
||||
context: Some(c.context),
|
||||
..State::default()
|
||||
};
|
||||
preview.route_drag = Some(Gesture {
|
||||
context: c.context,
|
||||
start: point(moved.geometry.center),
|
||||
handle: Handle::Label { original: offset },
|
||||
route: p.diagrams[&id].routes[0].clone(),
|
||||
changed: true,
|
||||
baseline: scene.core_routed.clone(),
|
||||
});
|
||||
preview
|
||||
.route_drag
|
||||
.as_mut()
|
||||
.unwrap()
|
||||
.route
|
||||
.label
|
||||
.as_mut()
|
||||
.unwrap()
|
||||
.offset
|
||||
.x += 100.;
|
||||
let dragged = c.scene_with_profile(&preview, profile);
|
||||
let layout = dragged.label_layout.as_ref().unwrap();
|
||||
assert_eq!(layout.lines.len(), moved.lines.len());
|
||||
assert!(
|
||||
(layout.geometry.center.x - layout.geometry.anchor.x - offset.x - 100.).abs()
|
||||
< 0.001
|
||||
);
|
||||
for (id, edge) in &scene.routed.edges {
|
||||
assert_eq!(dragged.routed.edges[id].points, edge.points);
|
||||
}
|
||||
p.diagrams.get_mut(&id).unwrap().routes.clear();
|
||||
}
|
||||
}
|
||||
#[test]
|
||||
fn different_edge_preview_guard_rejection_restores_complete_core_geometry() {
|
||||
// Exercise the actual gesture capture and core preview, with a pure
|
||||
// explicit profile. Moving another label onto the wrapped target must
|
||||
// reject wrapping, leaving the full original one-line target geometry.
|
||||
// All twelve point arrays and every other frozen label remain exact.
|
||||
let (p, id) = fixture();
|
||||
let view = project_view(&p, id);
|
||||
let core = route_diagram(&p, &p.diagrams[&id], &view);
|
||||
let foreign = core
|
||||
.edges
|
||||
.values()
|
||||
.find(|edge| edge.id != edge_id() && !edge.label.text.is_empty())
|
||||
.unwrap();
|
||||
let original_offset = Position {
|
||||
x: foreign.label.center.x - foreign.label.anchor.x,
|
||||
y: foreign.label.center.y - foreign.label.anchor.y,
|
||||
};
|
||||
let c = DiagramCanvas {
|
||||
selected: foreign.id,
|
||||
..canvas(&p, id)
|
||||
};
|
||||
for profile in [Profile::E, Profile::F] {
|
||||
let mut state = State {
|
||||
context: Some(c.context),
|
||||
..State::default()
|
||||
};
|
||||
let initial = c.scene_with_profile(&state, profile);
|
||||
let target = initial
|
||||
.label_layout
|
||||
.as_ref()
|
||||
.expect("Initial witness must wrap");
|
||||
c.begin_route_with_profile(
|
||||
&mut state,
|
||||
point(foreign.label.center),
|
||||
Handle::Label {
|
||||
original: original_offset,
|
||||
},
|
||||
EdgeRoute {
|
||||
edge: foreign.id,
|
||||
source_attachment: None,
|
||||
target_attachment: None,
|
||||
waypoints: vec![],
|
||||
label: Some(EdgeLabel {
|
||||
fraction: foreign.label.fraction,
|
||||
offset: original_offset,
|
||||
}),
|
||||
},
|
||||
profile,
|
||||
);
|
||||
state
|
||||
.route_drag
|
||||
.as_mut()
|
||||
.unwrap()
|
||||
.move_to(point(target.geometry.center), 1.);
|
||||
let diagram = c.preview_diagram(&state);
|
||||
let expected = routing::route_edge_preview(&p, &diagram, &view, &core, foreign.id);
|
||||
let mut guard_probe = expected.clone();
|
||||
assert!(
|
||||
apply(&p, &diagram, &view, &mut guard_probe, profile).is_none(),
|
||||
"Foreign label now overlaps target: wrapping must be refused"
|
||||
);
|
||||
assert_eq!(guard_probe, expected);
|
||||
let actual = c.scene_with_profile(&state, profile);
|
||||
assert!(actual.label_layout.is_none());
|
||||
for (edge, before) in &core.edges {
|
||||
assert_eq!(
|
||||
actual.routed.edges[edge].points, before.points,
|
||||
"Label drag must not reroute"
|
||||
);
|
||||
if *edge != foreign.id && *edge != edge_id() {
|
||||
assert_eq!(
|
||||
actual.routed.edges[edge].label, before.label,
|
||||
"Other labels remain frozen"
|
||||
);
|
||||
}
|
||||
}
|
||||
assert_eq!(
|
||||
actual.routed.edges[&edge_id()].label,
|
||||
core.edges[&edge_id()].label,
|
||||
"No Layout means original complete one-line target geometry, never stale wrapped hit bounds"
|
||||
);
|
||||
assert_eq!(
|
||||
*actual.routed, expected,
|
||||
"Fallback is the complete core preview result"
|
||||
);
|
||||
}
|
||||
}
|
||||
#[test]
|
||||
fn scene_and_measurement_cache_reuse_and_geometry_invalidation() {
|
||||
let (p, id) = fixture();
|
||||
let c = canvas(&p, id);
|
||||
let mut state = State::default();
|
||||
let first = c.scene_with_profile(&state, Profile::F);
|
||||
state.pointer = Some(Point::new(100., 200.));
|
||||
let changed_camera = DiagramCanvas {
|
||||
pan: Vector::new(40., 30.),
|
||||
zoom: 0.5,
|
||||
selected: p.id,
|
||||
..c
|
||||
};
|
||||
assert!(Arc::ptr_eq(
|
||||
&first,
|
||||
&changed_camera.scene_with_profile(&state, Profile::F)
|
||||
));
|
||||
assert!(Arc::ptr_eq(
|
||||
&measured(Profile::F).unwrap(),
|
||||
&measured(Profile::F).unwrap()
|
||||
));
|
||||
let other_profile = c.scene_with_profile(&state, Profile::E);
|
||||
assert!(!Arc::ptr_eq(&first, &other_profile));
|
||||
let next_revision = DiagramCanvas {
|
||||
context: Context {
|
||||
revision: 1,
|
||||
..c.context
|
||||
},
|
||||
..c
|
||||
};
|
||||
assert!(!Arc::ptr_eq(
|
||||
&other_profile,
|
||||
&next_revision.scene_with_profile(&state, Profile::E)
|
||||
));
|
||||
let plain = c.scene_with_profile(&state, Profile::Baseline);
|
||||
assert!(plain.label_layout.is_none());
|
||||
assert!(Arc::ptr_eq(&plain.core_routed, &plain.routed));
|
||||
assert_eq!(
|
||||
*plain.routed,
|
||||
route_diagram(&p, &p.diagrams[&id], &plain.view)
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -6,8 +6,7 @@ impl DiagramCanvas<'_> {
|
||||
pub(crate) fn work_dirty_point(&self, bounds: Rectangle, screen: Point) -> bool {
|
||||
let diagram = &self.project.diagrams[&self.diagram];
|
||||
let view = self.projected(diagram);
|
||||
let mut routed = routing::route_diagram(self.project, diagram, &view);
|
||||
super::apply_label_experiment(self.project, diagram, &view, &mut routed);
|
||||
let routed = routing::route_diagram(self.project, diagram, &view);
|
||||
self.work_dirty_press(
|
||||
&view,
|
||||
&routed,
|
||||
|
||||
@@ -327,11 +327,7 @@ pub(crate) fn saved_usages_for(p: &Project, subject: Id, only_diagram: Option<Id
|
||||
"state machine view"
|
||||
}
|
||||
.into(),
|
||||
bounds: {
|
||||
let mut routed = routing::route_diagram(p, diagram, &view);
|
||||
crate::diagram::apply_label_experiment(p, diagram, &view, &mut routed);
|
||||
routed_bounds(routed.bounds)
|
||||
},
|
||||
bounds: routed_bounds(routing::route_diagram(p, diagram, &view).bounds),
|
||||
});
|
||||
}
|
||||
for node in &view.nodes {
|
||||
@@ -411,13 +407,9 @@ pub(crate) fn saved_usages_for(p: &Project, subject: Id, only_diagram: Option<Id
|
||||
}
|
||||
}
|
||||
if view.edges.iter().any(|edge| edge.id == subject)
|
||||
&& let Some(edge) = {
|
||||
let mut routed = routing::route_diagram(p, diagram, &view);
|
||||
crate::diagram::apply_label_experiment(p, diagram, &view, &mut routed);
|
||||
routed
|
||||
}
|
||||
.edges
|
||||
.get(&subject)
|
||||
&& let Some(edge) = routing::route_diagram(p, diagram, &view)
|
||||
.edges
|
||||
.get(&subject)
|
||||
{
|
||||
usages.push(Usage {
|
||||
subject,
|
||||
|
||||
@@ -1,28 +1,5 @@
|
||||
# Architectural and product decisions
|
||||
|
||||
## Measured label wrapping remains experimental — 2026-10-01
|
||||
|
||||
Preserve the isolated E/F prototypes and their
|
||||
[validation, locked readings and conservation oracles](experiments/wrapped-label-20261001/validation.md)
|
||||
without promoting either placement rule. E centers two measured lines on the
|
||||
own stroke; F offsets three lines beside it. Both reduce backing width using
|
||||
actual Iced shaping and conserve canonical model data and route geometry. F's
|
||||
first reader still misidentified two exchanges; both readers retained a plausible
|
||||
wrong conversation ownership. The experiments therefore do not meet dependable
|
||||
association at Fit, despite correct E endpoint guesses. Separate readers and a
|
||||
single fixture do not establish causal superiority or general usability.
|
||||
|
||||
Keep raw routing distinct from derived presentation during gesture previews:
|
||||
the adversarial different-edge test exposed stale wrapped bounds after guard
|
||||
refusal, fixed by retaining the original core RoutedView. This is reusable
|
||||
architecture evidence, not acceptance of private fixture-specific layout code.
|
||||
Saved fraction/offset survive under F, but ordinary reopening derives one line;
|
||||
external profiles cannot provide a production formatting contract. A general
|
||||
format/layout proposal requires explicit persistence semantics, shared consumer
|
||||
bounds, native representative workflows and glyph/performance evidence. Further
|
||||
work should address view scale and ambiguous stroke ownership rather than tune
|
||||
this same label scene until it looks successful.
|
||||
|
||||
## Private source composition decision — 2026-09-23
|
||||
|
||||
Adopt the opaque validated original-span rename batch as the next private
|
||||
|
||||
@@ -1,22 +1,10 @@
|
||||
# Isolated measured-label experiment checkpoint — 2026-10-01 PDT
|
||||
|
||||
This branch adds the private E/F label experiment at
|
||||
`d0896ced75fea73bcda6bd14f259a34503840704` to the compact Help foundation below.
|
||||
[Validation and retained raw evidence](experiments/wrapped-label-20261001/validation.md)
|
||||
cover actual measured Iced layout, 126 focused tests, native first readings,
|
||||
selection/edit/Undo/Redo, exact exports and saved-F reopening. An independent
|
||||
review verified complete Project conservation and unchanged paths/drawing bytes.
|
||||
Neither candidate established reliable first-reading label ownership, and
|
||||
ordinary reopening loses the externally selected wrapping. Both remain excluded
|
||||
from production and releases. This branch is experimental evidence, not an
|
||||
integrated product checkpoint or complete OA/SA acceptance. Live #38 ownership
|
||||
and next actions remain in Gitea.
|
||||
|
||||
# Verified Windows source checkpoint — 2026-10-01 PDT
|
||||
|
||||
This branch combines the released integrated foundation
|
||||
`715036e132677dd2bc2fb37ed316d93dc9987aec` with compact diagram controls and
|
||||
contextual Help production source `6e7c4ddaf0775198384a8c4882809ea8e14b2976`.
|
||||
contextual Help production source `6e7c4ddaf0775198384a8c4882809ea8e14b2976`,
|
||||
and the protected Save As destination diagnostic correction tested at
|
||||
`0e83157e09d52e6152df91208e41693b62da2d46`.
|
||||
[PROJECT_GOAL.md](../PROJECT_GOAL.md) remains authoritative; complete OA/SA
|
||||
acceptance is unfinished.
|
||||
|
||||
@@ -48,10 +36,17 @@ Dense diagrams, remaining Scenario group adapters, quantities/calculations/
|
||||
constraints, maintained libraries, broad accessibility/DPI and full OA/SA
|
||||
acceptance remain unfinished. The independent projection/navigation, outgoing-drag,
|
||||
icon, grid/performance and State-label contributions are outside this code.
|
||||
A protected Save As destination collision has misleading external-change wording;
|
||||
[issue 46](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/issues/46)
|
||||
records it. Files remain protected and normal/fresh-destination recovery is
|
||||
verified. Live ownership, integration and release coordination remain in Gitea.
|
||||
The published compact Help ZIP retains misleading external-change wording for a
|
||||
protected Save As destination collision. This branch's
|
||||
[diagnostic correction](save-as-diagnostics-20261001.md) distinguishes existing
|
||||
protected destination files from observed external edits and explains recovery.
|
||||
Its 29 targeted checks, strict Clippy, matching GUI build, native normal/minimum
|
||||
window workflows, eight complete byte checkpoints and parsed-model oracle pass;
|
||||
independent review finds no material blocker in the bounded contribution.
|
||||
The correction is not yet a packaged release or the separately owned follow-up
|
||||
union. [Issue 46](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/issues/46)
|
||||
holds integration and delivery status. Live ownership and release coordination
|
||||
remain in Gitea.
|
||||
|
||||
## Contribution-specific verification
|
||||
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
* -text whitespace=-blank-at-eof,-blank-at-eol,cr-at-eol
|
||||
@@ -0,0 +1,58 @@
|
||||
# Protected source destination diagnostic evidence (#46)
|
||||
|
||||
Source: `0e83157e09d52e6152df91208e41693b62da2d46`, based on published
|
||||
`ea23e229260d7d050b3c3b88e77c3a851e936abe`. This packet was assembled locally
|
||||
before integration/publication. See [the contribution note](../../save-as-diagnostics-20261001.md).
|
||||
|
||||
The packet preserves the original bytes of the first failed candidate diff,
|
||||
source hashes and E0308 log; corrected targeted tests; strict Clippy and GUI build
|
||||
logs; preparation/freeze/launch/oracle scripts; native plan, 16 captures, eight
|
||||
full byte-oracle receipts, baseline, launch/exit receipts and empty streams;
|
||||
full parser request/response envelopes; and final independent review. Donor
|
||||
build/extraction receipts establish the reused parser server's separate provenance.
|
||||
`commands.json` records parent-observed invocation scope; flags are not recoverable
|
||||
from build stdout logs alone. `source-files.json` identifies relevant Git source bytes.
|
||||
|
||||
The desktop hash is `e9cce9355525ecdc59bfae12608b1e0272167acef5a86b25368ef547e08886ff`;
|
||||
runtime hash is `f45604a12e8bcd839fd86f667c1be1cc7c4f9da2b3c69ff381ac708f0e1ae7d4`.
|
||||
The reused server hash is `6cebacc117e46fdab023c6402a5cebd6929fb55993ae8ff6b89cd1c6c1170237`,
|
||||
from `715036e132677dd2bc2fb37ed316d93dc9987aec`; it was not rebuilt for #46.
|
||||
|
||||
Excluded: the 119 MB desktop binary, runtime copies, live fixture directory copies,
|
||||
parser store, redundant failed log, unrelated package evidence and release assets.
|
||||
Complete source inputs survive in request envelopes; seven companion files are
|
||||
reconstructible from the pinned source and checked against all phase receipts.
|
||||
The independent review checked the live fixture/store files before exclusion;
|
||||
this packet's offline checker does not claim to repeat those live-file observations.
|
||||
|
||||
From a repository checkout containing the pinned Git commit, run Python 3:
|
||||
|
||||
```powershell
|
||||
python harness/experiments/save-as-diagnostics-20261001/verify.py
|
||||
# After staging, additionally detect any Git newline conversion:
|
||||
python harness/experiments/save-as-diagnostics-20261001/verify.py --index
|
||||
```
|
||||
|
||||
`evidence-files.json` inventories every packet file except itself. Scoped
|
||||
`.gitattributes` disables newline conversion for all descendants. The checker is
|
||||
read-only: it checks hashes, exact filename sets, all eight declared phase byte
|
||||
sets, full parser source/model envelopes and native exit receipts. It does not
|
||||
launch the application, rerun compilation, or re-execute a native test.
|
||||
|
||||
Historical scripts retain original local paths and are evidence, not portable
|
||||
one-command replay. `prepare-native46.py` asserts the frozen source and copies
|
||||
the built executable; `launch-native46.py` restricts PATH and captures exit/logs.
|
||||
`oracle.py inject` and `restore` deliberately mutate the isolated B fixture.
|
||||
Do not run these scripts against an existing trial or interpret elapsed historical
|
||||
paths as available artifacts. For a new trial, build the pinned source in the
|
||||
configured Windows GNU LLVM environment and adapt paths into a fresh isolated
|
||||
directory, following the native plan and recording new receipts.
|
||||
|
||||
Scope: Windows development build and bounded #46 workflows. Native desktop
|
||||
exit was normal (0), streams empty; owned parser termination was forced (1),
|
||||
not graceful-shutdown evidence. Persistent collision footer truncation remains,
|
||||
with pointer tooltip readable at normal/minimum sizes; keyboard tooltip access
|
||||
was not tested. Fresh destination companions were seven parent copies; 30 source
|
||||
files were application writes. No full-suite, new-platform, packaged #46 release
|
||||
or complete OA/SA acceptance is claimed. The earlier #39 release retains its old
|
||||
diagnostic wording; integration/publication is a separate parent-owned action.
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"source": "0e83157e09d52e6152df91208e41693b62da2d46",
|
||||
"attribution": "Parent-observed executed invocations; logs record output without command flags.",
|
||||
"cwd": "C:/ar-save-01a0d717",
|
||||
"environment_script": "C:/Users/User/Documents/Git/ARCADIA-Studio/.local/toolchain/env.ps1",
|
||||
"CARGO_TARGET_DIR": "C:/Users/User/Documents/Git/ARCADIA-Studio/.local/target-gnullvm",
|
||||
"CARGO_BUILD_JOBS": "1",
|
||||
"CARGO_INCREMENTAL": "0",
|
||||
"target": "x86_64-pc-windows-gnullvm",
|
||||
"commands": [
|
||||
"cargo test --locked -p oa-desktop -- save_as_tests source_project_tests repair_save_state_tests --test-threads=1",
|
||||
"cargo clippy --locked -p oa-desktop --all-targets -- -D warnings",
|
||||
"cargo build --locked -p oa-desktop --bin arcadia-studio"
|
||||
],
|
||||
"outcomes": [
|
||||
"29 passed; 0 failed; 0 ignored; 1520 filtered out",
|
||||
"strict Clippy success",
|
||||
"GUI build success"
|
||||
],
|
||||
"scope": "Targeted tests and development desktop build, not full-suite or packaged acceptance."
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"source_identity": "Desktop: 6e7c4ddaf0775198384a8c4882809ea8e14b2976; unchanged reused server: 715036e132677dd2bc2fb37ed316d93dc9987aec; package documentation: ea23e229260d7d050b3c3b88e77c3a851e936abe",
|
||||
"profile": "dev, unoptimized, debug assertions enabled",
|
||||
"compiler": "rustc 1.98.1 (48a229cea 2026-09-01)",
|
||||
"target": "x86_64-pc-windows-gnullvm",
|
||||
"binary_sha256": {
|
||||
"arcadia-studio.exe": "d55ecad4b0f75c0c9c26625e5441bef9c9360890b65bc13236c6ebfaf03d631e",
|
||||
"arcadia-server.exe": "6cebacc117e46fdab023c6402a5cebd6929fb55993ae8ff6b89cd1c6c1170237"
|
||||
},
|
||||
"binary_origins": {
|
||||
"arcadia-studio.exe": {
|
||||
"source": "6e7c4ddaf0775198384a8c4882809ea8e14b2976",
|
||||
"build_command": "cargo build --locked -p oa-desktop --bin arcadia-studio",
|
||||
"evidence": "harness/experiments/compact-help-20260925/candidate-6e7c/build.log",
|
||||
"native_evidence": "harness/compact-help-validation-20261001.md"
|
||||
},
|
||||
"arcadia-server.exe": {
|
||||
"source": "715036e132677dd2bc2fb37ed316d93dc9987aec",
|
||||
"reuse": true,
|
||||
"release": "v0.2.0-preview.integrated.20260924",
|
||||
"original_build_evidence": {
|
||||
"source_identity": "715036e132677dd2bc2fb37ed316d93dc9987aec",
|
||||
"profile": "dev",
|
||||
"target": "x86_64-pc-windows-gnullvm",
|
||||
"compiler": "rustc 1.98.1 (48a229cea 2026-09-01)",
|
||||
"binary_sha256": {
|
||||
"arcadia-studio.exe": "2c03bd6cc3f1110c219e4f57ab94874a121590f83779239a93289b7170664399",
|
||||
"arcadia-server.exe": "6cebacc117e46fdab023c6402a5cebd6929fb55993ae8ff6b89cd1c6c1170237"
|
||||
},
|
||||
"mandatory_gate": {
|
||||
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\prerelease-gates-v2-20260924\\final-04\\summary.json",
|
||||
"bytes": 10594,
|
||||
"sha256": "8b655c429b4abdeec0476a8397565fcd07682642f1d7b87e9a0c4eec63e22fc9"
|
||||
},
|
||||
"source_manifest": {
|
||||
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\prerelease-gates-v2-20260924\\final-04\\inputs-before.json",
|
||||
"bytes": 1740725,
|
||||
"sha256": "38e4f7d37b67b06b7991d48560c5bd56ec5893909f3cffd224442d15bdc35f88"
|
||||
},
|
||||
"environment": {
|
||||
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\prerelease-gates-v2-20260924\\final-04\\environment.json",
|
||||
"bytes": 8981,
|
||||
"sha256": "d9d89bc52a9312044e277f92b1585350fc86d5cc963dd91a39c669bc6ca2f39f"
|
||||
},
|
||||
"artifact_relocation": {
|
||||
"path": "C:\\Users\\User\\Documents\\Git\\ARCADIA-Studio\\.local\\prerelease-gates-v2-20260924\\final-04\\artifact-relocation.json",
|
||||
"bytes": 6181,
|
||||
"sha256": "3298225b9890aab1a8029a4d6dff42a8162f8d77f2c71bcdd379d25ebcb1f9d6"
|
||||
},
|
||||
"scope": "Exact preserved CargoJSON-identified individual product builds from final04; supplemental combined build is separately recorded. Native/package acceptance is separate."
|
||||
},
|
||||
"unchanged_input_check": "git diff --exit-code 715036e132677dd2bc2fb37ed316d93dc9987aec ea23e229260d7d050b3c3b88e77c3a851e936abe -- crates/oa-core crates/oa-server Cargo.toml Cargo.lock"
|
||||
}
|
||||
},
|
||||
"package_documentation_source": "ea23e229260d7d050b3c3b88e77c3a851e936abe",
|
||||
"runtime_sha256": "f45604a12e8bcd839fd86f667c1be1cc7c4f9da2b3c69ff381ac708f0e1ae7d4",
|
||||
"acceptance_scope": "Contribution gates and prior released-server evidence are separate from fresh packaged desktop/server checks; this is an unfinished Windows development preview, not complete OA/SA acceptance."
|
||||
}
|
||||
@@ -0,0 +1,575 @@
|
||||
{
|
||||
"status": "PASS",
|
||||
"archive": "ArcadiaStudio-0.2.0-preview.compact-help.20261001-x86_64-pc-windows-gnullvm.zip",
|
||||
"archive_bytes": 34184534,
|
||||
"archive_sha256": "18af75c7aea60bb0d5db5b1925d0d0815ecd08afc5bb258438851cfda809a6f2",
|
||||
"files": 565,
|
||||
"bundle": "C:\\ar-compact-01a0d717\\.local\\package39\\extracted\\ArcadiaStudio-0.2.0-preview.compact-help.20261001-x86_64-pc-windows-gnullvm",
|
||||
"sha256": {
|
||||
"arcadia-server.exe": "6cebacc117e46fdab023c6402a5cebd6929fb55993ae8ff6b89cd1c6c1170237",
|
||||
"arcadia-studio.exe": "d55ecad4b0f75c0c9c26625e5441bef9c9360890b65bc13236c6ebfaf03d631e",
|
||||
"dependency-notices.json": "db8f66507719835a00f93a64bb9736e8b5e753b0dcca8b0fb1b36ca7b0bb91fd",
|
||||
"deployment/arcadia-server.service": "1e6c6bb4065e25f8fe1d558a4ed0bbd4844782a4377c2482488db1e6f9cab01d",
|
||||
"deployment/Dockerfile": "72c04aef4ec879955ed3bdf315987553d018ef46e4b8f350f0f6fe380c453eb7",
|
||||
"deployment/Dockerfile.dockerignore": "6bb7d7496110b11a531cb8cd923864c6610850a8f1c4de8a797f54c7156f29e1",
|
||||
"docs/api.html": "d06e32b3da838e519630a4151111bb40a383ccf294eb18443118a7498700a993",
|
||||
"docs/api.rst": "d78f138d011dd0af28bd53a65d1d93381d031f680191779d4f3030a264eb2e74",
|
||||
"docs/language.html": "77c14e548f5d2deea0c21a3a931347e1c87449f5be8503f6c51ceaef37be9a33",
|
||||
"docs/language.rst": "7117a66e16b34cd6ce033532e984c7ca49b4611e296fb1c46c5f737fe9169ec6",
|
||||
"docs/linux-packaging.md": "41a1bb1095801df37a1411341c5791d55ea8c365739314d599a60269ac4bc7a0",
|
||||
"docs/openapi.json": "2ad69da52fb574435525990c906948ce54b1efd9247cdde8726969f382731790",
|
||||
"docs/preview-human-checks.md": "50b56c328c22587e1187f6e614bc914210095cf635c301f335e82de11201b890",
|
||||
"docs/research-v2-service.md": "4828df5bc679e7c71f49b4b85c9e7dacbec52f46d416fed48af70e08886d4e4e",
|
||||
"docs/server.md": "4eb24937d424ba8b384e1734e02a6f8e963ae11d2715889c92b14b39ff2e4a48",
|
||||
"docs/windows-packaging.md": "2d5ef8a9a8741e6e7f6df9db9fd9a839f806ea782a6f2063c3a98725ecfd36b6",
|
||||
"documentation-check.json": "18a35f7022d6c180c42ad4fd7c7010e494bdff0d2ca395efac84ac545fe23627",
|
||||
"examples/coastal-rescue.arcadia": "7e183ef9fd8154d3074303f1956cd0d9871c19e3ffc630d333b0bffbd6e30e17",
|
||||
"examples/coastal-rescue.json": "242f0b031229a87af5c4ebe5d651defe59c191a6b7a69dc0a77f7e203411f195",
|
||||
"examples/legacy-v1-coastal-rescue.arcadia": "4dbbbdf8bc7e6cb8e0a81dd678069dae585a9e5187c59bc3665e1fdab3f1a86a",
|
||||
"examples/legacy-v1-coastal-rescue.oa.json": "fd0e9dedfb7adb922dc0575cc2b820d40344d639f1d8052bd70363aa59de9c24",
|
||||
"examples/release1/evidence/repair-check.md": "f4db17bdca4ecbb1bf0caef01b2da5f1f7f798ab3152b648ce6dd8696a6a68e5",
|
||||
"examples/release1/expected-diagnostics.json": "3700393d76b940cfc076bf52861bd7b1f43370f8eabce3594531bd0bf1fc851e",
|
||||
"examples/release1/model.json": "ef0ef4006c3e09d5db6e1b621256b3f7d6642f3a7b09cc34607cfbcca830c727",
|
||||
"examples/release1/model.rs": "ddc2d92b0d7699a4cadfbb35ae379f0a68d17f4f5d7df82b4b1afcf8d5425fbe",
|
||||
"examples/release1/oa/activities/activity_oa_restore_work.arcadia": "21cbd7176af8fad68453306f2371ff03e127a994b8796cdf044567332de9686f",
|
||||
"examples/release1/oa/behavior/process_oa_assessment_procedure.arcadia": "23cabc213c264a16c8595414db6acb09248c1cef9cd699f1b0316e5bb82c062a",
|
||||
"examples/release1/oa/behavior/process_oa_field_procedure.arcadia": "9c52086759b7344b4809ceb8d372f65647b16fc24153a03b887faa378c37fe96",
|
||||
"examples/release1/oa/behavior/process_oa_response.arcadia": "675798bd19e6b40d03e7076b0e59b110cdaaab7b6d16c47c3ac80fa960072e84",
|
||||
"examples/release1/oa/behavior/scenario_oa_conversation.arcadia": "e217e5394a0771dc16206ed9437a231da27905d2f19be64b3f48281c0a32fb6b",
|
||||
"examples/release1/oa/behavior/scenario_oa_full_scenario.arcadia": "c5a285f2d7c61bd2a136107f267fbf9cddb1cba3f63ff36a6f53f7ab98f33df5",
|
||||
"examples/release1/oa/behavior/state_machine_oa_monitor.arcadia": "e7349e1e5336282eed3f5a103129db33d3ae4ed500788ee7129e8fc193ac57f6",
|
||||
"examples/release1/oa/capabilities.arcadia": "26a3d9b615a3251ff010e0b47127f2d16bc2dcd45ed95967208b0076d725843a",
|
||||
"examples/release1/oa/model.arcadia": "069a5eaaf525089935cc9d73ae7b916866ed78c6534705d75739650ecdea7ada",
|
||||
"examples/release1/oa/participants.arcadia": "591a75a9ecad280302be4d4ae0171ad616377ed11ead5e233848ca2dc0a71819",
|
||||
"examples/release1/oa/types.arcadia": "f02c391d584674c879f662a418abba3a220f1fee88471ca49322ac9873de628d",
|
||||
"examples/release1/project.arcadia": "b2674e6bf77cfe0f6f0ba79c81d2e96d92f39c02ca2c6266d80e91723bfb9fda",
|
||||
"examples/release1/README.md": "113cfb1cf38a98b51bff60442d86a35d636a3d80ef206bece7d53d0aae67f2d5",
|
||||
"examples/release1/sa/behavior/process_sa_assessment_procedure.arcadia": "5c414fbdaabf9f9e402b0441fcacf1cacf4dbbc6c822162f028de35abf59be2d",
|
||||
"examples/release1/sa/behavior/process_sa_field_procedure.arcadia": "ece846fdf93857e71a9ab0efcbdf64a5c41c71180f62afa3f79077fffb53b8f2",
|
||||
"examples/release1/sa/behavior/process_sa_response.arcadia": "af7fdda280a917cf626f6e077162d481f9aaad280f8e81330c07d7fe384b1c52",
|
||||
"examples/release1/sa/behavior/scenario_sa_conversation.arcadia": "01339699ec3ee409418d9bb232542f2bcd9419f1e67b183e77700c56bb9f71d2",
|
||||
"examples/release1/sa/behavior/scenario_sa_full_scenario.arcadia": "5dce6b00a3a441162e8dee3e23d9ca5ab7bed4a24de669b1fba03664a3086dda",
|
||||
"examples/release1/sa/behavior/state_machine_sa_monitor.arcadia": "17dbcfa5bbfd10fc8e23a325fc950ce853c219b4aa89c74f96278cbb3f34acc8",
|
||||
"examples/release1/sa/capabilities.arcadia": "81706a0ca9d7db2aa0350888b9c00d853885185db2e6b90557d3d51a11c3d645",
|
||||
"examples/release1/sa/functions/function_sa_audit_thresholds.arcadia": "27f798f78f36e72b38edab3725af2feb0eaa010fd52a60b5c6b6bef57ad3b686",
|
||||
"examples/release1/sa/functions/function_sa_restore_work.arcadia": "357c6acb80f86b4e8d8f5c98f9f79d140f85fbe09f3406b41b7ac6eba464ec8c",
|
||||
"examples/release1/sa/model.arcadia": "805b90262e27090ae7da81a51bcefa49c97fb0b3d3220b4a72323b4c4351c395",
|
||||
"examples/release1/sa/participants.arcadia": "ca144d6a8f45fe720b5d18c7b59c7671444baa8c37e5ce9117bcba34b3a6aa84",
|
||||
"examples/release1/sa/types.arcadia": "540ddbc2bcd0ccf45298e3ea5660637341aff63ff65fd87ac2f26469d1adc064",
|
||||
"examples/release1/traceability.arcadia": "474bd28d955ff7af7722f6e9a23220d816879e3f46202e79a233544b9c593116",
|
||||
"examples/release1/transition-before.json": "2253e6434f741687e22327c37d520ed15c043bc36025498650bc2366bb6a874d",
|
||||
"examples/release1/transition-request.json": "43b9a22e5f95ad3bc0ebd2478ead0e14406854abc989ae94ded9367b013d812a",
|
||||
"examples/release1/views/diagram_oa_allocation_view.arcadia": "c45d7467839219d894804c1ef2d22ff4d4a5a84a6a273c526bafd4c1facde624",
|
||||
"examples/release1/views/diagram_sa_allocation_view.arcadia": "352a3ca745517592b5c9b1239b5770f62f0466a329a91fd03457ef2b53c06ed6",
|
||||
"examples/release1/views/diagram_sa_capability_view.arcadia": "8f18fcccbcddcf3c1ea0ffe727b5b23b77fc148c5da4fde953abe681e4c20cd2",
|
||||
"examples/release1/views/diagram_sa_service_view.arcadia": "4c72cb7593d9c4be8d2600b0656a7a3a6ce84c45bb2f3e58a4ee5ae3bf91913c",
|
||||
"examples/release1/views/diagram_sa_state_view.arcadia": "dd1bea81ac7dc549a53f9b190be6f13052e00ede345bd180444cc31edb892230",
|
||||
"examples/routing-workshop.arcadia": "dc6b75da72884d399132ed9e300fa5a26b73d802bb526c9af986ae9eeb0a646a",
|
||||
"examples/routing-workshop.json": "8592714f75b271133f21ce017d87896b6cf91ea0e4837f1c2ed453e21be26b14",
|
||||
"examples/source-project/oa.arcadia": "5f60642f211b2d352a951092faeeb7503d4fb7f6f7fca99e810347231101d31c",
|
||||
"examples/source-project/project.arcadia": "787f6b67b179ffd221f7e5faf1a4edd74cfd116aa1e3b5e9ed9f22fbff612d8d",
|
||||
"examples/source-project/sa/assurance.arcadia": "ab76044836e4dcd42a82d316846ec87da2108939aa2037640c5bca1d2ecdee0f",
|
||||
"examples/source-project/sa/participants.arcadia": "1abad579812e77877b45a3d8e3c3e9da734be2d04a0254cc730a5257ebd2dc88",
|
||||
"examples/source-project/sa/reporting.arcadia": "f0b7443f728912ca163de39b6055876b533a77feaa3219b2d40a2dd65712e058",
|
||||
"examples/source-project/views.arcadia": "e29ad3f406a6a50d2f0ae2ca2a53ee3b0c18222cd4098704a46d4f48b64ea17f",
|
||||
"examples/text-first/project.arcadia": "f441535c623e0cf20e1875eb2cd33b587ed00e078c37af39cb36d89bb5edc19a",
|
||||
"examples/text-first/README.md": "4ec8250d5ed556f1d496e8c85137e973e802ecb11df1a36488411e8cdc5a9f9e",
|
||||
"libunwind.dll": "f45604a12e8bcd839fd86f667c1be1cc7c4f9da2b3c69ff381ac708f0e1ae7d4",
|
||||
"LICENSE": "51009f2cb07e5d19645858b2fbc037a672a25f8cbf7999522942b86807ecf365",
|
||||
"licenses/dependencies/arrayref-0.3.9/LICENSE": "1bc7e6f475b3ec99b7e2643411950ae2368c250dd4c5c325f80f9811362a94a1",
|
||||
"licenses/dependencies/arrayvec-0.7.8/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/arrayvec-0.7.8/LICENSE-MIT": "4da95ec4ecb65b738d470b7d762894ad9c97da93e6cbfb18b570fc2c96f4b871",
|
||||
"licenses/dependencies/ash-0.38.0+1.3.281/LICENSE-APACHE": "0e8a410375e1ee5c75c6198b08b534fec6e5edef766cf971bab4a404542636ab",
|
||||
"licenses/dependencies/ash-0.38.0+1.3.281/LICENSE-MIT": "c733ccf8ab25df175a63d9d844677b98e3a5ab8f8de1c1616087e6868a7f948e",
|
||||
"licenses/dependencies/atomic-waker-1.1.2/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/atomic-waker-1.1.2/LICENSE-MIT": "23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3",
|
||||
"licenses/dependencies/atomic-waker-1.1.2/LICENSE-THIRD-PARTY": "6226d0632e2e1a80c23597e964da9812ae193c535fe058154afb034e94167aa5",
|
||||
"licenses/dependencies/autocfg-1.5.1/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/autocfg-1.5.1/LICENSE-MIT": "27995d58ad5c1145c1a8cd86244ce844886958a35eb2b78c6b772748669999ac",
|
||||
"licenses/dependencies/axum-0.8.9/LICENSE": "6a13bc24a100a6812f053879ec51b126b103af7cda6dbf48c4188722da44da9f",
|
||||
"licenses/dependencies/axum-core-0.5.6/LICENSE": "008c87afcd2e626eaf564093250bed06dd7efb5732113264bba3dda8f1c556a1",
|
||||
"licenses/dependencies/base64-0.22.1/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/base64-0.22.1/LICENSE-MIT": "0dd882e53de11566d50f8e8e2d5a651bcf3fabee4987d70f306233cf39094ba7",
|
||||
"licenses/dependencies/bit-set-0.8.0/LICENSE-APACHE": "8173d5c29b4f956d532781d2b86e4e30f83e6b7878dce18c919451d6ba707c90",
|
||||
"licenses/dependencies/bit-set-0.8.0/LICENSE-MIT": "f51ac2c59a222f7476ce507ca879960e2b64ea64bb2786eefdbeb7b0b538d1b7",
|
||||
"licenses/dependencies/bit-vec-0.8.0/LICENSE-APACHE": "8173d5c29b4f956d532781d2b86e4e30f83e6b7878dce18c919451d6ba707c90",
|
||||
"licenses/dependencies/bit-vec-0.8.0/LICENSE-MIT": "f51ac2c59a222f7476ce507ca879960e2b64ea64bb2786eefdbeb7b0b538d1b7",
|
||||
"licenses/dependencies/bitflags-2.13.1/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/bitflags-2.13.1/LICENSE-MIT": "6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb",
|
||||
"licenses/dependencies/bytemuck_derive-1.12.0/LICENSE-APACHE": "e3ba223bb1423f0aad8c3dfce0fe3148db48926d41e6fbc3afbbf5ff9e1c89cb",
|
||||
"licenses/dependencies/bytemuck_derive-1.12.0/LICENSE-MIT": "9df9ba60a11af705f2e451b53762686e615d86f76b169cf075c3237730dbd7e2",
|
||||
"licenses/dependencies/bytemuck_derive-1.12.0/LICENSE-ZLIB": "84b34dd7608f7fb9b17bd588a6bf392bf7de504e2716f024a77d89f1b145a151",
|
||||
"licenses/dependencies/bytemuck-1.25.2/LICENSE-APACHE": "e3ba223bb1423f0aad8c3dfce0fe3148db48926d41e6fbc3afbbf5ff9e1c89cb",
|
||||
"licenses/dependencies/bytemuck-1.25.2/LICENSE-MIT": "9df9ba60a11af705f2e451b53762686e615d86f76b169cf075c3237730dbd7e2",
|
||||
"licenses/dependencies/bytemuck-1.25.2/LICENSE-ZLIB": "84b34dd7608f7fb9b17bd588a6bf392bf7de504e2716f024a77d89f1b145a151",
|
||||
"licenses/dependencies/bytes-1.12.1/LICENSE": "45f522cacecb1023856e46df79ca625dfc550c94910078bd8aec6e02880b3d42",
|
||||
"licenses/dependencies/cc-1.4.5/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/cc-1.4.5/LICENSE-MIT": "378f5840b258e2779c39418f3f2d7b2ba96f1c7917dd6be0713f88305dbda397",
|
||||
"licenses/dependencies/cfg_aliases-0.2.2/LICENSE": "31b94860253d8ec7b4529f51901044d3b459d6292d996504a36b1bae3a36a812",
|
||||
"licenses/dependencies/cfg-if-1.0.4/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/cfg-if-1.0.4/LICENSE-MIT": "378f5840b258e2779c39418f3f2d7b2ba96f1c7917dd6be0713f88305dbda397",
|
||||
"licenses/dependencies/chacha20-0.10.2/LICENSE-APACHE": "a9040321c3712d8fd0b09cf52b17445de04a23a10165049ae187cd39e5c86be5",
|
||||
"licenses/dependencies/chacha20-0.10.2/LICENSE-MIT": "b8c6939380a400f53e11923d50fcc4dd2fa1ba8339fd9d04cda38a0251b6c9b0",
|
||||
"licenses/dependencies/clipboard-win-5.4.1/supplement/DoumanAsh-clipboard-win-3b27cf2bfd1a-LICENSE": "c9bff75738922193e67fa726fa225535870d2aa1059f91452c411736284ad566",
|
||||
"licenses/dependencies/codespan-reporting-0.12.0/LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4",
|
||||
"licenses/dependencies/core_maths-0.1.1/LICENSE": "9ebf8c4cc0b735ca13a766451f7b8097db3185975ceb2ba94b5abf439156a91f",
|
||||
"licenses/dependencies/cosmic-text-0.15.0/fonts/FiraMono-LICENSE": "587dd9548304fd421cd254f7550bd101c1250ffc95417f2f7f92d55b44ecbe53",
|
||||
"licenses/dependencies/cosmic-text-0.15.0/fonts/Inter-LICENSE": "3c8d13d97ea5eb62868833a377034c6be6a9833e768d32abec2a767a8101e4bc",
|
||||
"licenses/dependencies/cosmic-text-0.15.0/fonts/NotoSans-LICENSE": "5ec4347054089def6904da61d04f0360968f9ef36634b1fe007a5b6ec2f7aa96",
|
||||
"licenses/dependencies/cosmic-text-0.15.0/LICENSE-APACHE": "000b4962e6b27176a0ff89cce4be555b16472cafb5671eb2804a8fdac6854793",
|
||||
"licenses/dependencies/cosmic-text-0.15.0/LICENSE-MIT": "95557bafe728379e206f3b6d4aceeaa054d271c71d722411a6222e2dec01138c",
|
||||
"licenses/dependencies/cpufeatures-0.3.1/LICENSE-APACHE": "a9040321c3712d8fd0b09cf52b17445de04a23a10165049ae187cd39e5c86be5",
|
||||
"licenses/dependencies/cpufeatures-0.3.1/LICENSE-MIT": "73b9dc2e79c7308998dd30296e073aefaefb944a68fb89aa412c23c0edcabcaa",
|
||||
"licenses/dependencies/cryoglyph-0.1.0/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/cryoglyph-0.1.0/LICENSE-MIT": "23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3",
|
||||
"licenses/dependencies/cryoglyph-0.1.0/LICENSE-ZLIB": "b3ec01ad0869c5c50937bc68780cd0bb44e235ad858dfa54a7a381dced9b115a",
|
||||
"licenses/dependencies/cursor-icon-1.2.0/LICENSE-APACHE": "b59affd015e517ed998dd735757f9a3693643cd389609947ed54074234a10784",
|
||||
"licenses/dependencies/cursor-icon-1.2.0/LICENSE-MIT": "c138726a726ac37bae09d0f8a48e74e8e3aa8a8952fcd10fae0fb224cc1c05f1",
|
||||
"licenses/dependencies/cursor-icon-1.2.0/LICENSE-ZLIB": "01e533bd94e8f1c32b2c2531e2c398de7d35d7804add3d574b4e1fe581d53537",
|
||||
"licenses/dependencies/displaydoc-0.2.7/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/displaydoc-0.2.7/LICENSE-MIT": "23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3",
|
||||
"licenses/dependencies/document-features-0.2.12/LICENSE-APACHE": "074e6e32c86a4c0ef8b3ed25b721ca23aca83df277cd88106ef7177c354615ff",
|
||||
"licenses/dependencies/document-features-0.2.12/LICENSE-MIT": "aa893340d14b9844625be6a50ac644169a01b52f0211cbf81b09e1874c8cd81d",
|
||||
"licenses/dependencies/dpi-0.1.2/LICENSE": "6dc0e068dcf3a5bc8e054205b85b7720e1d49265bbc64bf515d2cf79197df69a",
|
||||
"licenses/dependencies/dpi-0.1.2/LICENSE-LIBM-MIT": "9eff396a99bafd208e7126602420d6864f6066c08b84485a5b032320a9c01997",
|
||||
"licenses/dependencies/equivalent-1.0.2/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/equivalent-1.0.2/LICENSE-MIT": "7365cc8878a1d7ce155a58c4ca09c3d7a6be413efa5334a80ea842912b669349",
|
||||
"licenses/dependencies/error-code-3.4.0/LICENSE": "c9bff75738922193e67fa726fa225535870d2aa1059f91452c411736284ad566",
|
||||
"licenses/dependencies/etagere-0.2.15/LICENSE-APACHE": "2d56a37f3d1e461f6b1539ab94e0e6bcc55443e376098aee85ac3b2890860290",
|
||||
"licenses/dependencies/etagere-0.2.15/LICENSE-MIT": "9cfc9c9a4608501b5da3746948d2be2dd709ad51f6bcb0c1c685760ee3dde31f",
|
||||
"licenses/dependencies/euclid-0.22.14/COPYRIGHT": "ec82b96487e9e778ee610c7ab245162464782cfa1f555c2299333f8dbe5c036a",
|
||||
"licenses/dependencies/euclid-0.22.14/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/euclid-0.22.14/LICENSE-MIT": "62065228e42caebca7e7d7db1204cbb867033de5982ca4009928915e4095f3a3",
|
||||
"licenses/dependencies/fastrand-2.5.0/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/fastrand-2.5.0/LICENSE-MIT": "23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3",
|
||||
"licenses/dependencies/find-msvc-tools-0.1.12/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/find-msvc-tools-0.1.12/LICENSE-MIT": "378f5840b258e2779c39418f3f2d7b2ba96f1c7917dd6be0713f88305dbda397",
|
||||
"licenses/dependencies/float_next_after-1.0.0/LICENSE": "0604d5817110dacc5c7d9b7de6b58b962794603d4823c357157bd5dec4198bc5",
|
||||
"licenses/dependencies/foldhash-0.1.5/LICENSE": "b1181a40b2a7b25cf66fd01481713bc1005df082c53ef73e851e55071b102744",
|
||||
"licenses/dependencies/foldhash-0.2.0/LICENSE": "b1181a40b2a7b25cf66fd01481713bc1005df082c53ef73e851e55071b102744",
|
||||
"licenses/dependencies/font-types-0.10.1/LICENSE-APACHE": "a14f7d685a79c0f4fb64aee305527a6d5fa55f2401f4e6d688d7b1301868e6c0",
|
||||
"licenses/dependencies/font-types-0.10.1/LICENSE-MIT": "8a62fa27ffdccc3df19dce90f8bb3d572e27aecffc1a383d0c2601834dcec434",
|
||||
"licenses/dependencies/font-types-0.12.4/LICENSE-APACHE": "eba684204073ed715c4abb48129acdfd2bff8ae48339e6a7da3b341d3027b7f0",
|
||||
"licenses/dependencies/font-types-0.12.4/LICENSE-MIT": "7b4c9a3946dfcea7967582760e963e27799e225dcf20565c8ef55324bb017427",
|
||||
"licenses/dependencies/fontdb-0.23.0/LICENSE": "59a1fdac3bd550043599bd159fd70f09a1108c2b09e3751d39b11e1ff8e51f00",
|
||||
"licenses/dependencies/fontdb-0.23.0/tests/fonts/LICENSE.txt": "b84fdd2c3da5db56385cdbb639795e90aa3e035c53bc3591135f18df3331451f",
|
||||
"licenses/dependencies/form_urlencoded-1.2.2/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/form_urlencoded-1.2.2/LICENSE-MIT": "20c7855c364d57ea4c97889a5e8d98470a9952dade37bd9248b9a54431670e5e",
|
||||
"licenses/dependencies/futures-0.3.34/LICENSE-APACHE": "275c491d6d1160553c32fd6127061d7f9606c3ea25abfad6ca3f6ed088785427",
|
||||
"licenses/dependencies/futures-0.3.34/LICENSE-MIT": "6652c868f35dfe5e8ef636810a4e576b9d663f3a17fb0f5613ad73583e1b88fd",
|
||||
"licenses/dependencies/futures-channel-0.3.34/LICENSE-APACHE": "275c491d6d1160553c32fd6127061d7f9606c3ea25abfad6ca3f6ed088785427",
|
||||
"licenses/dependencies/futures-channel-0.3.34/LICENSE-MIT": "6652c868f35dfe5e8ef636810a4e576b9d663f3a17fb0f5613ad73583e1b88fd",
|
||||
"licenses/dependencies/futures-core-0.3.34/LICENSE-APACHE": "275c491d6d1160553c32fd6127061d7f9606c3ea25abfad6ca3f6ed088785427",
|
||||
"licenses/dependencies/futures-core-0.3.34/LICENSE-MIT": "6652c868f35dfe5e8ef636810a4e576b9d663f3a17fb0f5613ad73583e1b88fd",
|
||||
"licenses/dependencies/futures-executor-0.3.34/LICENSE-APACHE": "275c491d6d1160553c32fd6127061d7f9606c3ea25abfad6ca3f6ed088785427",
|
||||
"licenses/dependencies/futures-executor-0.3.34/LICENSE-MIT": "6652c868f35dfe5e8ef636810a4e576b9d663f3a17fb0f5613ad73583e1b88fd",
|
||||
"licenses/dependencies/futures-io-0.3.34/LICENSE-APACHE": "275c491d6d1160553c32fd6127061d7f9606c3ea25abfad6ca3f6ed088785427",
|
||||
"licenses/dependencies/futures-io-0.3.34/LICENSE-MIT": "6652c868f35dfe5e8ef636810a4e576b9d663f3a17fb0f5613ad73583e1b88fd",
|
||||
"licenses/dependencies/futures-macro-0.3.34/LICENSE-APACHE": "275c491d6d1160553c32fd6127061d7f9606c3ea25abfad6ca3f6ed088785427",
|
||||
"licenses/dependencies/futures-macro-0.3.34/LICENSE-MIT": "6652c868f35dfe5e8ef636810a4e576b9d663f3a17fb0f5613ad73583e1b88fd",
|
||||
"licenses/dependencies/futures-sink-0.3.34/LICENSE-APACHE": "275c491d6d1160553c32fd6127061d7f9606c3ea25abfad6ca3f6ed088785427",
|
||||
"licenses/dependencies/futures-sink-0.3.34/LICENSE-MIT": "6652c868f35dfe5e8ef636810a4e576b9d663f3a17fb0f5613ad73583e1b88fd",
|
||||
"licenses/dependencies/futures-task-0.3.34/LICENSE-APACHE": "275c491d6d1160553c32fd6127061d7f9606c3ea25abfad6ca3f6ed088785427",
|
||||
"licenses/dependencies/futures-task-0.3.34/LICENSE-MIT": "6652c868f35dfe5e8ef636810a4e576b9d663f3a17fb0f5613ad73583e1b88fd",
|
||||
"licenses/dependencies/futures-util-0.3.34/LICENSE-APACHE": "275c491d6d1160553c32fd6127061d7f9606c3ea25abfad6ca3f6ed088785427",
|
||||
"licenses/dependencies/futures-util-0.3.34/LICENSE-MIT": "6652c868f35dfe5e8ef636810a4e576b9d663f3a17fb0f5613ad73583e1b88fd",
|
||||
"licenses/dependencies/getrandom-0.2.17/LICENSE-APACHE": "aaff376532ea30a0cd5330b9502ad4a4c8bf769c539c87ffe78819d188a18ebf",
|
||||
"licenses/dependencies/getrandom-0.2.17/LICENSE-MIT": "42fa16951ce7f24b5a467a40e5b449a1d41e662f97ca779864f053f39e097737",
|
||||
"licenses/dependencies/getrandom-0.4.3/LICENSE-APACHE": "aaff376532ea30a0cd5330b9502ad4a4c8bf769c539c87ffe78819d188a18ebf",
|
||||
"licenses/dependencies/getrandom-0.4.3/LICENSE-MIT": "523a42c25d245dde9c015f882cec7f4555aad883382a6cf19b4b7d9b2cd5419b",
|
||||
"licenses/dependencies/gl_generator-0.14.0/supplement/brendanzab-gl-rs-ea503e8d5fb6-LICENSE": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30",
|
||||
"licenses/dependencies/glam-0.25.0/LICENSE-APACHE": "be33ddb87a30fd321ab100e2d922cba512e50ec7a63d8e62e5bfc0798dd4b585",
|
||||
"licenses/dependencies/glam-0.25.0/LICENSE-MIT": "23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3",
|
||||
"licenses/dependencies/glow-0.16.0/LICENSE-APACHE": "b8601fc79bdf8d8088f0938bea861ffc63ed0eebbedf25f44ab2cf2e85bd7edc",
|
||||
"licenses/dependencies/glow-0.16.0/LICENSE-MIT": "cdbd06e25b8c9c5d6019949d2de8123f56d29cee4166396423d2ba8c81700845",
|
||||
"licenses/dependencies/glow-0.16.0/LICENSE-ZLIB": "636f644f1e149eb62961657c0e34953681eff64435653912e7bd19992666faa5",
|
||||
"licenses/dependencies/glutin_wgl_sys-0.6.1/LICENSE": "a4445427440043e8ce6fadf7a43fb906cb0d7f6c573a560a9f142cf9f9bf8ff4",
|
||||
"licenses/dependencies/gpu-alloc-0.6.2/supplement/zakarumych-gpu-alloc-61020bdcb4eb-COPYING": "12121dfa588677007848ab922a45a1e3248868f6ff063598fceb3141d7897314",
|
||||
"licenses/dependencies/gpu-alloc-types-0.3.1/supplement/zakarumych-gpu-alloc-7ddd1fe576fc-COPYING": "12121dfa588677007848ab922a45a1e3248868f6ff063598fceb3141d7897314",
|
||||
"licenses/dependencies/gpu-allocator-0.27.0/LICENSE-APACHE": "0178e21322b0e88aa3aeb3146f6a9611bc1f8df6d98bdfb34be28b9dd56a8107",
|
||||
"licenses/dependencies/gpu-allocator-0.27.0/LICENSE-MIT": "ad41be6cc6538b29b9346648f41432b5e460bad6be073b5eeaa41320ea2921dc",
|
||||
"licenses/dependencies/gpu-descriptor-0.3.2/supplement/zakarumych-gpu-descriptor-bb28b4e55b74-COPYING": "f72143f7e9d9fb8bd336b139fa22f825a299591c29f2f7338c5566347b137613",
|
||||
"licenses/dependencies/gpu-descriptor-types-0.2.0/supplement/zakarumych-gpu-descriptor-9f2fb9546591-COPYING": "f72143f7e9d9fb8bd336b139fa22f825a299591c29f2f7338c5566347b137613",
|
||||
"licenses/dependencies/guillotiere-0.6.2/LICENSE": "7e98bed7f100747aaae7d82ab94fbe6b76fd6b84b09a3aaa413bff8196d0fbb1",
|
||||
"licenses/dependencies/half-2.7.1/LICENSE-APACHE": "a6cba85bc92e0cff7a450b1d873c0eaa2e9fc96bf472df0247a26bec77bf3ff9",
|
||||
"licenses/dependencies/half-2.7.1/LICENSE-MIT": "508a77d2e7b51d98adeed32648ad124b7b30241a8e70b2e72c99f92d8e5874d1",
|
||||
"licenses/dependencies/harfrust-0.3.2/LICENSE": "7d43d2ef1ce976c7bfb423c696ad9938ccfc31e9ec5be752265e43fe9d29f697",
|
||||
"licenses/dependencies/harfrust-0.3.2/scripts/ms-use/COPYING": "9906940f61b1f0b533fa7d99baf55178b2808fbe113ea51dfbfad8572ccd5f2b",
|
||||
"licenses/dependencies/hashbrown-0.15.5/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/hashbrown-0.15.5/LICENSE-MIT": "ff8f68cb076caf8cefe7a6430d4ac086ce6af2ca8ce2c4e5a2004d4552ef52a2",
|
||||
"licenses/dependencies/hashbrown-0.16.1/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/hashbrown-0.16.1/LICENSE-MIT": "ff8f68cb076caf8cefe7a6430d4ac086ce6af2ca8ce2c4e5a2004d4552ef52a2",
|
||||
"licenses/dependencies/hashbrown-0.17.1/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/hashbrown-0.17.1/LICENSE-MIT": "ff8f68cb076caf8cefe7a6430d4ac086ce6af2ca8ce2c4e5a2004d4552ef52a2",
|
||||
"licenses/dependencies/hexf-parse-0.2.1/supplement/CC0-1.0.txt": "a2010f343487d3f7618affe54f789f5487602331c0a8d03f49e9a7c547cf0499",
|
||||
"licenses/dependencies/hexf-parse-0.2.1/supplement/hexf-parse-0.2.1-Cargo.toml": "4a56dbdbc12054fd33b7a2634a45cbbe6fe12f5e6f4081002cbfa527f7220c70",
|
||||
"licenses/dependencies/http-1.5.0/LICENSE-APACHE": "8bb1b50b0e5c9399ae33bd35fab2769010fa6c14e8860c729a52295d84896b7a",
|
||||
"licenses/dependencies/http-1.5.0/LICENSE-MIT": "dc91f8200e4b2a1f9261035d4c18c33c246911a6c0f7b543d75347e61b249cff",
|
||||
"licenses/dependencies/http-body-1.1.0/LICENSE": "248378d0a3383c173fb925f17141b88e71580b3ba17ddc6ac3d2a344683232ab",
|
||||
"licenses/dependencies/http-body-util-0.1.5/LICENSE": "248378d0a3383c173fb925f17141b88e71580b3ba17ddc6ac3d2a344683232ab",
|
||||
"licenses/dependencies/httparse-1.10.1/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/httparse-1.10.1/LICENSE-MIT": "391a5396cec6230bfabd4ef4eb2350eb895bc5efce377a2218f5702ed020d3e3",
|
||||
"licenses/dependencies/httpdate-1.0.3/LICENSE-APACHE": "4d10fe5f3aa176b05b229a248866bad70b834c173f1252a814ff4748d8a13837",
|
||||
"licenses/dependencies/httpdate-1.0.3/LICENSE-MIT": "934887691e05d69d7c86ad3f2c360980fa30c15b035e351f3c9865e99da4debc",
|
||||
"licenses/dependencies/hyper-1.11.1/LICENSE": "2d01890414494742ba4a509fcec8efa40f6d8be22cbd72be7cff08d6fda4ec89",
|
||||
"licenses/dependencies/hyper-rustls-0.27.9/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/hyper-rustls-0.27.9/LICENSE-ISC": "7cfafc877eccc46c0e346ccbaa5c51bb6b894d2b818e617d970211e232785ad4",
|
||||
"licenses/dependencies/hyper-rustls-0.27.9/LICENSE-MIT": "709e3175b4212f7b13aa93971c9f62ff8c69ec45ad8c6532a7e0c41d7a7d6f8c",
|
||||
"licenses/dependencies/hyper-util-0.1.20/LICENSE": "9e0a97848ea543aef745c98e84fde696a9a3e0735538f6daefdd3cb1942effc1",
|
||||
"licenses/dependencies/iced_core-0.14.0/src/layout/DRUID_LICENSE": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30",
|
||||
"licenses/dependencies/iced_core-0.14.0/supplement/iced-rs-iced-3997291f318a-LICENSE": "fc9086ba4eba4b77e4c603906362742bc3715ffa2c7810c6074fe7780d3a0398",
|
||||
"licenses/dependencies/iced_debug-0.14.0/supplement/iced-rs-iced-3997291f318a-LICENSE": "fc9086ba4eba4b77e4c603906362742bc3715ffa2c7810c6074fe7780d3a0398",
|
||||
"licenses/dependencies/iced_futures-0.14.0/supplement/iced-rs-iced-3997291f318a-LICENSE": "fc9086ba4eba4b77e4c603906362742bc3715ffa2c7810c6074fe7780d3a0398",
|
||||
"licenses/dependencies/iced_graphics-0.14.0/assets/FiraSans-Regular.ttf/Fira-OFL.txt": "99bfb7c1e845b79d1031fcf37e678178eb4a8c7cc74a3f218ddf7223083a6fcd",
|
||||
"licenses/dependencies/iced_graphics-0.14.0/assets/FiraSans-Regular.ttf/FiraSans-Regular-NOTICE.txt": "1e0baaa389b1647d06322ac9ea37822f31995408200ae5a2805a6b9bea0810d1",
|
||||
"licenses/dependencies/iced_graphics-0.14.0/assets/Iced-Icons.ttf/Iced-Icons-NOTICE.txt": "8175634e30f84ef72a24c4965fb0e87f45a3c1274cc0e79e0473af582cffd1c4",
|
||||
"licenses/dependencies/iced_graphics-0.14.0/assets/Iced-Icons.ttf/iced-rs-iced-3997291f318a-LICENSE": "fc9086ba4eba4b77e4c603906362742bc3715ffa2c7810c6074fe7780d3a0398",
|
||||
"licenses/dependencies/iced_graphics-0.14.0/supplement/iced-rs-iced-3997291f318a-LICENSE": "fc9086ba4eba4b77e4c603906362742bc3715ffa2c7810c6074fe7780d3a0398",
|
||||
"licenses/dependencies/iced_program-0.14.0/supplement/iced-rs-iced-3997291f318a-LICENSE": "fc9086ba4eba4b77e4c603906362742bc3715ffa2c7810c6074fe7780d3a0398",
|
||||
"licenses/dependencies/iced_renderer-0.14.0/supplement/iced-rs-iced-3997291f318a-LICENSE": "fc9086ba4eba4b77e4c603906362742bc3715ffa2c7810c6074fe7780d3a0398",
|
||||
"licenses/dependencies/iced_runtime-0.14.0/supplement/iced-rs-iced-3997291f318a-LICENSE": "fc9086ba4eba4b77e4c603906362742bc3715ffa2c7810c6074fe7780d3a0398",
|
||||
"licenses/dependencies/iced_tiny_skia-0.14.0/supplement/iced-rs-iced-3997291f318a-LICENSE": "fc9086ba4eba4b77e4c603906362742bc3715ffa2c7810c6074fe7780d3a0398",
|
||||
"licenses/dependencies/iced_wgpu-0.14.0/supplement/iced-rs-iced-3997291f318a-LICENSE": "fc9086ba4eba4b77e4c603906362742bc3715ffa2c7810c6074fe7780d3a0398",
|
||||
"licenses/dependencies/iced_widget-0.14.2/ARCADIA-PATCH.md": "d3acb98e5f423970b0bf4198373efddaea6f3a51aa282da571cf95c0f5690504",
|
||||
"licenses/dependencies/iced_widget-0.14.2/LICENSE": "fc9086ba4eba4b77e4c603906362742bc3715ffa2c7810c6074fe7780d3a0398",
|
||||
"licenses/dependencies/iced_winit-0.14.0/supplement/iced-rs-iced-3997291f318a-LICENSE": "fc9086ba4eba4b77e4c603906362742bc3715ffa2c7810c6074fe7780d3a0398",
|
||||
"licenses/dependencies/iced-0.14.0/LICENSE": "fc9086ba4eba4b77e4c603906362742bc3715ffa2c7810c6074fe7780d3a0398",
|
||||
"licenses/dependencies/icu_collections-2.3.0/LICENSE": "f367c1b8e1aa262435251e442901da4607b4650e0e63a026f5044473ecfb90f2",
|
||||
"licenses/dependencies/icu_locale_core-2.3.0/LICENSE": "f367c1b8e1aa262435251e442901da4607b4650e0e63a026f5044473ecfb90f2",
|
||||
"licenses/dependencies/icu_normalizer_data-2.3.0/LICENSE": "f367c1b8e1aa262435251e442901da4607b4650e0e63a026f5044473ecfb90f2",
|
||||
"licenses/dependencies/icu_normalizer-2.3.0/LICENSE": "f367c1b8e1aa262435251e442901da4607b4650e0e63a026f5044473ecfb90f2",
|
||||
"licenses/dependencies/icu_properties_data-2.3.0/LICENSE": "f367c1b8e1aa262435251e442901da4607b4650e0e63a026f5044473ecfb90f2",
|
||||
"licenses/dependencies/icu_properties-2.3.0/LICENSE": "f367c1b8e1aa262435251e442901da4607b4650e0e63a026f5044473ecfb90f2",
|
||||
"licenses/dependencies/icu_provider-2.3.1/LICENSE": "f367c1b8e1aa262435251e442901da4607b4650e0e63a026f5044473ecfb90f2",
|
||||
"licenses/dependencies/idna_adapter-1.2.2/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/idna_adapter-1.2.2/LICENSE-MIT": "8b43ce8accd61e9d370b5ca9e9c4f953279b5c239926c62315b40e24df51b726",
|
||||
"licenses/dependencies/idna-1.1.0/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/idna-1.1.0/LICENSE-MIT": "b38f11f6096706e6de553dabe2a7ed142d59b6fa8c97e290c67496154745cdd5",
|
||||
"licenses/dependencies/indexmap-2.14.1/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/indexmap-2.14.1/LICENSE-MIT": "ecc269ef87fd38a1d98e30bfac9ba964a9dbd9315c3770fed98d4d7cb5882055",
|
||||
"licenses/dependencies/ipnet-2.12.1/LICENSE-APACHE": "87d9feb9238c6bd8e0024fc4733b06cff036f89f36d93b7df1c8a0549bbb7a5b",
|
||||
"licenses/dependencies/ipnet-2.12.1/LICENSE-MIT": "47dc9ff29128ddfb4d6a0435383c9f89120bc374dbcc1dd00b933a0b28aa7865",
|
||||
"licenses/dependencies/itoa-1.0.18/LICENSE-APACHE": "62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a",
|
||||
"licenses/dependencies/itoa-1.0.18/LICENSE-MIT": "23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3",
|
||||
"licenses/dependencies/jobserver-0.1.35/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/jobserver-0.1.35/LICENSE-MIT": "378f5840b258e2779c39418f3f2d7b2ba96f1c7917dd6be0713f88305dbda397",
|
||||
"licenses/dependencies/khronos_api-3.1.0/supplement/brendanzab-gl-rs-f150967b1c44-LICENSE": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30",
|
||||
"licenses/dependencies/khronos-egl-6.0.0/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/khronos-egl-6.0.0/LICENSE-MIT": "23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3",
|
||||
"licenses/dependencies/kurbo-0.10.4/LICENSE-APACHE": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30",
|
||||
"licenses/dependencies/kurbo-0.10.4/LICENSE-MIT": "23c23145f6eac25c28cdcc03d38506a5712a9a8cffb5bd5301457f6173ea696e",
|
||||
"licenses/dependencies/libc-0.2.189/LICENSE-APACHE": "62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a",
|
||||
"licenses/dependencies/libc-0.2.189/LICENSE-MIT": "123a331b5dbf04c30097fa43b8f858bc85df671fe776de498d01f3d6b7c1f69e",
|
||||
"licenses/dependencies/libloading-0.8.9/LICENSE": "b29f8b01452350c20dd1af16ef83b598fea3053578ccc1c7a0ef40e57be2620f",
|
||||
"licenses/dependencies/libm-0.2.16/LICENSE.txt": "3823dda7cf046602f4b4e77ec8e227863dc4736037cc85bb33d9f19febe16bb7",
|
||||
"licenses/dependencies/lilt-0.8.2/LICENSE": "120b2f21f9b9f98ef4159de09f9a55a3afb6733dd1c0b1d9eeec7f136465b2cd",
|
||||
"licenses/dependencies/linebender_resource_handle-0.1.1/LICENSE-APACHE": "a6cba85bc92e0cff7a450b1d873c0eaa2e9fc96bf472df0247a26bec77bf3ff9",
|
||||
"licenses/dependencies/linebender_resource_handle-0.1.1/LICENSE-MIT": "508a77d2e7b51d98adeed32648ad124b7b30241a8e70b2e72c99f92d8e5874d1",
|
||||
"licenses/dependencies/litemap-0.8.3/LICENSE": "f367c1b8e1aa262435251e442901da4607b4650e0e63a026f5044473ecfb90f2",
|
||||
"licenses/dependencies/litrs-1.0.0/LICENSE-APACHE": "62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a",
|
||||
"licenses/dependencies/litrs-1.0.0/LICENSE-MIT": "7dc1552e88f49132cb358b1b962fc5e79fa42d70bcbb88c526d33e45b8e98036",
|
||||
"licenses/dependencies/lock_api-0.4.14/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/lock_api-0.4.14/LICENSE-MIT": "c9a75f18b9ab2927829a208fc6aa2cf4e63b8420887ba29cdb265d6619ae82d5",
|
||||
"licenses/dependencies/log-0.4.34/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/log-0.4.34/LICENSE-MIT": "6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb",
|
||||
"licenses/dependencies/lru-0.16.4/LICENSE": "061dc50af2cd9340703daf61978af3200cf681b12ea67a323c33ba109a23a45e",
|
||||
"licenses/dependencies/lru-slab-0.1.2/LICENSE-APACHE": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30",
|
||||
"licenses/dependencies/lru-slab-0.1.2/LICENSE-MIT": "1466d9b4f3a59bb8997fc8d5fa977ce3f6a24bb2358793c09bfdf007039f6486",
|
||||
"licenses/dependencies/lru-slab-0.1.2/LICENSE-ZLIB": "09785877275ffada6c371b652a30e95c26b435126fc0fc62f1bc2d72171f80a4",
|
||||
"licenses/dependencies/lyon_algorithms-1.0.21/supplement/nical-lyon-994526f2766c-LICENSE-APACHE": "216486f29671a4262efe32af6d84a75bef398127f8c5f369b5c8305983887a06",
|
||||
"licenses/dependencies/lyon_algorithms-1.0.21/supplement/nical-lyon-994526f2766c-LICENSE-MIT": "80f275e90d799911ed3830a7f242a2ef5a4ade2092fe0aa07bfb2d2cf2f2b95e",
|
||||
"licenses/dependencies/lyon_geom-1.0.19/supplement/nical-lyon-56219c95c658-LICENSE-APACHE": "216486f29671a4262efe32af6d84a75bef398127f8c5f369b5c8305983887a06",
|
||||
"licenses/dependencies/lyon_geom-1.0.19/supplement/nical-lyon-56219c95c658-LICENSE-MIT": "80f275e90d799911ed3830a7f242a2ef5a4ade2092fe0aa07bfb2d2cf2f2b95e",
|
||||
"licenses/dependencies/lyon_path-1.0.19/supplement/nical-lyon-56219c95c658-LICENSE-APACHE": "216486f29671a4262efe32af6d84a75bef398127f8c5f369b5c8305983887a06",
|
||||
"licenses/dependencies/lyon_path-1.0.19/supplement/nical-lyon-56219c95c658-LICENSE-MIT": "80f275e90d799911ed3830a7f242a2ef5a4ade2092fe0aa07bfb2d2cf2f2b95e",
|
||||
"licenses/dependencies/lyon_tessellation-1.0.21/supplement/nical-lyon-994526f2766c-LICENSE-APACHE": "216486f29671a4262efe32af6d84a75bef398127f8c5f369b5c8305983887a06",
|
||||
"licenses/dependencies/lyon_tessellation-1.0.21/supplement/nical-lyon-994526f2766c-LICENSE-MIT": "80f275e90d799911ed3830a7f242a2ef5a4ade2092fe0aa07bfb2d2cf2f2b95e",
|
||||
"licenses/dependencies/lyon-1.0.19/supplement/nical-lyon-56219c95c658-LICENSE-APACHE": "216486f29671a4262efe32af6d84a75bef398127f8c5f369b5c8305983887a06",
|
||||
"licenses/dependencies/lyon-1.0.19/supplement/nical-lyon-56219c95c658-LICENSE-MIT": "80f275e90d799911ed3830a7f242a2ef5a4ade2092fe0aa07bfb2d2cf2f2b95e",
|
||||
"licenses/dependencies/matchit-0.8.4/LICENSE": "de701d0618d694feb1af90f02181a1763d9b0bdeb70a3a592781e529077dba65",
|
||||
"licenses/dependencies/matchit-0.8.4/LICENSE.httprouter": "162ce11ad71338d0a0c6ebaf5c48af72c6ae237b468859d3656fe2d9ed3f3a85",
|
||||
"licenses/dependencies/memchr-2.8.3/COPYING": "01c266bced4a434da0051174d6bee16a4c82cf634e2679b6155d40d75012390f",
|
||||
"licenses/dependencies/memchr-2.8.3/LICENSE-MIT": "0f96a83840e146e43c0ec96a22ec1f392e0680e6c1226e6f3ba87e0740af850f",
|
||||
"licenses/dependencies/memchr-2.8.3/UNLICENSE": "7e12e5df4bae12cb21581ba157ced20e1986a0508dd10d0e8a4ab9a4cf94e85c",
|
||||
"licenses/dependencies/memmap2-0.9.11/LICENSE-APACHE": "04ea4849dba9dcae07113850c6f1b1a69052c625210639914eee352023f750ad",
|
||||
"licenses/dependencies/memmap2-0.9.11/LICENSE-MIT": "0d25d03b5ab49576178ad0cae7a2648d12c17ad0452fe49c07e55e4b59aa5257",
|
||||
"licenses/dependencies/mime-0.3.17/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/mime-0.3.17/LICENSE-MIT": "df9cfd06d8a44d9a671eadd39ffd97f166481da015a30f45dfd27886209c5922",
|
||||
"licenses/dependencies/mio-1.2.3/LICENSE": "07919255c7e04793d8ea760d6c2ce32d19f9ff02bdbdde3ce90b1e1880929a9b",
|
||||
"licenses/dependencies/naga-27.0.3/LICENSE.APACHE": "a6cba85bc92e0cff7a450b1d873c0eaa2e9fc96bf472df0247a26bec77bf3ff9",
|
||||
"licenses/dependencies/naga-27.0.3/LICENSE.MIT": "dc0d97139e8205818c703741c7be7cb3b96888bd5917b8d6fc6133731e403c21",
|
||||
"licenses/dependencies/num-bigint-0.5.1/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/num-bigint-0.5.1/LICENSE-MIT": "6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb",
|
||||
"licenses/dependencies/num-integer-0.1.47/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/num-integer-0.1.47/LICENSE-MIT": "6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb",
|
||||
"licenses/dependencies/num-traits-0.2.19/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/num-traits-0.2.19/LICENSE-MIT": "6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb",
|
||||
"licenses/dependencies/oa-core-0.2.0/workspace-LICENSE": "51009f2cb07e5d19645858b2fbc037a672a25f8cbf7999522942b86807ecf365",
|
||||
"licenses/dependencies/oa-desktop-0.2.0/workspace-LICENSE": "51009f2cb07e5d19645858b2fbc037a672a25f8cbf7999522942b86807ecf365",
|
||||
"licenses/dependencies/oa-server-0.2.0/workspace-LICENSE": "51009f2cb07e5d19645858b2fbc037a672a25f8cbf7999522942b86807ecf365",
|
||||
"licenses/dependencies/once_cell-1.21.4/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/once_cell-1.21.4/LICENSE-MIT": "23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3",
|
||||
"licenses/dependencies/ordered-float-5.5.0/LICENSE-MIT": "f7715d38a3fa1b4ac97c5729740752505a39cb92ee83ab5b102aeb5eaa7cdea4",
|
||||
"licenses/dependencies/parking_lot_core-0.9.12/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/parking_lot_core-0.9.12/LICENSE-MIT": "c9a75f18b9ab2927829a208fc6aa2cf4e63b8420887ba29cdb265d6619ae82d5",
|
||||
"licenses/dependencies/parking_lot-0.12.5/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/parking_lot-0.12.5/LICENSE-MIT": "c9a75f18b9ab2927829a208fc6aa2cf4e63b8420887ba29cdb265d6619ae82d5",
|
||||
"licenses/dependencies/percent-encoding-2.3.2/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/percent-encoding-2.3.2/LICENSE-MIT": "b38f11f6096706e6de553dabe2a7ed142d59b6fa8c97e290c67496154745cdd5",
|
||||
"licenses/dependencies/pin-project-lite-0.2.17/LICENSE-APACHE": "0d542e0c8804e39aa7f37eb00da5a762149dc682d7829451287e11b938e94594",
|
||||
"licenses/dependencies/pin-project-lite-0.2.17/LICENSE-MIT": "23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3",
|
||||
"licenses/dependencies/pkg-config-0.3.34/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/pkg-config-0.3.34/LICENSE-MIT": "378f5840b258e2779c39418f3f2d7b2ba96f1c7917dd6be0713f88305dbda397",
|
||||
"licenses/dependencies/potential_utf-0.1.6/LICENSE": "f367c1b8e1aa262435251e442901da4607b4650e0e63a026f5044473ecfb90f2",
|
||||
"licenses/dependencies/presser-0.3.1/LICENSE-APACHE": "8173d5c29b4f956d532781d2b86e4e30f83e6b7878dce18c919451d6ba707c90",
|
||||
"licenses/dependencies/presser-0.3.1/LICENSE-MIT": "090a294a492ab2f41388252312a65cf2f0e423330b721a68c6665ac64766753b",
|
||||
"licenses/dependencies/proc-macro2-1.0.107/LICENSE-APACHE": "62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a",
|
||||
"licenses/dependencies/proc-macro2-1.0.107/LICENSE-MIT": "23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3",
|
||||
"licenses/dependencies/profiling-1.0.18/supplement/aclysma-profiling-8271551172eb-LICENSE-APACHE": "10d30a673cd5e9349bdc02aeb48f14b3386d27d0da32df8f0a555d4aa16aa551",
|
||||
"licenses/dependencies/profiling-1.0.18/supplement/aclysma-profiling-8271551172eb-LICENSE-MIT": "c8167fdeeed46d3f244d3f85c5bf998ce889343691c32be2c61a8bc4b5c08333",
|
||||
"licenses/dependencies/quinn-0.11.11/LICENSE-APACHE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4",
|
||||
"licenses/dependencies/quinn-0.11.11/LICENSE-MIT": "4b2d0aca6789fa39e03d6738e869ea0988cceba210ca34ebb59c15c463e93a04",
|
||||
"licenses/dependencies/quinn-proto-0.11.17/LICENSE-APACHE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4",
|
||||
"licenses/dependencies/quinn-proto-0.11.17/LICENSE-MIT": "4b2d0aca6789fa39e03d6738e869ea0988cceba210ca34ebb59c15c463e93a04",
|
||||
"licenses/dependencies/quinn-udp-0.5.15/LICENSE-APACHE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4",
|
||||
"licenses/dependencies/quinn-udp-0.5.15/LICENSE-MIT": "4b2d0aca6789fa39e03d6738e869ea0988cceba210ca34ebb59c15c463e93a04",
|
||||
"licenses/dependencies/quote-1.0.47/LICENSE-APACHE": "62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a",
|
||||
"licenses/dependencies/quote-1.0.47/LICENSE-MIT": "23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3",
|
||||
"licenses/dependencies/rand_core-0.10.1/COPYRIGHT": "92b81db30f7ab6d693e0af5661a40d273ca1947e891123ed823924192c10cbc7",
|
||||
"licenses/dependencies/rand_core-0.10.1/LICENSE-APACHE": "6df43f6f4b5d4587f3d8d71e45532c688fd168afa5fe89d571cb32fa09c4ef51",
|
||||
"licenses/dependencies/rand_core-0.10.1/LICENSE-MIT": "8b6e9feec03e7c9a5facb26855cecd31662bf989b636bcfe79521bdf8ac863f0",
|
||||
"licenses/dependencies/rand_pcg-0.10.2/COPYRIGHT": "90eb64f0279b0d9432accfa6023ff803bc4965212383697eee27a0f426d5f8d5",
|
||||
"licenses/dependencies/rand_pcg-0.10.2/LICENSE-APACHE": "6df43f6f4b5d4587f3d8d71e45532c688fd168afa5fe89d571cb32fa09c4ef51",
|
||||
"licenses/dependencies/rand_pcg-0.10.2/LICENSE-MIT": "2234e3cefee876aeb686ad89e978bdb07bf118a1186ab1cf161bcdf69d4b4f57",
|
||||
"licenses/dependencies/rand-0.10.2/COPYRIGHT": "90eb64f0279b0d9432accfa6023ff803bc4965212383697eee27a0f426d5f8d5",
|
||||
"licenses/dependencies/rand-0.10.2/LICENSE-APACHE": "35242e7a83f69875e6edeff02291e688c97caafe2f8902e4e19b49d3e78b4cab",
|
||||
"licenses/dependencies/rand-0.10.2/LICENSE-MIT": "209fbbe0ad52d9235e37badf9cadfe4dbdc87203179c0899e738b39ade42177b",
|
||||
"licenses/dependencies/range-alloc-0.1.5/LICENSE.APACHE": "a6cba85bc92e0cff7a450b1d873c0eaa2e9fc96bf472df0247a26bec77bf3ff9",
|
||||
"licenses/dependencies/range-alloc-0.1.5/LICENSE.MIT": "ba00052102ed87948bb8822d6e1c496260c83042887b22bb5caad922ec025a60",
|
||||
"licenses/dependencies/rangemap-1.8.0/LICENSE-APACHE": "1c7745cc26c7294bc9dbc883bcd50700b99a8c0f4859bfce84ec555098ce1ab5",
|
||||
"licenses/dependencies/rangemap-1.8.0/LICENSE-MIT": "29a4c3823ee29ee5a97c145574a1bac20629fd5e6708be1df0d25bab563e093c",
|
||||
"licenses/dependencies/raw-window-handle-0.6.2/LICENSE-APACHE.md": "0d542e0c8804e39aa7f37eb00da5a762149dc682d7829451287e11b938e94594",
|
||||
"licenses/dependencies/raw-window-handle-0.6.2/LICENSE-MIT.md": "9c5a80639a57c1c945570e7ebbca0706305849ce3c098021325cca9db2f7acc4",
|
||||
"licenses/dependencies/raw-window-handle-0.6.2/LICENSE-ZLIB.md": "ae895c8576e682f310fb70d93d9f99b1dd82872094c54a8f6cdfe2ca5c2d6ecb",
|
||||
"licenses/dependencies/read-fonts-0.35.0/LICENSE-APACHE": "a14f7d685a79c0f4fb64aee305527a6d5fa55f2401f4e6d688d7b1301868e6c0",
|
||||
"licenses/dependencies/read-fonts-0.35.0/LICENSE-MIT": "8a62fa27ffdccc3df19dce90f8bb3d572e27aecffc1a383d0c2601834dcec434",
|
||||
"licenses/dependencies/read-fonts-0.41.0/LICENSE-APACHE": "eba684204073ed715c4abb48129acdfd2bff8ae48339e6a7da3b341d3027b7f0",
|
||||
"licenses/dependencies/read-fonts-0.41.0/LICENSE-MIT": "7b4c9a3946dfcea7967582760e963e27799e225dcf20565c8ef55324bb017427",
|
||||
"licenses/dependencies/renderdoc-sys-1.1.0/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/renderdoc-sys-1.1.0/LICENSE-MIT": "24b2f2eff5a7622e87162823e260f00c6dfbce0e26d585d3d28c785f1edc80ed",
|
||||
"licenses/dependencies/reqwest-0.12.28/LICENSE-APACHE": "751963a8b88c0e3a9f27e98933079fbcf09b9998b2c13ac49c2e4d58444520d6",
|
||||
"licenses/dependencies/reqwest-0.12.28/LICENSE-MIT": "47d4e1803702728e03d30f8a848ae2249ba274bbd9f8443e803f7924d83cd371",
|
||||
"licenses/dependencies/rfd-0.15.4/LICENSE": "65fc947f4bac882a2cd104ef73c246b1b037059df9f2b3a58b7f77f0b9e56071",
|
||||
"licenses/dependencies/ring-0.17.14/LICENSE": "b3d734001a94efff3579978d953391aa7115f877657d25eb54037a43875d078a",
|
||||
"licenses/dependencies/ring-0.17.14/LICENSE-BoringSSL": "005fc765ddc5115da796cca915baa9557abae13ff35e0a47c47affc56f6c414d",
|
||||
"licenses/dependencies/ring-0.17.14/LICENSE-other-bits": "f025ccfb7dfb6bdfedc75ca0f67acc69e6fb4998143d834f7c2f38a29989680f",
|
||||
"licenses/dependencies/ring-0.17.14/src/polyfill/once_cell/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/ring-0.17.14/src/polyfill/once_cell/LICENSE-MIT": "6ee2ed6c77710de911761acd5fc1ad1da00f476beb1a7ef27e78c2d1858deafc",
|
||||
"licenses/dependencies/ring-0.17.14/third_party/fiat/LICENSE": "9eacbcb81be660840c714a560a9d65ba07913db98dd4baf969f78dd499fdd60f",
|
||||
"licenses/dependencies/rustc-hash-1.1.0/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/rustc-hash-1.1.0/LICENSE-MIT": "23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3",
|
||||
"licenses/dependencies/rustc-hash-2.1.3/LICENSE-APACHE": "95bd3988beee069fa2848f648dab43cc6e0b2add2ad6bcb17360caf749802bcc",
|
||||
"licenses/dependencies/rustc-hash-2.1.3/LICENSE-MIT": "30fefc3a7d6a0041541858293bcbea2dde4caa4c0a5802f996a7f7e8c0085652",
|
||||
"licenses/dependencies/rustls-0.23.43/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/rustls-0.23.43/LICENSE-ISC": "7cfafc877eccc46c0e346ccbaa5c51bb6b894d2b818e617d970211e232785ad4",
|
||||
"licenses/dependencies/rustls-0.23.43/LICENSE-MIT": "709e3175b4212f7b13aa93971c9f62ff8c69ec45ad8c6532a7e0c41d7a7d6f8c",
|
||||
"licenses/dependencies/rustls-pki-types-1.15.1/LICENSE-APACHE": "45fd05c4865e7c350b98ad7ac50e1b15462d49af4a91e9b0c9dd933dc9a69742",
|
||||
"licenses/dependencies/rustls-pki-types-1.15.1/LICENSE-MIT": "9117d922e667125508dde62b02c1f57ed22f5ad21eb536aa2e2d99e1c796e639",
|
||||
"licenses/dependencies/rustls-webpki-0.103.15/LICENSE": "5b698ca13897be3afdb7174256fa1574f8c6892b8bea1a66dd6469d3fe27885a",
|
||||
"licenses/dependencies/ryu-1.0.23/LICENSE-APACHE": "62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a",
|
||||
"licenses/dependencies/ryu-1.0.23/LICENSE-BOOST": "c9bff75738922193e67fa726fa225535870d2aa1059f91452c411736284ad566",
|
||||
"licenses/dependencies/same-file-1.0.6/COPYING": "01c266bced4a434da0051174d6bee16a4c82cf634e2679b6155d40d75012390f",
|
||||
"licenses/dependencies/same-file-1.0.6/LICENSE-MIT": "cb3c929a05e6cbc9de9ab06a4c57eeb60ca8c724bef6c138c87d3a577e27aa14",
|
||||
"licenses/dependencies/same-file-1.0.6/UNLICENSE": "7e12e5df4bae12cb21581ba157ced20e1986a0508dd10d0e8a4ab9a4cf94e85c",
|
||||
"licenses/dependencies/scopeguard-1.2.0/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/scopeguard-1.2.0/LICENSE-MIT": "fb77f0a9c53e473abe5103c8632ef9f0f2874d4fb3f17cb2d8c661aab9cee9d7",
|
||||
"licenses/dependencies/self_cell-1.3.0/LICENSE-APACHE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4",
|
||||
"licenses/dependencies/self_cell-1.3.0/LICENSE-GPLv2": "f9c375a1be4a41f7b70301dd83c91cb89e41567478859b77eef375a52d782505",
|
||||
"licenses/dependencies/serde_core-1.0.229/LICENSE-APACHE": "62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a",
|
||||
"licenses/dependencies/serde_core-1.0.229/LICENSE-MIT": "23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3",
|
||||
"licenses/dependencies/serde_derive-1.0.229/LICENSE-APACHE": "62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a",
|
||||
"licenses/dependencies/serde_derive-1.0.229/LICENSE-MIT": "23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3",
|
||||
"licenses/dependencies/serde_json-1.0.151/LICENSE-APACHE": "62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a",
|
||||
"licenses/dependencies/serde_json-1.0.151/LICENSE-MIT": "23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3",
|
||||
"licenses/dependencies/serde_path_to_error-0.1.20/LICENSE-APACHE": "62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a",
|
||||
"licenses/dependencies/serde_path_to_error-0.1.20/LICENSE-MIT": "23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3",
|
||||
"licenses/dependencies/serde_urlencoded-0.7.1/LICENSE-APACHE": "62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a",
|
||||
"licenses/dependencies/serde_urlencoded-0.7.1/LICENSE-MIT": "b9eb266294324f672cbe945fe8f2e32f85024f0d61a1a7d14382cdde0ac44769",
|
||||
"licenses/dependencies/serde-1.0.229/LICENSE-APACHE": "62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a",
|
||||
"licenses/dependencies/serde-1.0.229/LICENSE-MIT": "23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3",
|
||||
"licenses/dependencies/sha1_smol-1.0.1/LICENSE": "282a21b0710441c364025461a447362daf18f5798a7b72ae2f801a2aa536da51",
|
||||
"licenses/dependencies/shlex-2.0.1/LICENSE-APACHE": "553fffcd9b1cb158bc3e9edc35da85ca5c3b3d7d2e61c883ebcfa8a65814b583",
|
||||
"licenses/dependencies/shlex-2.0.1/LICENSE-MIT": "4455bf75a91154108304cb283e0fea9948c14f13e20d60887cf2552449dea3b1",
|
||||
"licenses/dependencies/skrifa-0.37.0/LICENSE-APACHE": "a14f7d685a79c0f4fb64aee305527a6d5fa55f2401f4e6d688d7b1301868e6c0",
|
||||
"licenses/dependencies/skrifa-0.37.0/LICENSE-MIT": "8a62fa27ffdccc3df19dce90f8bb3d572e27aecffc1a383d0c2601834dcec434",
|
||||
"licenses/dependencies/skrifa-0.44.0/LICENSE-APACHE": "eba684204073ed715c4abb48129acdfd2bff8ae48339e6a7da3b341d3027b7f0",
|
||||
"licenses/dependencies/skrifa-0.44.0/LICENSE-MIT": "7b4c9a3946dfcea7967582760e963e27799e225dcf20565c8ef55324bb017427",
|
||||
"licenses/dependencies/slab-0.4.12/LICENSE": "8ce0830173fdac609dfb4ea603fdc002c2f4af0dc9b1a005653f5da9cf534b18",
|
||||
"licenses/dependencies/slotmap-1.1.1/LICENSE": "6cec81441b2ab2b5090954c1fb5d0bcca81b86487b5849061fa8952d20ef67d4",
|
||||
"licenses/dependencies/smallvec-1.16.0/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/smallvec-1.16.0/LICENSE-MIT": "0b28172679e0009b655da42797c03fd163a3379d5cfa67ba1f1655e974a2a1a9",
|
||||
"licenses/dependencies/smol_str-0.2.2/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/smol_str-0.2.2/LICENSE-MIT": "23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3",
|
||||
"licenses/dependencies/socket2-0.6.5/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/socket2-0.6.5/LICENSE-MIT": "378f5840b258e2779c39418f3f2d7b2ba96f1c7917dd6be0713f88305dbda397",
|
||||
"licenses/dependencies/softbuffer-0.4.8/LICENSE-APACHE": "a4445427440043e8ce6fadf7a43fb906cb0d7f6c573a560a9f142cf9f9bf8ff4",
|
||||
"licenses/dependencies/softbuffer-0.4.8/LICENSE-MIT": "0463bfa47d6d763d8c824333efb0e6d6df3946c13c3b077c78ed9f23ca50d0f2",
|
||||
"licenses/dependencies/spirv-0.3.0+sdk-1.3.268.0/supplement/gfx-rs-rspirv-e91a5debc10c-LICENSE": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30",
|
||||
"licenses/dependencies/stable_deref_trait-1.2.1/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/stable_deref_trait-1.2.1/LICENSE-MIT": "5e05b024f653a5ce199e77cbbbd42fb5553562ec714b819421ed0c3e552a75d7",
|
||||
"licenses/dependencies/static_assertions-1.1.0/LICENSE-APACHE": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30",
|
||||
"licenses/dependencies/static_assertions-1.1.0/LICENSE-MIT": "ea084a2373ebc1f0902c09266e7bf25a05ab3814c1805bb017ffa7308f90c061",
|
||||
"licenses/dependencies/strict-num-0.1.1/LICENSE": "3085885678bb161f6c472bbd331f66a2550b555eb76128f7f8247779128199c0",
|
||||
"licenses/dependencies/subtle-2.6.1/LICENSE": "d1fc1bc0d155df60b2e7705b6b2ae02a05c96f948e1cec6e2fb86360b09f346b",
|
||||
"licenses/dependencies/svg_fmt-0.4.5/supplement/nical-rust_debug-93f414cd572b-LICENSE": "7e98bed7f100747aaae7d82ab94fbe6b76fd6b84b09a3aaa413bff8196d0fbb1",
|
||||
"licenses/dependencies/swash-0.2.10/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/swash-0.2.10/LICENSE-MIT": "122dadfc2eb4de0f4bafcd9eb4e7502cfe338a7965ebd1d18708cc5050f43f76",
|
||||
"licenses/dependencies/syn-2.0.119/LICENSE-APACHE": "62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a",
|
||||
"licenses/dependencies/syn-2.0.119/LICENSE-MIT": "23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3",
|
||||
"licenses/dependencies/syn-3.0.5/LICENSE-APACHE": "62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a",
|
||||
"licenses/dependencies/syn-3.0.5/LICENSE-MIT": "23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3",
|
||||
"licenses/dependencies/sync_wrapper-1.0.2/LICENSE": "0d542e0c8804e39aa7f37eb00da5a762149dc682d7829451287e11b938e94594",
|
||||
"licenses/dependencies/synstructure-0.13.2/LICENSE": "219920e865eee70b7dcfc948a86b099e7f4fe2de01bcca2ca9a20c0a033f2b59",
|
||||
"licenses/dependencies/sys-locale-0.3.2/LICENSE-APACHE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4",
|
||||
"licenses/dependencies/sys-locale-0.3.2/LICENSE-MIT": "5cc390ab5e5e6507f467368cbab1297552d64bfd863f4b496c7928508bcfefd8",
|
||||
"licenses/dependencies/tempfile-3.27.0/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/tempfile-3.27.0/LICENSE-MIT": "8b427f5bc501764575e52ba4f9d95673cf8f6d80a86d0d06599852e1a9a20a36",
|
||||
"licenses/dependencies/termcolor-1.4.1/COPYING": "01c266bced4a434da0051174d6bee16a4c82cf634e2679b6155d40d75012390f",
|
||||
"licenses/dependencies/termcolor-1.4.1/LICENSE-MIT": "0f96a83840e146e43c0ec96a22ec1f392e0680e6c1226e6f3ba87e0740af850f",
|
||||
"licenses/dependencies/termcolor-1.4.1/UNLICENSE": "7e12e5df4bae12cb21581ba157ced20e1986a0508dd10d0e8a4ab9a4cf94e85c",
|
||||
"licenses/dependencies/thiserror-1.0.69/LICENSE-APACHE": "62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a",
|
||||
"licenses/dependencies/thiserror-1.0.69/LICENSE-MIT": "23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3",
|
||||
"licenses/dependencies/thiserror-2.0.20/LICENSE-APACHE": "62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a",
|
||||
"licenses/dependencies/thiserror-2.0.20/LICENSE-MIT": "23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3",
|
||||
"licenses/dependencies/thiserror-impl-1.0.69/LICENSE-APACHE": "62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a",
|
||||
"licenses/dependencies/thiserror-impl-1.0.69/LICENSE-MIT": "23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3",
|
||||
"licenses/dependencies/thiserror-impl-2.0.20/LICENSE-APACHE": "62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a",
|
||||
"licenses/dependencies/thiserror-impl-2.0.20/LICENSE-MIT": "23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3",
|
||||
"licenses/dependencies/tiny-skia-0.11.4/LICENSE": "6d41e05f1d54fe726997cb0334ec539f1dff50600b1d5d90462ec2b392770ced",
|
||||
"licenses/dependencies/tiny-skia-path-0.11.4/LICENSE": "6d41e05f1d54fe726997cb0334ec539f1dff50600b1d5d90462ec2b392770ced",
|
||||
"licenses/dependencies/tinystr-0.8.4/LICENSE": "f367c1b8e1aa262435251e442901da4607b4650e0e63a026f5044473ecfb90f2",
|
||||
"licenses/dependencies/tinyvec_macros-0.1.1/LICENSE-APACHE.md": "4f44572785f35152c1fd2eadf565b7e079c0f300b4324f0af653419f9d76b735",
|
||||
"licenses/dependencies/tinyvec_macros-0.1.1/LICENSE-MIT.md": "1dd8eca0f83669e75fa119e34fb9e1be9d16e3e9b6368962b8019db6e8ae5f7b",
|
||||
"licenses/dependencies/tinyvec_macros-0.1.1/LICENSE-ZLIB.md": "41ace205715d9f19a3214218cc1c01d57c533e02cd0fef7c8e51a49a7fce5ac5",
|
||||
"licenses/dependencies/tinyvec-1.13.2/LICENSE-APACHE.md": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30",
|
||||
"licenses/dependencies/tinyvec-1.13.2/LICENSE-MIT.md": "fd80a26fbb3f644af1fa994134446702932968519797227e07a1368dea80f0bc",
|
||||
"licenses/dependencies/tinyvec-1.13.2/LICENSE-ZLIB.md": "84b34dd7608f7fb9b17bd588a6bf392bf7de504e2716f024a77d89f1b145a151",
|
||||
"licenses/dependencies/tokio-1.53.1/LICENSE": "253cd04c6714889df2d32f3f64d669179a1c95c76ac43c40882c52eb06bc3552",
|
||||
"licenses/dependencies/tokio-macros-2.7.2/LICENSE": "0b83dc40cba89b9922bb84b0a9c7d2768ce37c1d7e138b7424fd4549915778c9",
|
||||
"licenses/dependencies/tokio-rustls-0.26.5/LICENSE-APACHE": "cc117d90b498b32b11a886f279b359da16a73c3b01efbb2f5cc004b20262334e",
|
||||
"licenses/dependencies/tokio-rustls-0.26.5/LICENSE-MIT": "e20fa2b8e0a2565f24a792b94b4bf4b6c2b9d36f781d8a9516e218a036e6677a",
|
||||
"licenses/dependencies/tower-0.5.3/LICENSE": "4249c8e6c5ebb85f97c77e6457c6fafc1066406eb8f1ef61e796fbdc5ff18482",
|
||||
"licenses/dependencies/tower-http-0.6.11/LICENSE": "5049cf464977eff4b4fcfa7988d84e74116956a3eb9d5f1d451b3f828f945233",
|
||||
"licenses/dependencies/tower-layer-0.3.3/LICENSE": "4249c8e6c5ebb85f97c77e6457c6fafc1066406eb8f1ef61e796fbdc5ff18482",
|
||||
"licenses/dependencies/tower-service-0.3.3/LICENSE": "4249c8e6c5ebb85f97c77e6457c6fafc1066406eb8f1ef61e796fbdc5ff18482",
|
||||
"licenses/dependencies/tracing-0.1.44/LICENSE": "898b1ae9821e98daf8964c8d6c7f61641f5f5aa78ad500020771c0939ee0dea1",
|
||||
"licenses/dependencies/tracing-attributes-0.1.31/LICENSE": "898b1ae9821e98daf8964c8d6c7f61641f5f5aa78ad500020771c0939ee0dea1",
|
||||
"licenses/dependencies/tracing-core-0.1.36/LICENSE": "898b1ae9821e98daf8964c8d6c7f61641f5f5aa78ad500020771c0939ee0dea1",
|
||||
"licenses/dependencies/tracing-core-0.1.36/src/spin/LICENSE": "58545fed1565e42d687aecec6897d35c6d37ccb71479a137c0deb2203e125c79",
|
||||
"licenses/dependencies/try-lock-0.2.5/LICENSE": "c816a0749cdc6bf062a5111c159723de51b2bfac66a1dac2655abd9e6b1583eb",
|
||||
"licenses/dependencies/ttf-parser-0.25.1/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/ttf-parser-0.25.1/LICENSE-MIT": "f3c9fe731c701ed77fd5fbaac573872af04dc5869385eb9bd5e3c73c42713814",
|
||||
"licenses/dependencies/ttf-parser-0.25.1/tests/fonts/colr_1_LICENSE": "58d1e17ffe5109a7ae296caafcadfdbe6a7d176f0bc4ab01e12a689b0499d8bd",
|
||||
"licenses/dependencies/unicode-bidi-0.3.18/COPYRIGHT": "edb20b474f6cbd4f4db066b54a9e0f687d0009d309412a63431189b59b8e2a07",
|
||||
"licenses/dependencies/unicode-bidi-0.3.18/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/unicode-bidi-0.3.18/LICENSE-MIT": "7b63ecd5f1902af1b63729947373683c32745c16a10e8e6292e2e2dcd7e90ae0",
|
||||
"licenses/dependencies/unicode-ident-1.0.24/LICENSE-APACHE": "62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a",
|
||||
"licenses/dependencies/unicode-ident-1.0.24/LICENSE-MIT": "23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3",
|
||||
"licenses/dependencies/unicode-ident-1.0.24/LICENSE-UNICODE": "f7db81051789b729fea528a63ec4c938fdcb93d9d61d97dc8cc2e9df6d47f2a1",
|
||||
"licenses/dependencies/unicode-linebreak-0.1.5/LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4",
|
||||
"licenses/dependencies/unicode-script-0.5.8/LICENSE-APACHE": "7cbb56d1b5d83d735056b363ab20958524120afafc4ad8206e6be98cdec5d737",
|
||||
"licenses/dependencies/unicode-script-0.5.8/LICENSE-MIT": "7ad3ea8ca3caf894db98c3f31d5d4949173ffa93c883ef19a9e529ad48960f8c",
|
||||
"licenses/dependencies/unicode-segmentation-1.13.3/COPYRIGHT": "23860c2a7b5d96b21569afedf033469bab9fe14a1b24a35068b8641c578ce24d",
|
||||
"licenses/dependencies/unicode-segmentation-1.13.3/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/unicode-segmentation-1.13.3/LICENSE-MIT": "7b63ecd5f1902af1b63729947373683c32745c16a10e8e6292e2e2dcd7e90ae0",
|
||||
"licenses/dependencies/unicode-width-0.2.2/COPYRIGHT": "23860c2a7b5d96b21569afedf033469bab9fe14a1b24a35068b8641c578ce24d",
|
||||
"licenses/dependencies/unicode-width-0.2.2/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/unicode-width-0.2.2/LICENSE-MIT": "7b63ecd5f1902af1b63729947373683c32745c16a10e8e6292e2e2dcd7e90ae0",
|
||||
"licenses/dependencies/untrusted-0.9.0/LICENSE.txt": "7abd9b6960dcf7d4d0a48606a5b71bfe37d472db68d70637f3a58a56785f1621",
|
||||
"licenses/dependencies/url-2.5.8/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/url-2.5.8/LICENSE-MIT": "b38f11f6096706e6de553dabe2a7ed142d59b6fa8c97e290c67496154745cdd5",
|
||||
"licenses/dependencies/utf8_iter-1.0.4/COPYRIGHT": "c30152c94a6d75e021adbc52b3a52470366a46edb917e17deae3259251af244c",
|
||||
"licenses/dependencies/utf8_iter-1.0.4/LICENSE-APACHE": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30",
|
||||
"licenses/dependencies/utf8_iter-1.0.4/LICENSE-MIT": "3fa4ca83dcc9237839b1bdeb2e6d16bdfb5ec0c5ce42b24694d8bbf0dcbef72c",
|
||||
"licenses/dependencies/uuid-1.26.0/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/uuid-1.26.0/LICENSE-MIT": "436bc5a105d8e57dcd8778730f3754f7bf39c14d2f530e4cde4bd2d17a83ec3d",
|
||||
"licenses/dependencies/version_check-0.9.5/LICENSE-APACHE": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2",
|
||||
"licenses/dependencies/version_check-0.9.5/LICENSE-MIT": "b7e650f3fce5c53249d1cdc608b54df156a97edd636cf9d23498d0cfe7aec63e",
|
||||
"licenses/dependencies/want-0.3.1/LICENSE": "a65f5d0a945d267751344c95665945b90c030ea107faf5c85d518929886187da",
|
||||
"licenses/dependencies/web-time-1.1.0/LICENSE-APACHE": "54a744942eb3fa63a74d8d359989ed6962c04f3f10ff20cfa08ff8aa7efbe4e6",
|
||||
"licenses/dependencies/web-time-1.1.0/LICENSE-MIT": "f428305bbf2e70fbd807af0f3c7ac1b7acfb95311640f451e9d2e48db6d7e96b",
|
||||
"licenses/dependencies/webpki-roots-1.0.9/LICENSE": "e271993808fec50ab29350b39539cdec611a9103f827e0aa26d61da70e2d33f8",
|
||||
"licenses/dependencies/wgpu-27.0.1/LICENSE.APACHE": "a6cba85bc92e0cff7a450b1d873c0eaa2e9fc96bf472df0247a26bec77bf3ff9",
|
||||
"licenses/dependencies/wgpu-27.0.1/LICENSE.MIT": "dc0d97139e8205818c703741c7be7cb3b96888bd5917b8d6fc6133731e403c21",
|
||||
"licenses/dependencies/wgpu-core-27.0.3/LICENSE.APACHE": "a6cba85bc92e0cff7a450b1d873c0eaa2e9fc96bf472df0247a26bec77bf3ff9",
|
||||
"licenses/dependencies/wgpu-core-27.0.3/LICENSE.MIT": "dc0d97139e8205818c703741c7be7cb3b96888bd5917b8d6fc6133731e403c21",
|
||||
"licenses/dependencies/wgpu-core-deps-windows-linux-android-27.0.0/LICENSE.APACHE": "a6cba85bc92e0cff7a450b1d873c0eaa2e9fc96bf472df0247a26bec77bf3ff9",
|
||||
"licenses/dependencies/wgpu-core-deps-windows-linux-android-27.0.0/LICENSE.MIT": "dc0d97139e8205818c703741c7be7cb3b96888bd5917b8d6fc6133731e403c21",
|
||||
"licenses/dependencies/wgpu-hal-27.0.4/LICENSE.APACHE": "a6cba85bc92e0cff7a450b1d873c0eaa2e9fc96bf472df0247a26bec77bf3ff9",
|
||||
"licenses/dependencies/wgpu-hal-27.0.4/LICENSE.MIT": "dc0d97139e8205818c703741c7be7cb3b96888bd5917b8d6fc6133731e403c21",
|
||||
"licenses/dependencies/wgpu-types-27.0.1/LICENSE.APACHE": "a6cba85bc92e0cff7a450b1d873c0eaa2e9fc96bf472df0247a26bec77bf3ff9",
|
||||
"licenses/dependencies/wgpu-types-27.0.1/LICENSE.MIT": "dc0d97139e8205818c703741c7be7cb3b96888bd5917b8d6fc6133731e403c21",
|
||||
"licenses/dependencies/winapi-util-0.1.11/COPYING": "01c266bced4a434da0051174d6bee16a4c82cf634e2679b6155d40d75012390f",
|
||||
"licenses/dependencies/winapi-util-0.1.11/LICENSE-MIT": "cb3c929a05e6cbc9de9ab06a4c57eeb60ca8c724bef6c138c87d3a577e27aa14",
|
||||
"licenses/dependencies/winapi-util-0.1.11/UNLICENSE": "7e12e5df4bae12cb21581ba157ced20e1986a0508dd10d0e8a4ab9a4cf94e85c",
|
||||
"licenses/dependencies/window_clipboard-0.5.1/LICENSE": "7faec985f3e9b1c4a1df646bfedc304ba67e409447f7ab7f4f591f68708d85dc",
|
||||
"licenses/dependencies/windows_x86_64_gnullvm-0.52.6/license-apache-2.0": "c16f8dcf1a368b83be78d826ea23de4079fe1b4469a0ab9ee20563f37ff3d44b",
|
||||
"licenses/dependencies/windows_x86_64_gnullvm-0.52.6/license-mit": "c2cfccb812fe482101a8f04597dfc5a9991a6b2748266c47ac91b6a5aae15383",
|
||||
"licenses/dependencies/windows-0.58.0/license-apache-2.0": "c16f8dcf1a368b83be78d826ea23de4079fe1b4469a0ab9ee20563f37ff3d44b",
|
||||
"licenses/dependencies/windows-0.58.0/license-mit": "c2cfccb812fe482101a8f04597dfc5a9991a6b2748266c47ac91b6a5aae15383",
|
||||
"licenses/dependencies/windows-core-0.58.0/license-apache-2.0": "c16f8dcf1a368b83be78d826ea23de4079fe1b4469a0ab9ee20563f37ff3d44b",
|
||||
"licenses/dependencies/windows-core-0.58.0/license-mit": "c2cfccb812fe482101a8f04597dfc5a9991a6b2748266c47ac91b6a5aae15383",
|
||||
"licenses/dependencies/windows-implement-0.58.0/license-apache-2.0": "c16f8dcf1a368b83be78d826ea23de4079fe1b4469a0ab9ee20563f37ff3d44b",
|
||||
"licenses/dependencies/windows-implement-0.58.0/license-mit": "c2cfccb812fe482101a8f04597dfc5a9991a6b2748266c47ac91b6a5aae15383",
|
||||
"licenses/dependencies/windows-interface-0.58.0/license-apache-2.0": "c16f8dcf1a368b83be78d826ea23de4079fe1b4469a0ab9ee20563f37ff3d44b",
|
||||
"licenses/dependencies/windows-interface-0.58.0/license-mit": "c2cfccb812fe482101a8f04597dfc5a9991a6b2748266c47ac91b6a5aae15383",
|
||||
"licenses/dependencies/windows-link-0.2.1/license-apache-2.0": "c16f8dcf1a368b83be78d826ea23de4079fe1b4469a0ab9ee20563f37ff3d44b",
|
||||
"licenses/dependencies/windows-link-0.2.1/license-mit": "c2cfccb812fe482101a8f04597dfc5a9991a6b2748266c47ac91b6a5aae15383",
|
||||
"licenses/dependencies/windows-result-0.2.0/license-apache-2.0": "c16f8dcf1a368b83be78d826ea23de4079fe1b4469a0ab9ee20563f37ff3d44b",
|
||||
"licenses/dependencies/windows-result-0.2.0/license-mit": "c2cfccb812fe482101a8f04597dfc5a9991a6b2748266c47ac91b6a5aae15383",
|
||||
"licenses/dependencies/windows-strings-0.1.0/license-apache-2.0": "c16f8dcf1a368b83be78d826ea23de4079fe1b4469a0ab9ee20563f37ff3d44b",
|
||||
"licenses/dependencies/windows-strings-0.1.0/license-mit": "c2cfccb812fe482101a8f04597dfc5a9991a6b2748266c47ac91b6a5aae15383",
|
||||
"licenses/dependencies/windows-sys-0.52.0/license-apache-2.0": "c16f8dcf1a368b83be78d826ea23de4079fe1b4469a0ab9ee20563f37ff3d44b",
|
||||
"licenses/dependencies/windows-sys-0.52.0/license-mit": "c2cfccb812fe482101a8f04597dfc5a9991a6b2748266c47ac91b6a5aae15383",
|
||||
"licenses/dependencies/windows-sys-0.59.0/license-apache-2.0": "c16f8dcf1a368b83be78d826ea23de4079fe1b4469a0ab9ee20563f37ff3d44b",
|
||||
"licenses/dependencies/windows-sys-0.59.0/license-mit": "c2cfccb812fe482101a8f04597dfc5a9991a6b2748266c47ac91b6a5aae15383",
|
||||
"licenses/dependencies/windows-sys-0.61.2/license-apache-2.0": "c16f8dcf1a368b83be78d826ea23de4079fe1b4469a0ab9ee20563f37ff3d44b",
|
||||
"licenses/dependencies/windows-sys-0.61.2/license-mit": "c2cfccb812fe482101a8f04597dfc5a9991a6b2748266c47ac91b6a5aae15383",
|
||||
"licenses/dependencies/windows-targets-0.52.6/license-apache-2.0": "c16f8dcf1a368b83be78d826ea23de4079fe1b4469a0ab9ee20563f37ff3d44b",
|
||||
"licenses/dependencies/windows-targets-0.52.6/license-mit": "c2cfccb812fe482101a8f04597dfc5a9991a6b2748266c47ac91b6a5aae15383",
|
||||
"licenses/dependencies/winit-0.30.13/LICENSE": "6dc0e068dcf3a5bc8e054205b85b7720e1d49265bbc64bf515d2cf79197df69a",
|
||||
"licenses/dependencies/writeable-0.6.4/LICENSE": "f367c1b8e1aa262435251e442901da4607b4650e0e63a026f5044473ecfb90f2",
|
||||
"licenses/dependencies/xml-rs-0.8.29/LICENSE": "0dc18d924dc0a5f41172a393012843a5eaaef338e795b3645da9cc3b6068220b",
|
||||
"licenses/dependencies/yazi-0.2.1/LICENSE-APACHE": "7cfd738c53d61c79f07e348f622bf7707c9084237054d37fbe07788a75f5881c",
|
||||
"licenses/dependencies/yazi-0.2.1/LICENSE-MIT": "df62e3ef3f207c91073fedd78b4156a278681d0dd3f942379242c62c6a71a3ec",
|
||||
"licenses/dependencies/yoke-0.8.3/LICENSE": "f367c1b8e1aa262435251e442901da4607b4650e0e63a026f5044473ecfb90f2",
|
||||
"licenses/dependencies/yoke-derive-0.8.2/LICENSE": "f367c1b8e1aa262435251e442901da4607b4650e0e63a026f5044473ecfb90f2",
|
||||
"licenses/dependencies/zeno-0.3.3/LICENSE-APACHE": "7cfd738c53d61c79f07e348f622bf7707c9084237054d37fbe07788a75f5881c",
|
||||
"licenses/dependencies/zeno-0.3.3/LICENSE-MIT": "34dff8202d63e6df022f4f0ce88dab24f254c35ee0d5958b74dcf74d9eae21cc",
|
||||
"licenses/dependencies/zerocopy-0.8.56/LICENSE-APACHE": "9d185ac6703c4b0453974c0d85e9eee43e6941009296bb1f5eb0b54e2329e9f3",
|
||||
"licenses/dependencies/zerocopy-0.8.56/LICENSE-BSD": "83c1763356e822adde0a2cae748d938a73fdc263849ccff6b27776dff213bd32",
|
||||
"licenses/dependencies/zerocopy-0.8.56/LICENSE-MIT": "1a2f5c12ddc934d58956aa5dbdd3255fe55fd957633ab7d0d39e4f0daa73f7df",
|
||||
"licenses/dependencies/zerocopy-derive-0.8.56/LICENSE-APACHE": "9d185ac6703c4b0453974c0d85e9eee43e6941009296bb1f5eb0b54e2329e9f3",
|
||||
"licenses/dependencies/zerocopy-derive-0.8.56/LICENSE-BSD": "83c1763356e822adde0a2cae748d938a73fdc263849ccff6b27776dff213bd32",
|
||||
"licenses/dependencies/zerocopy-derive-0.8.56/LICENSE-MIT": "1a2f5c12ddc934d58956aa5dbdd3255fe55fd957633ab7d0d39e4f0daa73f7df",
|
||||
"licenses/dependencies/zerofrom-0.1.8/LICENSE": "f367c1b8e1aa262435251e442901da4607b4650e0e63a026f5044473ecfb90f2",
|
||||
"licenses/dependencies/zerofrom-derive-0.1.7/LICENSE": "f367c1b8e1aa262435251e442901da4607b4650e0e63a026f5044473ecfb90f2",
|
||||
"licenses/dependencies/zeroize-1.9.0/LICENSE-APACHE": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30",
|
||||
"licenses/dependencies/zeroize-1.9.0/LICENSE-MIT": "8c7516d4b27b1e495be5e38b612298b63de48d05f49cdac94f70f3cd70f8864b",
|
||||
"licenses/dependencies/zerotrie-0.2.5/LICENSE": "f367c1b8e1aa262435251e442901da4607b4650e0e63a026f5044473ecfb90f2",
|
||||
"licenses/dependencies/zerovec-0.11.8/LICENSE": "f367c1b8e1aa262435251e442901da4607b4650e0e63a026f5044473ecfb90f2",
|
||||
"licenses/dependencies/zerovec-derive-0.11.6/LICENSE": "f367c1b8e1aa262435251e442901da4607b4650e0e63a026f5044473ecfb90f2",
|
||||
"licenses/dependencies/zmij-1.0.23/LICENSE-MIT": "23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3",
|
||||
"licenses/llvm-libunwind/llvm-ea7d852a70e8-libunwind-LICENSE.TXT": "b5efebcaca80879234098e52d1725e6d9eb8fb96a19fce625d39184b705f7b6d",
|
||||
"licenses/llvm-mingw-LICENSE.TXT": "8d85c1057d742e597985c7d4e6320b015a9139385cff4cbae06ffc0ebe89afee",
|
||||
"licenses/rust/COPYING.RUNTIME": "28e85c5aa4af9b4f1dfe6b4817aa3eefb3eaaee7fd735045016f29ccf50276a1",
|
||||
"licenses/rust/COPYING3": "8ceb4b9ee5adedde47b31e975c1d90c73ad27b6b165a1dcd80c7c545eb65b903",
|
||||
"licenses/rust/COPYRIGHT-library.html": "68129500b616d5838629e68f55ff3aed5e096dacf60ce9eb41bbe599a563afa6",
|
||||
"licenses/rust/COPYRIGHT.html": "5b0c93fc4e6d4b072eaa521b1762d1e746f4c368f65e81a0e5308e2772dac85e",
|
||||
"package.json": "36bcff8a760c08674f3fc017bb5affc8a5f4f39174ac9d5a29298f2423155832",
|
||||
"README.md": "597cfb8da873e019d2658420f18ec059f0185fa9106ff9eafe934dfdd6ed266b",
|
||||
"START-HERE.txt": "a549295cf57ac73673dc4fa6106463450f982122793cb9c7135ce4fc7087e9ed",
|
||||
"THIRD-PARTY-NOTICES.txt": "32bbbd437f15b67690c6704fc14e2f12ae0fd463aa2eb5e4c99c1d61857f87fb",
|
||||
"SHA256SUMS.txt": "37a2802abb67369f014270a7814e75dd00b26c1bb9c3ee37decf5eb3bacf695b"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,258 @@
|
||||
{
|
||||
".gitattributes": {
|
||||
"bytes": 58,
|
||||
"sha256": "e0522421a30ef830cab55b95e12f2d7307c1a01979e6972429543e176adb7f78"
|
||||
},
|
||||
"commands.json": {
|
||||
"bytes": 998,
|
||||
"sha256": "7af5852fe275eaa1dafb2ab5d7e7e1553a63941fa56bb5046f99d24ede0624f0"
|
||||
},
|
||||
"donor/build-evidence.json": {
|
||||
"bytes": 3570,
|
||||
"sha256": "3b278a3401b9a4c2de0538d70f603c3c039b308d5d2952ebed792efcac3e08e5"
|
||||
},
|
||||
"donor/extraction-check.json": {
|
||||
"bytes": 73193,
|
||||
"sha256": "2de063bcee74e2ffd7e70dbba717f4615932a2f0f3024a90e87406f17ab12244"
|
||||
},
|
||||
"final-review.md": {
|
||||
"bytes": 5438,
|
||||
"sha256": "0951515ff902b943310165aa9400b068517fecfb64fb7d56344cce86e905f4c6"
|
||||
},
|
||||
"first-candidate/first-candidate-hashes.json": {
|
||||
"bytes": 342,
|
||||
"sha256": "52b8428366bdcb8d1f0e7cdebd5382be2821e65e278edc866fb3b36194259edd"
|
||||
},
|
||||
"first-candidate/first-candidate.diff": {
|
||||
"bytes": 8967,
|
||||
"sha256": "0da7bdc13b1d355df669083e1b66ae995b6ff49a023a042c688b363d4f7ba5c1"
|
||||
},
|
||||
"first-candidate/save-diagnostics-first-failed.log": {
|
||||
"bytes": 864,
|
||||
"sha256": "b19127590c07949232db015b09aa965d77c93a1d0a0d1d496fb05373f2686a82"
|
||||
},
|
||||
"gates/save-diagnostics-build.log": {
|
||||
"bytes": 309,
|
||||
"sha256": "79a2c5e8f565f27296521fde2ef3a037a5110d1bd134b4661115769e8f1d97fd"
|
||||
},
|
||||
"gates/save-diagnostics-clippy.log": {
|
||||
"bytes": 379,
|
||||
"sha256": "4c55b51c4a2dc7a0de14ce5f312267e0b22f9a65615d0c378f1809330eea579f"
|
||||
},
|
||||
"gates/save-diagnostics-corrected-tests.log": {
|
||||
"bytes": 3561,
|
||||
"sha256": "9079652120e18a7176feb8e5f4ac289cbf0c27f979a0c042fef5d8b4e2e252d4"
|
||||
},
|
||||
"native/00-open-a.png": {
|
||||
"bytes": 141556,
|
||||
"sha256": "1ecf39797afc01f5d890fbde2aaac15f6743a058ab19eecdd50370ae59165b3a"
|
||||
},
|
||||
"native/01-declared-name-applied.png": {
|
||||
"bytes": 139514,
|
||||
"sha256": "03b762aa7899b25b3c31abe89003571fdce6bb6c7f8e7c28f104d0e920a38b8b"
|
||||
},
|
||||
"native/02-collision-destination.png": {
|
||||
"bytes": 65913,
|
||||
"sha256": "3317e5c57382be7e86e44d0e0a3c08d7ecb6da7829efb28460df2768bd8772d2"
|
||||
},
|
||||
"native/03-collision-refused-normal.png": {
|
||||
"bytes": 144122,
|
||||
"sha256": "29218985a910ccf1eef552b54fc28211ef1a8709b430944342f591a2ac139fc5"
|
||||
},
|
||||
"native/04-collision-full-tooltip-normal.png": {
|
||||
"bytes": 151084,
|
||||
"sha256": "3c2f517af129001bac514b4572ce66c9a0b5665da465ce0d54fba87629108a47"
|
||||
},
|
||||
"native/05-collision-refused-minimum.png": {
|
||||
"bytes": 108588,
|
||||
"sha256": "b4ca92b2471aadcf71db678132a8254fec786188c3617fa743263f0d9e0ad3af"
|
||||
},
|
||||
"native/06-collision-full-tooltip-minimum.png": {
|
||||
"bytes": 115599,
|
||||
"sha256": "0e66422255a607cd2f4d5156b3e068c4ed4421bed361e399a69f70ae06a88e24"
|
||||
},
|
||||
"native/07-save-all-recovery.png": {
|
||||
"bytes": 103850,
|
||||
"sha256": "364ce26b28944cc3aeafdf878e3657b5e91062138126ce9b3cf69d0ace1c5105"
|
||||
},
|
||||
"native/08-fresh-destination.png": {
|
||||
"bytes": 65541,
|
||||
"sha256": "5fb9cc43e7b83f4127430089c7344c0106396a36e6953f5b9b8133eb3d9f836b"
|
||||
},
|
||||
"native/09-fresh-save-success.png": {
|
||||
"bytes": 104194,
|
||||
"sha256": "b88454e8dbb783f71104ba8844e7a2982c72a50d9ae0d56db6d3a2e7e9665a8e"
|
||||
},
|
||||
"native/10-open-b-path.png": {
|
||||
"bytes": 72279,
|
||||
"sha256": "e032bc44821b413bdf8aac9fa09ab5b1941667d969b7bb13263439e29129596b"
|
||||
},
|
||||
"native/11-b-loaded-before-injection.png": {
|
||||
"bytes": 110266,
|
||||
"sha256": "4fdc335fcff78e6095838be6ff97a97df4f6060e3415b466454e9af94122dd71"
|
||||
},
|
||||
"native/12-external-change-refused.png": {
|
||||
"bytes": 110687,
|
||||
"sha256": "5b178844aa460b182d9dd1a35cec158756de0f862bf5340fe0cf20392bdb9e3b"
|
||||
},
|
||||
"native/13-external-change-tooltip.png": {
|
||||
"bytes": 113952,
|
||||
"sha256": "c2128a4154458a460eda5dac894e13b6855471aacd606e1064e387f598e3edb9"
|
||||
},
|
||||
"native/14-external-recovery-save.png": {
|
||||
"bytes": 108137,
|
||||
"sha256": "5086cedfedf473b3cb7228c7d70aaeb5914c01aeaa5087b23662d925e4e4b0a1"
|
||||
},
|
||||
"native/15-baseline-name-after-recovery.png": {
|
||||
"bytes": 101855,
|
||||
"sha256": "63cf1d0b9b4b1a93096bab94abe20c2b5e1642489f47bb1f99beb36e404f0a3f"
|
||||
},
|
||||
"native/baseline.json": {
|
||||
"bytes": 7556,
|
||||
"sha256": "5445719d5377b0ccaf7567747a48cdc753be2a30a57d35105ac7f39e6aa3b876"
|
||||
},
|
||||
"native/collision-oracle.json": {
|
||||
"bytes": 6150,
|
||||
"sha256": "9d50e26ca8c7c50801713ef98b072315cbcb0cdaaeba3d57846c423163f58055"
|
||||
},
|
||||
"native/external-before-oracle.json": {
|
||||
"bytes": 6155,
|
||||
"sha256": "b96e896f3e33bbf7c0832ba3365ecf57864b49fbb061dc84e66ffb35916ee313"
|
||||
},
|
||||
"native/external-recovered-oracle.json": {
|
||||
"bytes": 6158,
|
||||
"sha256": "7c02f5a60b28b80534d5806f004ee3ba99b195ce9f03a236fb12e58f3b079ec8"
|
||||
},
|
||||
"native/external-refused-oracle.json": {
|
||||
"bytes": 6156,
|
||||
"sha256": "414e3905c9ded123e01c6c045a1b70667d5a5f0cd9f58591c63a7176c15c5be7"
|
||||
},
|
||||
"native/finished.json": {
|
||||
"bytes": 586,
|
||||
"sha256": "6b4abb3aac7da501968a56eff1b0a728616eff775645ef8ec031b97fcbd6c61f"
|
||||
},
|
||||
"native/inject-oracle.json": {
|
||||
"bytes": 6146,
|
||||
"sha256": "c41c494b880febefbfbedeaf370d4987047c31c1ca09bd7144eb4bb44838f8df"
|
||||
},
|
||||
"native/native-model-oracle/01.request.json": {
|
||||
"bytes": 0,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"native/native-model-oracle/01.response.json": {
|
||||
"bytes": 15,
|
||||
"sha256": "a29ee2b15c494311c52521766e44af56a3ad2248e7a8ab465e5206463c13d288"
|
||||
},
|
||||
"native/native-model-oracle/02.request.json": {
|
||||
"bytes": 73418,
|
||||
"sha256": "b82d1eb074d86d60e44651d17f659af7202fadf65bb961ecb0a57535af876b5a"
|
||||
},
|
||||
"native/native-model-oracle/02.response.json": {
|
||||
"bytes": 245,
|
||||
"sha256": "946ab50936946bc55e05fa11a2f17518c9a5c1603514a2eb7138499912e12d66"
|
||||
},
|
||||
"native/native-model-oracle/03.request.json": {
|
||||
"bytes": 0,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"native/native-model-oracle/03.response.json": {
|
||||
"bytes": 164079,
|
||||
"sha256": "0bc7f1d6871aaedb6a34af6b448e1bac45ef603bb4e7e57c7d0931df5628be36"
|
||||
},
|
||||
"native/native-model-oracle/04.request.json": {
|
||||
"bytes": 73423,
|
||||
"sha256": "2840d6001d648bdd9f7f5fb3878f2bb408b6ea070915289e66db63fbd9fdb4b6"
|
||||
},
|
||||
"native/native-model-oracle/04.response.json": {
|
||||
"bytes": 245,
|
||||
"sha256": "c5c2e7be4ad9c6dd82018be8976f369660bd2c19baa6aa3eb2058eb8776ed53e"
|
||||
},
|
||||
"native/native-model-oracle/05.request.json": {
|
||||
"bytes": 0,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"native/native-model-oracle/05.response.json": {
|
||||
"bytes": 164089,
|
||||
"sha256": "c2a903d0c23191a7a0cd4cde6db066fbfd26d7f33d36ab91fe45ac361d09f43c"
|
||||
},
|
||||
"native/native-model-oracle/result.json": {
|
||||
"bytes": 1124,
|
||||
"sha256": "996e512183cdd8033123fe3c1d5ccb50b8cb0baa14d9ae7294882ce23b855be3"
|
||||
},
|
||||
"native/native-model-oracle/stderr.log": {
|
||||
"bytes": 118,
|
||||
"sha256": "d0a3536063ee4264b79d7952c8a3ba486464760363c16c585246debff4e5de94"
|
||||
},
|
||||
"native/native-model-oracle/stdout.log": {
|
||||
"bytes": 0,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"native/native-model-oracle.py": {
|
||||
"bytes": 3962,
|
||||
"sha256": "a495072ce8cd6d7f49db1bf752b48cece381c96d284836fef709b3810d2a5546"
|
||||
},
|
||||
"native/oracle.py": {
|
||||
"bytes": 2602,
|
||||
"sha256": "a491f2d119f4c2774671bc4ed0547312e9dbdb5c1b205dacb09b1304bc2e6299"
|
||||
},
|
||||
"native/plan.md": {
|
||||
"bytes": 8254,
|
||||
"sha256": "8a6632e31ff0e5f661433e79777c750b394422b9cf00d1932b6627bfd20c3034"
|
||||
},
|
||||
"native/restore-oracle.json": {
|
||||
"bytes": 6147,
|
||||
"sha256": "0c6e6626d9c7b1d2fd330435d6cccde1bafa3c6ea661be893fd57a1933d4ddc9"
|
||||
},
|
||||
"native/review.md": {
|
||||
"bytes": 6530,
|
||||
"sha256": "cea2f317dcbe801dd2c7b8eaf099786b517f8992a69c8e0e8684aa173fc6e91f"
|
||||
},
|
||||
"native/saved-a-oracle.json": {
|
||||
"bytes": 6148,
|
||||
"sha256": "2e3a0106e93f6b9e1b939ccce6d43e97b9ccd3350cd028188cfd58025525a7cc"
|
||||
},
|
||||
"native/saved-c-oracle.json": {
|
||||
"bytes": 6144,
|
||||
"sha256": "42fddd04c65bb25b37795a8a3346074a115674096ca4aae89efe7813f806d9b2"
|
||||
},
|
||||
"native/started.json": {
|
||||
"bytes": 413,
|
||||
"sha256": "7552c4a85e6f075d348c6189e63126211a8327ed70ec426fedc00f9d2c5665e1"
|
||||
},
|
||||
"native/stderr.log": {
|
||||
"bytes": 0,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"native/stdout.log": {
|
||||
"bytes": 0,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"README.md": {
|
||||
"bytes": 3731,
|
||||
"sha256": "718d821732fe229a681a5e0e4cd198d3b0348b002cdb288629dfefe39536b394"
|
||||
},
|
||||
"scripts/launch-native46.py": {
|
||||
"bytes": 1837,
|
||||
"sha256": "daf89061903f22740cb50ae695be7d3c87ebab5571e37b63ea73867debe7121d"
|
||||
},
|
||||
"scripts/prepare-model-oracle46.py": {
|
||||
"bytes": 828,
|
||||
"sha256": "ab5c2aa4d66118f9fb970920c8b17a13ca072e7882d2909a8368bb5f68333dc4"
|
||||
},
|
||||
"scripts/prepare-native46.py": {
|
||||
"bytes": 2279,
|
||||
"sha256": "780ee633711b0f1e3535704065cba8521e8a4f2e4b303438c1db83307a66b0b7"
|
||||
},
|
||||
"scripts/toolchain-env.ps1": {
|
||||
"bytes": 621,
|
||||
"sha256": "d7eb6249bef73adacdb05cebefe7ca478758c3c38de17a1731bf01f8b25dc379"
|
||||
},
|
||||
"source-files.json": {
|
||||
"bytes": 675,
|
||||
"sha256": "75d2e53f3bf17cb32950a824d59c08a6ce069879e50c4415fddf7de5c0f7f8cb"
|
||||
},
|
||||
"verify.py": {
|
||||
"bytes": 4674,
|
||||
"sha256": "e847efede3dfc807a330309bacf807b52f279f1bdbd263bfa93e618564157bcb"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
# Independent final #46 contribution review
|
||||
|
||||
Bounded contribution acceptance for source `0e83157e09d52e6152df91208e41693b62da2d46`: no material correctness blocker found in the protected-destination diagnostic change or reviewed validation evidence. This is not integration, publication, packaged-release, full-suite, Linux or complete OA/SA acceptance. Prototype B native reading/performance remains unrelated and open.
|
||||
|
||||
Read-only source, helpers, logs, native report, phase receipts, actual files and parser-envelope audit. No GUI, compiler, server launch, Gitea action or production edit. This review file is the only new artifact. The original source review was delivered in chat; no earlier source-review file was found under this worktree's .local directory. Its E0308 finding is preserved in the failed log and contribution note.
|
||||
|
||||
## Source and executable identity
|
||||
|
||||
Rechecked the committed diff and corrected helper. `write_snapshot_inner` changes only messages for Conflict from `new_project` and `expect_new_file`; those functions refuse already-existing destinations before writing. `save_project` still performs observed-baseline conflict checks and keeps its external-change message. Non-conflict errors, recovery discovery, disk expectations, no-overwrite checks, save transactions, source relocation/history and API behavior are unchanged. The earlier helper type mismatch is corrected by returning error.message after dispatch and preservation assertions.
|
||||
|
||||
Current native executable SHA256 is `e9cce9355525ecdc59bfae12608b1e0272167acef5a86b25368ef547e08886ff`; runtime is `f45604a12e8bcd839fd86f667c1be1cc7c4f9da2b3c69ff381ac708f0e1ae7d4`. Both actual files match baseline and final receipts. PID 10012 finished with exit 0; actual stdout/stderr files are empty. The report has 16 screenshots, numbered 00 through 15.
|
||||
|
||||
## Gates and native scope
|
||||
|
||||
Corrected test log reports 29 passed, zero failures/ignores, 1,520 filtered out. E0308 from the first candidate remains in save-diagnostics-first-failed.log. Clippy and GUI build logs finish successfully; their invocation scope is parent-reported strict all-target Clippy and the GUI build, since these stdout logs do not reproduce command-line flags. No final full-suite pass is implied.
|
||||
|
||||
The independent native report records same-root/new-entry collision refusal, preserved unsaved name, accurate protected-files wording, full pointer tooltip at normal and minimum sizes, successful existing Save All, successful fresh-folder Save As, clean-document external-change refusal, and success after exact external-byte restoration. The persistent long footer truncates; pointer tooltip is readable. Keyboard-only tooltip access is untested. Clean B's All changes saved header describes lack of local edits, not successful disk save; the conflict footer remains explicit. No new blocking native defect was reported.
|
||||
|
||||
## Independent byte and model reconciliation
|
||||
|
||||
Read oracle.py as code without executing its mutating injection/restoration phases. Independently enumerated all 37 pristine files, checked baseline hashes, and reconstructed only the predeclared literal replacement and valid appended comment. All eight phase receipts match those independently expected full filename/byte-hash sets:
|
||||
|
||||
- collision: all baseline bytes; no collision-copy.arcadia.
|
||||
- saved-a and saved-c: only `Assess pressure alarm` to `Assess pressure alarm QA46` for Activity `61f7bbfb-74a4-5540-9182-2583dfb27a49` in the declared dependency.
|
||||
- external-before, restore and external-recovered: exact pristine bytes.
|
||||
- inject and external-refused: only the declared valid comment added; other 36 files identical.
|
||||
|
||||
Actual final A and C directory contents independently equal the renamed expected bundle; actual final B equals pristine. Each contains exactly 37 files. C contains 30 application-written source files and seven parent-copied companions; no application-managed companion-copy claim is accepted. Intermediate refusal states are supported by retained checkpoint receipts/native sequence, not reconstructed as if still present on disk.
|
||||
|
||||
Independently reconciled the complete native-model-oracle input requests, output source bundles, full model envelopes and actual stored envelopes. Pristine input exactly matches the unchanged packaged example and repository baseline. Saved input exactly matches actual C. Both source_project responses equal their complete 30-file requests. Modifying only the pristine model's declared activity name to QA46 makes it equal to the entire saved model; every other model field remains unchanged. Both persisted server envelopes equal their captured GET responses.
|
||||
|
||||
Actual parser server hash `6cebacc117e46fdab023c6402a5cebd6929fb55993ae8ff6b89cd1c6c1170237` and selected runtime match oracle pins. The server is reused unchanged from the separate package, not claimed rebuilt with #46. Its owned forced termination exits 1 after acknowledged import/read; this is not graceful-shutdown or power-loss evidence.
|
||||
|
||||
## Delivery follow-up
|
||||
|
||||
At review time, the untracked `harness/save-as-diagnostics-20261001.md` still says Clippy, GUI build and native checks are pending. Update that historical checkpoint with these completed, explicitly scoped receipts before using it as the final handoff. This documentation refresh and integration/publication confirmation remain the parent's responsibility; neither is claimed complete here.
|
||||
@@ -0,0 +1,10 @@
|
||||
[
|
||||
{
|
||||
"Path": "C:\\ar-save-01a0d717\\crates\\oa-desktop\\src\\app.rs",
|
||||
"Hash": "4E470C5BA93D85F122B62B48CF27A6FAA4C005ABCAB0D7180E6DB598506E1C83"
|
||||
},
|
||||
{
|
||||
"Path": "C:\\ar-save-01a0d717\\crates\\oa-desktop\\src\\app\\save_as_tests.rs",
|
||||
"Hash": "41D4CF226722241599F223293311A697F3894C6A46587CBCECACC3B563D0A84D"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,201 @@
|
||||
diff --git a/crates/oa-desktop/src/app.rs b/crates/oa-desktop/src/app.rs
|
||||
index 7da73652..f8a0d6a6 100644
|
||||
--- a/crates/oa-desktop/src/app.rs
|
||||
+++ b/crates/oa-desktop/src/app.rs
|
||||
@@ -5605,6 +5605,7 @@ fn write_snapshot_inner(
|
||||
.map_err(|errors| crate::document::DocumentError::Source(errors).to_string())?,
|
||||
);
|
||||
}
|
||||
+ let has_original_destination = previous.is_some();
|
||||
let previous = previous.filter(|disk| {
|
||||
path.parent()
|
||||
.filter(|p| !p.as_os_str().is_empty())
|
||||
@@ -5615,14 +5616,33 @@ fn write_snapshot_inner(
|
||||
== Some(&disk.root)
|
||||
&& entry == disk.bundle.entry
|
||||
});
|
||||
+ // A missing-file expectation colliding with an existing destination is
|
||||
+ // not evidence that an observed dependency changed outside the editor.
|
||||
+ // Keep save_project's conflict reporting unchanged for that latter case.
|
||||
+ let saving_existing = previous.is_some();
|
||||
+ let destination_error = |error: source_files::SourceFileError| match error {
|
||||
+ source_files::SourceFileError::Conflict(paths) => {
|
||||
+ let guidance = if saving_existing {
|
||||
+ "Review the new included file's destination before saving."
|
||||
+ } else if has_original_destination {
|
||||
+ "Choose a fresh directory for Save As, or use Save All to update the open project's current entry."
|
||||
+ } else {
|
||||
+ "Choose a fresh directory for Save As."
|
||||
+ };
|
||||
+ format!(
|
||||
+ "Source destination files already exist: {paths:?}. Existing files are protected. {guidance}"
|
||||
+ )
|
||||
+ }
|
||||
+ other => other.to_string(),
|
||||
+ };
|
||||
let mut disk = match previous {
|
||||
Some(disk) => disk,
|
||||
- None => source_files::new_project(&path, LIMITS).map_err(|e| e.to_string())?,
|
||||
+ None => source_files::new_project(&path, LIMITS).map_err(&destination_error)?,
|
||||
};
|
||||
for path in snapshot.bundle.files.keys() {
|
||||
if !disk.expectations.contains_key(path) {
|
||||
source_files::expect_new_file(&mut disk, path, LIMITS)
|
||||
- .map_err(|e| e.to_string())?;
|
||||
+ .map_err(&destination_error)?;
|
||||
}
|
||||
}
|
||||
Some(source_files::save_project(&disk, &snapshot, LIMITS).map_err(|e| e.to_string())?)
|
||||
diff --git a/crates/oa-desktop/src/app/save_as_tests.rs b/crates/oa-desktop/src/app/save_as_tests.rs
|
||||
index c6ddab7d..75e6a850 100644
|
||||
--- a/crates/oa-desktop/src/app/save_as_tests.rs
|
||||
+++ b/crates/oa-desktop/src/app/save_as_tests.rs
|
||||
@@ -1,5 +1,148 @@
|
||||
use super::*;
|
||||
|
||||
+fn saved_multifile_app(directory: &std::path::Path) -> (App, Id, PathBuf) {
|
||||
+ let mut project = Project::empty();
|
||||
+ let activity = project
|
||||
+ .add_element(Kind::Activity, Layer::Oa, "Assess incident", None)
|
||||
+ .unwrap();
|
||||
+ let mut app = App::with_project(project);
|
||||
+ let path = directory.join("project.arcadia");
|
||||
+ complete_save(&mut app, path.clone());
|
||||
+ assert!(app.document.bundle().files.len() > 1);
|
||||
+ (app, activity, path)
|
||||
+}
|
||||
+
|
||||
+fn rejected_save_preserves_editor(app: &mut App, path: PathBuf) -> String {
|
||||
+ let snapshot = app.document.snapshot();
|
||||
+ let revision = app.document.revision();
|
||||
+ let undo = app.document.can_undo();
|
||||
+ let redo = app.document.can_redo();
|
||||
+ let draft = app.source_workspace.text().to_owned();
|
||||
+ let original_path = app.path.clone();
|
||||
+ let dirty = app.dirty();
|
||||
+ let result = write_snapshot(
|
||||
+ app.canvas_document,
|
||||
+ revision,
|
||||
+ snapshot.clone(),
|
||||
+ path,
|
||||
+ app.disk_project.clone(),
|
||||
+ );
|
||||
+ let error = match result {
|
||||
+ Err(error) => error,
|
||||
+ Ok(_) => panic!("Expected collision refusal"),
|
||||
+ };
|
||||
+ let _ = app.update(Message::Saved(Err(error.clone())));
|
||||
+ assert!(Arc::ptr_eq(&snapshot, &app.document.snapshot()));
|
||||
+ assert_eq!(app.document.revision(), revision);
|
||||
+ assert_eq!(app.document.can_undo(), undo);
|
||||
+ assert_eq!(app.document.can_redo(), redo);
|
||||
+ assert_eq!(app.source_workspace.text(), draft);
|
||||
+ assert_eq!(app.path, original_path);
|
||||
+ assert_eq!(app.dirty(), dirty);
|
||||
+ error
|
||||
+}
|
||||
+
|
||||
+#[test]
|
||||
+fn same_root_new_entry_collision_preserves_files_draft_and_history() {
|
||||
+ let directory = tempfile::tempdir().unwrap();
|
||||
+ let (mut app, activity, original) = saved_multifile_app(directory.path());
|
||||
+ let bytes: Vec<_> = app
|
||||
+ .document
|
||||
+ .bundle()
|
||||
+ .files
|
||||
+ .keys()
|
||||
+ .map(|p| (p.clone(), std::fs::read(directory.path().join(p)).unwrap()))
|
||||
+ .collect();
|
||||
+ app.execute(Command::Rename(activity, "Review incident".into()));
|
||||
+ app.execute(Command::Rename(activity, "Evaluate incident".into()));
|
||||
+ let _ = app.update(Message::Undo);
|
||||
+ assert!(app.document.can_undo() && app.document.can_redo());
|
||||
+ let cursor = app.source_workspace.files[&app.source_workspace.entry].cursor;
|
||||
+ app.source_workspace.edit(
|
||||
+ format!("{}\n// retained draft", app.source_workspace.text()),
|
||||
+ cursor,
|
||||
+ );
|
||||
+ let destination = directory.path().join("renamed.arcadia");
|
||||
+ let error = rejected_save_preserves_editor(&mut app, destination.clone());
|
||||
+ assert!(error.contains("already exist") && error.contains("Save All"));
|
||||
+ assert!(!error.contains("changed outside"));
|
||||
+ assert!(!destination.exists());
|
||||
+ assert_eq!(app.path, Some(original));
|
||||
+ for (path, expected) in bytes {
|
||||
+ assert_eq!(
|
||||
+ std::fs::read(directory.path().join(path)).unwrap(),
|
||||
+ expected
|
||||
+ );
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+#[test]
|
||||
+fn fresh_root_existing_include_is_protected_before_any_bundle_write() {
|
||||
+ let original = tempfile::tempdir().unwrap();
|
||||
+ let destination = tempfile::tempdir().unwrap();
|
||||
+ let (mut app, activity, _) = saved_multifile_app(original.path());
|
||||
+ app.execute(Command::Rename(activity, "Review incident".into()));
|
||||
+ let fragment = app.document.compiled().index.declarations[&activity]
|
||||
+ .path
|
||||
+ .clone();
|
||||
+ let collision = destination.path().join(&fragment);
|
||||
+ std::fs::create_dir_all(collision.parent().unwrap()).unwrap();
|
||||
+ std::fs::write(&collision, b"// independent destination work").unwrap();
|
||||
+ let target = destination.path().join("copy.arcadia");
|
||||
+ let error = rejected_save_preserves_editor(&mut app, target.clone());
|
||||
+ assert!(error.contains(&fragment) && error.contains("fresh directory"));
|
||||
+ assert!(!error.contains("changed outside"));
|
||||
+ assert!(!target.exists());
|
||||
+ for path in app.document.bundle().files.keys() {
|
||||
+ let file = destination.path().join(path);
|
||||
+ if path == &fragment {
|
||||
+ assert_eq!(
|
||||
+ std::fs::read(file).unwrap(),
|
||||
+ b"// independent destination work"
|
||||
+ );
|
||||
+ } else {
|
||||
+ assert!(!file.exists(), "Unexpected write: {path}");
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+#[test]
|
||||
+fn observed_dependency_change_remains_external_conflict_and_normal_saves_work() {
|
||||
+ let original = tempfile::tempdir().unwrap();
|
||||
+ let fresh = tempfile::tempdir().unwrap();
|
||||
+ let (mut app, activity, path) = saved_multifile_app(original.path());
|
||||
+ app.execute(Command::Rename(activity, "Review incident".into()));
|
||||
+ complete_save(&mut app, path.clone());
|
||||
+ assert!(!app.dirty());
|
||||
+ let fragment = app.document.compiled().index.declarations[&activity]
|
||||
+ .path
|
||||
+ .clone();
|
||||
+ let entry_before = std::fs::read(&path).unwrap();
|
||||
+ let original_fragment = std::fs::read(original.path().join(&fragment)).unwrap();
|
||||
+ std::fs::write(original.path().join(&fragment), b"// external edit").unwrap();
|
||||
+ app.execute(Command::Rename(activity, "Evaluate incident".into()));
|
||||
+ let error = rejected_save_preserves_editor(&mut app, path.clone());
|
||||
+ assert!(error.contains("changed outside") && error.contains(&fragment));
|
||||
+ assert!(!error.contains("fresh directory"));
|
||||
+ assert_eq!(std::fs::read(&path).unwrap(), entry_before);
|
||||
+ assert_eq!(
|
||||
+ std::fs::read(original.path().join(&fragment)).unwrap(),
|
||||
+ b"// external edit"
|
||||
+ );
|
||||
+ // Restore the observed bytes, then exercise the legitimate existing Save All.
|
||||
+ std::fs::write(original.path().join(&fragment), original_fragment).unwrap();
|
||||
+ complete_save(&mut app, path);
|
||||
+ assert!(!app.dirty());
|
||||
+ let model = app.project().clone();
|
||||
+ let target = fresh.path().join("copy.arcadia");
|
||||
+ complete_save(&mut app, target.clone());
|
||||
+ let saved = source_files::load_project(&target, LIMITS).unwrap();
|
||||
+ let compiled = source_project::compile_bundle(&saved.bundle, LIMITS).unwrap();
|
||||
+ assert_eq!(compiled.decoded.project, model);
|
||||
+ assert_eq!(&saved.bundle, app.document.bundle());
|
||||
+ assert!(!app.dirty());
|
||||
+}
|
||||
+
|
||||
fn complete_save(app: &mut App, path: PathBuf) {
|
||||
let receipt = write_snapshot(
|
||||
app.canvas_document,
|
||||
@@ -0,0 +1,16 @@
|
||||
Compiling oa-core v0.2.0 (C:\ar-save-01a0d717\crates\oa-core)
|
||||
Compiling oa-server v0.2.0 (C:\ar-save-01a0d717\crates\oa-server)
|
||||
Compiling iced_widget v0.14.2 (C:\ar-save-01a0d717\crates\vendor\iced_widget)
|
||||
Compiling oa-desktop v0.2.0 (C:\ar-save-01a0d717\crates\oa-desktop)
|
||||
Compiling iced v0.14.0
|
||||
error[E0308]: mismatched types
|
||||
--> crates\oa-desktop\src\app\save_as_tests.rs:42:5
|
||||
|
|
||||
15 | fn rejected_save_preserves_editor(app: &mut App, path: PathBuf) -> String {
|
||||
| ------ expected `std::string::String` because of return type
|
||||
...
|
||||
42 | error
|
||||
| ^^^^^ expected `String`, found `SaveFailure`
|
||||
|
||||
For more information about this error, try `rustc --explain E0308`.
|
||||
error: could not compile `oa-desktop` (bin "arcadia-studio" test) due to 1 previous error
|
||||
@@ -0,0 +1,5 @@
|
||||
Compiling iced_widget v0.14.2 (C:\ar-save-01a0d717\crates\vendor\iced_widget)
|
||||
Compiling oa-core v0.2.0 (C:\ar-save-01a0d717\crates\oa-core)
|
||||
Compiling iced v0.14.0
|
||||
Compiling oa-desktop v0.2.0 (C:\ar-save-01a0d717\crates\oa-desktop)
|
||||
Finished `dev` profile [unoptimized] target(s) in 2m 55s
|
||||
@@ -0,0 +1,6 @@
|
||||
Compiling oa-core v0.2.0 (C:\ar-save-01a0d717\crates\oa-core)
|
||||
Checking iced_widget v0.14.2 (C:\ar-save-01a0d717\crates\vendor\iced_widget)
|
||||
Compiling oa-desktop v0.2.0 (C:\ar-save-01a0d717\crates\oa-desktop)
|
||||
Compiling oa-server v0.2.0 (C:\ar-save-01a0d717\crates\oa-server)
|
||||
Checking iced v0.14.0
|
||||
Finished `dev` profile [unoptimized] target(s) in 2m 24s
|
||||
@@ -0,0 +1,37 @@
|
||||
Compiling oa-desktop v0.2.0 (C:\ar-save-01a0d717\crates\oa-desktop)
|
||||
Finished `test` profile [unoptimized] target(s) in 2m 55s
|
||||
Running unittests src\main.rs (C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps\arcadia_studio-c5b42126ba36cd38.exe)
|
||||
|
||||
running 29 tests
|
||||
test app::repair_save_state_tests::recovering_applied_repair_rebinds_rolled_back_disk_bytes_without_changing_model ... ok
|
||||
test app::repair_save_state_tests::recovery_missing_entry_or_failed_reload_preserves_current_destination_save_authority ... ok
|
||||
test app::repair_save_state_tests::repair_history_compares_to_new_disk_baseline_and_then_successful_save ... ok
|
||||
test app::repair_save_state_tests::repair_to_previous_saved_bytes_requires_save_at_new_destination_and_guards_close ... ok
|
||||
test app::repair_save_state_tests::valid_equal_content_at_distinct_destinations_stays_clean ... ok
|
||||
test app::save_as_tests::fresh_root_existing_include_is_protected_before_any_bundle_write ... ok
|
||||
test app::save_as_tests::observed_dependency_change_remains_external_conflict_and_normal_saves_work ... ok
|
||||
test app::save_as_tests::same_root_new_entry_collision_preserves_files_draft_and_history ... ok
|
||||
test app::save_as_tests::save_as_late_receipt_preserves_newer_raw_source_draft_and_destination ... ok
|
||||
test app::save_as_tests::save_as_preflight_rejects_historical_collision_before_starting_io ... ok
|
||||
test app::save_as_tests::save_as_receipt_then_one_undo_restores_meaning_and_saving_preserves_redo ... ok
|
||||
test app::source_project_tests::closed_detached_file_keeps_first_save_conflict_then_can_be_reloaded_fresh ... ok
|
||||
test app::source_project_tests::inactive_invalid_draft_blocks_graphical_changes_and_diagnostic_switches_files ... ok
|
||||
test app::source_project_tests::includes_loaded_diagnostics_use_raw_newly_discovered_bytes ... ok
|
||||
test app::source_project_tests::includes_loaded_diagnostics_use_retained_overlay_and_ignore_old_version ... ok
|
||||
test app::source_project_tests::includes_loaded_rejects_mismatched_retained_bytes_before_publication ... ok
|
||||
test app::source_project_tests::includes_loaded_requires_each_inactive_detached_overlay ... ok
|
||||
test app::source_project_tests::json_export_and_rejected_save_as_preserve_source_location_history_and_bytes ... ok
|
||||
test app::source_project_tests::missing_include_open_keeps_old_model_and_can_be_repaired_and_saved ... ok
|
||||
test app::source_project_tests::recovery_after_first_save_failure_retains_target_then_retries_without_reentering_path ... ok
|
||||
test app::source_project_tests::recovery_of_previous_save_as_target_does_not_redirect_current_project ... ok
|
||||
test app::source_project_tests::recovery_open_finds_first_save_journal_without_an_entry_file ... ok
|
||||
test app::source_project_tests::recovery_target_survives_edit_lint_apply_and_rejected_recovery_until_success ... ok
|
||||
test app::source_project_tests::source3_native_open_preserves_report_comments_nesting_and_save_reopen ... ok
|
||||
test app::source_project_tests::two_file_apply_graphical_edit_exact_undo_save_as_and_reopen ... ok
|
||||
test document::save_as_tests::save_as_preserves_explicit_source_entry_changes_in_history ... ok
|
||||
test document::save_as_tests::save_as_rebases_uniform_history_without_an_undo_step_or_lost_redo ... ok
|
||||
test document::save_as_tests::save_as_rejects_included_filename_collisions_in_past_and_future_without_mutation ... ok
|
||||
test document::save_as_tests::save_as_rejects_stale_or_content_changing_receipt_atomically ... ok
|
||||
|
||||
test result: ok. 29 passed; 0 failed; 0 ignored; 0 measured; 1520 filtered out; finished in 1.35s
|
||||
|
||||
|
After Width: | Height: | Size: 138 KiB |
|
After Width: | Height: | Size: 136 KiB |
|
After Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 141 KiB |
|
After Width: | Height: | Size: 148 KiB |
|
After Width: | Height: | Size: 106 KiB |
|
After Width: | Height: | Size: 113 KiB |
|
After Width: | Height: | Size: 101 KiB |
|
After Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 102 KiB |
|
After Width: | Height: | Size: 71 KiB |
|
After Width: | Height: | Size: 108 KiB |
|
After Width: | Height: | Size: 108 KiB |
|
After Width: | Height: | Size: 111 KiB |
|
After Width: | Height: | Size: 106 KiB |
|
After Width: | Height: | Size: 100 KiB |
@@ -0,0 +1,200 @@
|
||||
{
|
||||
"source": "0e83157e09d52e6152df91208e41693b62da2d46",
|
||||
"profile": "dev/unoptimized",
|
||||
"target": "x86_64-pc-windows-gnullvm",
|
||||
"binary": {
|
||||
"bytes": 119452672,
|
||||
"sha256": "e9cce9355525ecdc59bfae12608b1e0272167acef5a86b25368ef547e08886ff"
|
||||
},
|
||||
"runtime": {
|
||||
"bytes": 190976,
|
||||
"sha256": "f45604a12e8bcd839fd86f667c1be1cc7c4f9da2b3c69ff381ac708f0e1ae7d4"
|
||||
},
|
||||
"baseline": {
|
||||
"expected-diagnostics.json": {
|
||||
"bytes": 288,
|
||||
"sha256": "3700393d76b940cfc076bf52861bd7b1f43370f8eabce3594531bd0bf1fc851e"
|
||||
},
|
||||
"model.json": {
|
||||
"bytes": 134520,
|
||||
"sha256": "ef0ef4006c3e09d5db6e1b621256b3f7d6642f3a7b09cc34607cfbcca830c727"
|
||||
},
|
||||
"model.rs": {
|
||||
"bytes": 28776,
|
||||
"sha256": "ddc2d92b0d7699a4cadfbb35ae379f0a68d17f4f5d7df82b4b1afcf8d5425fbe"
|
||||
},
|
||||
"project.arcadia": {
|
||||
"bytes": 1958,
|
||||
"sha256": "b2674e6bf77cfe0f6f0ba79c81d2e96d92f39c02ca2c6266d80e91723bfb9fda"
|
||||
},
|
||||
"README.md": {
|
||||
"bytes": 11137,
|
||||
"sha256": "113cfb1cf38a98b51bff60442d86a35d636a3d80ef206bece7d53d0aae67f2d5"
|
||||
},
|
||||
"traceability.arcadia": {
|
||||
"bytes": 28041,
|
||||
"sha256": "474bd28d955ff7af7722f6e9a23220d816879e3f46202e79a233544b9c593116"
|
||||
},
|
||||
"transition-before.json": {
|
||||
"bytes": 35801,
|
||||
"sha256": "2253e6434f741687e22327c37d520ed15c043bc36025498650bc2366bb6a874d"
|
||||
},
|
||||
"transition-request.json": {
|
||||
"bytes": 4276,
|
||||
"sha256": "43b9a22e5f95ad3bc0ebd2478ead0e14406854abc989ae94ded9367b013d812a"
|
||||
},
|
||||
"evidence/repair-check.md": {
|
||||
"bytes": 1419,
|
||||
"sha256": "f4db17bdca4ecbb1bf0caef01b2da5f1f7f798ab3152b648ce6dd8696a6a68e5"
|
||||
},
|
||||
"oa/capabilities.arcadia": {
|
||||
"bytes": 630,
|
||||
"sha256": "26a3d9b615a3251ff010e0b47127f2d16bc2dcd45ed95967208b0076d725843a"
|
||||
},
|
||||
"oa/model.arcadia": {
|
||||
"bytes": 531,
|
||||
"sha256": "069a5eaaf525089935cc9d73ae7b916866ed78c6534705d75739650ecdea7ada"
|
||||
},
|
||||
"oa/participants.arcadia": {
|
||||
"bytes": 1580,
|
||||
"sha256": "591a75a9ecad280302be4d4ae0171ad616377ed11ead5e233848ca2dc0a71819"
|
||||
},
|
||||
"oa/types.arcadia": {
|
||||
"bytes": 554,
|
||||
"sha256": "f02c391d584674c879f662a418abba3a220f1fee88471ca49322ac9873de628d"
|
||||
},
|
||||
"sa/capabilities.arcadia": {
|
||||
"bytes": 630,
|
||||
"sha256": "81706a0ca9d7db2aa0350888b9c00d853885185db2e6b90557d3d51a11c3d645"
|
||||
},
|
||||
"sa/model.arcadia": {
|
||||
"bytes": 531,
|
||||
"sha256": "805b90262e27090ae7da81a51bcefa49c97fb0b3d3220b4a72323b4c4351c395"
|
||||
},
|
||||
"sa/participants.arcadia": {
|
||||
"bytes": 3604,
|
||||
"sha256": "ca144d6a8f45fe720b5d18c7b59c7671444baa8c37e5ce9117bcba34b3a6aa84"
|
||||
},
|
||||
"sa/types.arcadia": {
|
||||
"bytes": 903,
|
||||
"sha256": "540ddbc2bcd0ccf45298e3ea5660637341aff63ff65fd87ac2f26469d1adc064"
|
||||
},
|
||||
"views/diagram_oa_allocation_view.arcadia": {
|
||||
"bytes": 1786,
|
||||
"sha256": "c45d7467839219d894804c1ef2d22ff4d4a5a84a6a273c526bafd4c1facde624"
|
||||
},
|
||||
"views/diagram_sa_allocation_view.arcadia": {
|
||||
"bytes": 1797,
|
||||
"sha256": "352a3ca745517592b5c9b1239b5770f62f0466a329a91fd03457ef2b53c06ed6"
|
||||
},
|
||||
"views/diagram_sa_capability_view.arcadia": {
|
||||
"bytes": 1286,
|
||||
"sha256": "8f18fcccbcddcf3c1ea0ffe727b5b23b77fc148c5da4fde953abe681e4c20cd2"
|
||||
},
|
||||
"views/diagram_sa_service_view.arcadia": {
|
||||
"bytes": 1960,
|
||||
"sha256": "4c72cb7593d9c4be8d2600b0656a7a3a6ce84c45bb2f3e58a4ee5ae3bf91913c"
|
||||
},
|
||||
"views/diagram_sa_state_view.arcadia": {
|
||||
"bytes": 1576,
|
||||
"sha256": "dd1bea81ac7dc549a53f9b190be6f13052e00ede345bd180444cc31edb892230"
|
||||
},
|
||||
"oa/activities/activity_oa_restore_work.arcadia": {
|
||||
"bytes": 1130,
|
||||
"sha256": "21cbd7176af8fad68453306f2371ff03e127a994b8796cdf044567332de9686f"
|
||||
},
|
||||
"oa/behavior/process_oa_assessment_procedure.arcadia": {
|
||||
"bytes": 550,
|
||||
"sha256": "23cabc213c264a16c8595414db6acb09248c1cef9cd699f1b0316e5bb82c062a"
|
||||
},
|
||||
"oa/behavior/process_oa_field_procedure.arcadia": {
|
||||
"bytes": 1178,
|
||||
"sha256": "9c52086759b7344b4809ceb8d372f65647b16fc24153a03b887faa378c37fe96"
|
||||
},
|
||||
"oa/behavior/process_oa_response.arcadia": {
|
||||
"bytes": 2560,
|
||||
"sha256": "675798bd19e6b40d03e7076b0e59b110cdaaab7b6d16c47c3ac80fa960072e84"
|
||||
},
|
||||
"oa/behavior/scenario_oa_conversation.arcadia": {
|
||||
"bytes": 1515,
|
||||
"sha256": "e217e5394a0771dc16206ed9437a231da27905d2f19be64b3f48281c0a32fb6b"
|
||||
},
|
||||
"oa/behavior/scenario_oa_full_scenario.arcadia": {
|
||||
"bytes": 1121,
|
||||
"sha256": "c5a285f2d7c61bd2a136107f267fbf9cddb1cba3f63ff36a6f53f7ab98f33df5"
|
||||
},
|
||||
"oa/behavior/state_machine_oa_monitor.arcadia": {
|
||||
"bytes": 1358,
|
||||
"sha256": "e7349e1e5336282eed3f5a103129db33d3ae4ed500788ee7129e8fc193ac57f6"
|
||||
},
|
||||
"sa/behavior/process_sa_assessment_procedure.arcadia": {
|
||||
"bytes": 559,
|
||||
"sha256": "5c414fbdaabf9f9e402b0441fcacf1cacf4dbbc6c822162f028de35abf59be2d"
|
||||
},
|
||||
"sa/behavior/process_sa_field_procedure.arcadia": {
|
||||
"bytes": 1187,
|
||||
"sha256": "ece846fdf93857e71a9ab0efcbdf64a5c41c71180f62afa3f79077fffb53b8f2"
|
||||
},
|
||||
"sa/behavior/process_sa_response.arcadia": {
|
||||
"bytes": 2569,
|
||||
"sha256": "af7fdda280a917cf626f6e077162d481f9aaad280f8e81330c07d7fe384b1c52"
|
||||
},
|
||||
"sa/behavior/scenario_sa_conversation.arcadia": {
|
||||
"bytes": 1847,
|
||||
"sha256": "01339699ec3ee409418d9bb232542f2bcd9419f1e67b183e77700c56bb9f71d2"
|
||||
},
|
||||
"sa/behavior/scenario_sa_full_scenario.arcadia": {
|
||||
"bytes": 1116,
|
||||
"sha256": "5dce6b00a3a441162e8dee3e23d9ca5ab7bed4a24de669b1fba03664a3086dda"
|
||||
},
|
||||
"sa/behavior/state_machine_sa_monitor.arcadia": {
|
||||
"bytes": 1358,
|
||||
"sha256": "17dbcfa5bbfd10fc8e23a325fc950ce853c219b4aa89c74f96278cbb3f34acc8"
|
||||
},
|
||||
"sa/functions/function_sa_audit_thresholds.arcadia": {
|
||||
"bytes": 280,
|
||||
"sha256": "27f798f78f36e72b38edab3725af2feb0eaa010fd52a60b5c6b6bef57ad3b686"
|
||||
},
|
||||
"sa/functions/function_sa_restore_work.arcadia": {
|
||||
"bytes": 2251,
|
||||
"sha256": "357c6acb80f86b4e8d8f5c98f9f79d140f85fbe09f3406b41b7ac6eba464ec8c"
|
||||
}
|
||||
},
|
||||
"fresh_companions": {
|
||||
"expected-diagnostics.json": {
|
||||
"bytes": 288,
|
||||
"sha256": "3700393d76b940cfc076bf52861bd7b1f43370f8eabce3594531bd0bf1fc851e"
|
||||
},
|
||||
"model.json": {
|
||||
"bytes": 134520,
|
||||
"sha256": "ef0ef4006c3e09d5db6e1b621256b3f7d6642f3a7b09cc34607cfbcca830c727"
|
||||
},
|
||||
"model.rs": {
|
||||
"bytes": 28776,
|
||||
"sha256": "ddc2d92b0d7699a4cadfbb35ae379f0a68d17f4f5d7df82b4b1afcf8d5425fbe"
|
||||
},
|
||||
"README.md": {
|
||||
"bytes": 11137,
|
||||
"sha256": "113cfb1cf38a98b51bff60442d86a35d636a3d80ef206bece7d53d0aae67f2d5"
|
||||
},
|
||||
"transition-before.json": {
|
||||
"bytes": 35801,
|
||||
"sha256": "2253e6434f741687e22327c37d520ed15c043bc36025498650bc2366bb6a874d"
|
||||
},
|
||||
"transition-request.json": {
|
||||
"bytes": 4276,
|
||||
"sha256": "43b9a22e5f95ad3bc0ebd2478ead0e14406854abc989ae94ded9367b013d812a"
|
||||
},
|
||||
"evidence/repair-check.md": {
|
||||
"bytes": 1419,
|
||||
"sha256": "f4db17bdca4ecbb1bf0caef01b2da5f1f7f798ab3152b648ce6dd8696a6a68e5"
|
||||
}
|
||||
},
|
||||
"declared_rename": {
|
||||
"activity": "61f7bbfb-74a4-5540-9182-2583dfb27a49",
|
||||
"before": "Assess pressure alarm",
|
||||
"after": "Assess pressure alarm QA46"
|
||||
},
|
||||
"external_dependency": "oa/activities/activity_oa_restore_work.arcadia",
|
||||
"external_comment": "\n// native #46 external-edit probe\n"
|
||||
}
|
||||
@@ -0,0 +1,156 @@
|
||||
{
|
||||
"status": "PASS",
|
||||
"phase": "collision",
|
||||
"folder": "C:\\ar-save-01a0d717\\.local\\native46\\collision-a",
|
||||
"files": {
|
||||
"expected-diagnostics.json": {
|
||||
"bytes": 288,
|
||||
"sha256": "3700393d76b940cfc076bf52861bd7b1f43370f8eabce3594531bd0bf1fc851e"
|
||||
},
|
||||
"model.json": {
|
||||
"bytes": 134520,
|
||||
"sha256": "ef0ef4006c3e09d5db6e1b621256b3f7d6642f3a7b09cc34607cfbcca830c727"
|
||||
},
|
||||
"model.rs": {
|
||||
"bytes": 28776,
|
||||
"sha256": "ddc2d92b0d7699a4cadfbb35ae379f0a68d17f4f5d7df82b4b1afcf8d5425fbe"
|
||||
},
|
||||
"project.arcadia": {
|
||||
"bytes": 1958,
|
||||
"sha256": "b2674e6bf77cfe0f6f0ba79c81d2e96d92f39c02ca2c6266d80e91723bfb9fda"
|
||||
},
|
||||
"README.md": {
|
||||
"bytes": 11137,
|
||||
"sha256": "113cfb1cf38a98b51bff60442d86a35d636a3d80ef206bece7d53d0aae67f2d5"
|
||||
},
|
||||
"traceability.arcadia": {
|
||||
"bytes": 28041,
|
||||
"sha256": "474bd28d955ff7af7722f6e9a23220d816879e3f46202e79a233544b9c593116"
|
||||
},
|
||||
"transition-before.json": {
|
||||
"bytes": 35801,
|
||||
"sha256": "2253e6434f741687e22327c37d520ed15c043bc36025498650bc2366bb6a874d"
|
||||
},
|
||||
"transition-request.json": {
|
||||
"bytes": 4276,
|
||||
"sha256": "43b9a22e5f95ad3bc0ebd2478ead0e14406854abc989ae94ded9367b013d812a"
|
||||
},
|
||||
"evidence/repair-check.md": {
|
||||
"bytes": 1419,
|
||||
"sha256": "f4db17bdca4ecbb1bf0caef01b2da5f1f7f798ab3152b648ce6dd8696a6a68e5"
|
||||
},
|
||||
"oa/capabilities.arcadia": {
|
||||
"bytes": 630,
|
||||
"sha256": "26a3d9b615a3251ff010e0b47127f2d16bc2dcd45ed95967208b0076d725843a"
|
||||
},
|
||||
"oa/model.arcadia": {
|
||||
"bytes": 531,
|
||||
"sha256": "069a5eaaf525089935cc9d73ae7b916866ed78c6534705d75739650ecdea7ada"
|
||||
},
|
||||
"oa/participants.arcadia": {
|
||||
"bytes": 1580,
|
||||
"sha256": "591a75a9ecad280302be4d4ae0171ad616377ed11ead5e233848ca2dc0a71819"
|
||||
},
|
||||
"oa/types.arcadia": {
|
||||
"bytes": 554,
|
||||
"sha256": "f02c391d584674c879f662a418abba3a220f1fee88471ca49322ac9873de628d"
|
||||
},
|
||||
"sa/capabilities.arcadia": {
|
||||
"bytes": 630,
|
||||
"sha256": "81706a0ca9d7db2aa0350888b9c00d853885185db2e6b90557d3d51a11c3d645"
|
||||
},
|
||||
"sa/model.arcadia": {
|
||||
"bytes": 531,
|
||||
"sha256": "805b90262e27090ae7da81a51bcefa49c97fb0b3d3220b4a72323b4c4351c395"
|
||||
},
|
||||
"sa/participants.arcadia": {
|
||||
"bytes": 3604,
|
||||
"sha256": "ca144d6a8f45fe720b5d18c7b59c7671444baa8c37e5ce9117bcba34b3a6aa84"
|
||||
},
|
||||
"sa/types.arcadia": {
|
||||
"bytes": 903,
|
||||
"sha256": "540ddbc2bcd0ccf45298e3ea5660637341aff63ff65fd87ac2f26469d1adc064"
|
||||
},
|
||||
"views/diagram_oa_allocation_view.arcadia": {
|
||||
"bytes": 1786,
|
||||
"sha256": "c45d7467839219d894804c1ef2d22ff4d4a5a84a6a273c526bafd4c1facde624"
|
||||
},
|
||||
"views/diagram_sa_allocation_view.arcadia": {
|
||||
"bytes": 1797,
|
||||
"sha256": "352a3ca745517592b5c9b1239b5770f62f0466a329a91fd03457ef2b53c06ed6"
|
||||
},
|
||||
"views/diagram_sa_capability_view.arcadia": {
|
||||
"bytes": 1286,
|
||||
"sha256": "8f18fcccbcddcf3c1ea0ffe727b5b23b77fc148c5da4fde953abe681e4c20cd2"
|
||||
},
|
||||
"views/diagram_sa_service_view.arcadia": {
|
||||
"bytes": 1960,
|
||||
"sha256": "4c72cb7593d9c4be8d2600b0656a7a3a6ce84c45bb2f3e58a4ee5ae3bf91913c"
|
||||
},
|
||||
"views/diagram_sa_state_view.arcadia": {
|
||||
"bytes": 1576,
|
||||
"sha256": "dd1bea81ac7dc549a53f9b190be6f13052e00ede345bd180444cc31edb892230"
|
||||
},
|
||||
"oa/activities/activity_oa_restore_work.arcadia": {
|
||||
"bytes": 1130,
|
||||
"sha256": "21cbd7176af8fad68453306f2371ff03e127a994b8796cdf044567332de9686f"
|
||||
},
|
||||
"oa/behavior/process_oa_assessment_procedure.arcadia": {
|
||||
"bytes": 550,
|
||||
"sha256": "23cabc213c264a16c8595414db6acb09248c1cef9cd699f1b0316e5bb82c062a"
|
||||
},
|
||||
"oa/behavior/process_oa_field_procedure.arcadia": {
|
||||
"bytes": 1178,
|
||||
"sha256": "9c52086759b7344b4809ceb8d372f65647b16fc24153a03b887faa378c37fe96"
|
||||
},
|
||||
"oa/behavior/process_oa_response.arcadia": {
|
||||
"bytes": 2560,
|
||||
"sha256": "675798bd19e6b40d03e7076b0e59b110cdaaab7b6d16c47c3ac80fa960072e84"
|
||||
},
|
||||
"oa/behavior/scenario_oa_conversation.arcadia": {
|
||||
"bytes": 1515,
|
||||
"sha256": "e217e5394a0771dc16206ed9437a231da27905d2f19be64b3f48281c0a32fb6b"
|
||||
},
|
||||
"oa/behavior/scenario_oa_full_scenario.arcadia": {
|
||||
"bytes": 1121,
|
||||
"sha256": "c5a285f2d7c61bd2a136107f267fbf9cddb1cba3f63ff36a6f53f7ab98f33df5"
|
||||
},
|
||||
"oa/behavior/state_machine_oa_monitor.arcadia": {
|
||||
"bytes": 1358,
|
||||
"sha256": "e7349e1e5336282eed3f5a103129db33d3ae4ed500788ee7129e8fc193ac57f6"
|
||||
},
|
||||
"sa/behavior/process_sa_assessment_procedure.arcadia": {
|
||||
"bytes": 559,
|
||||
"sha256": "5c414fbdaabf9f9e402b0441fcacf1cacf4dbbc6c822162f028de35abf59be2d"
|
||||
},
|
||||
"sa/behavior/process_sa_field_procedure.arcadia": {
|
||||
"bytes": 1187,
|
||||
"sha256": "ece846fdf93857e71a9ab0efcbdf64a5c41c71180f62afa3f79077fffb53b8f2"
|
||||
},
|
||||
"sa/behavior/process_sa_response.arcadia": {
|
||||
"bytes": 2569,
|
||||
"sha256": "af7fdda280a917cf626f6e077162d481f9aaad280f8e81330c07d7fe384b1c52"
|
||||
},
|
||||
"sa/behavior/scenario_sa_conversation.arcadia": {
|
||||
"bytes": 1847,
|
||||
"sha256": "01339699ec3ee409418d9bb232542f2bcd9419f1e67b183e77700c56bb9f71d2"
|
||||
},
|
||||
"sa/behavior/scenario_sa_full_scenario.arcadia": {
|
||||
"bytes": 1116,
|
||||
"sha256": "5dce6b00a3a441162e8dee3e23d9ca5ab7bed4a24de669b1fba03664a3086dda"
|
||||
},
|
||||
"sa/behavior/state_machine_sa_monitor.arcadia": {
|
||||
"bytes": 1358,
|
||||
"sha256": "17dbcfa5bbfd10fc8e23a325fc950ce853c219b4aa89c74f96278cbb3f34acc8"
|
||||
},
|
||||
"sa/functions/function_sa_audit_thresholds.arcadia": {
|
||||
"bytes": 280,
|
||||
"sha256": "27f798f78f36e72b38edab3725af2feb0eaa010fd52a60b5c6b6bef57ad3b686"
|
||||
},
|
||||
"sa/functions/function_sa_restore_work.arcadia": {
|
||||
"bytes": 2251,
|
||||
"sha256": "357c6acb80f86b4e8d8f5c98f9f79d140f85fbe09f3406b41b7ac6eba464ec8c"
|
||||
}
|
||||
},
|
||||
"scope": "Every byte and relative filename, including seven companion files, equals the independently declared original bundle plus only the phase-specific activity rename or parent-injected valid comment."
|
||||
}
|
||||
@@ -0,0 +1,156 @@
|
||||
{
|
||||
"status": "PASS",
|
||||
"phase": "external-before",
|
||||
"folder": "C:\\ar-save-01a0d717\\.local\\native46\\external-b",
|
||||
"files": {
|
||||
"expected-diagnostics.json": {
|
||||
"bytes": 288,
|
||||
"sha256": "3700393d76b940cfc076bf52861bd7b1f43370f8eabce3594531bd0bf1fc851e"
|
||||
},
|
||||
"model.json": {
|
||||
"bytes": 134520,
|
||||
"sha256": "ef0ef4006c3e09d5db6e1b621256b3f7d6642f3a7b09cc34607cfbcca830c727"
|
||||
},
|
||||
"model.rs": {
|
||||
"bytes": 28776,
|
||||
"sha256": "ddc2d92b0d7699a4cadfbb35ae379f0a68d17f4f5d7df82b4b1afcf8d5425fbe"
|
||||
},
|
||||
"project.arcadia": {
|
||||
"bytes": 1958,
|
||||
"sha256": "b2674e6bf77cfe0f6f0ba79c81d2e96d92f39c02ca2c6266d80e91723bfb9fda"
|
||||
},
|
||||
"README.md": {
|
||||
"bytes": 11137,
|
||||
"sha256": "113cfb1cf38a98b51bff60442d86a35d636a3d80ef206bece7d53d0aae67f2d5"
|
||||
},
|
||||
"traceability.arcadia": {
|
||||
"bytes": 28041,
|
||||
"sha256": "474bd28d955ff7af7722f6e9a23220d816879e3f46202e79a233544b9c593116"
|
||||
},
|
||||
"transition-before.json": {
|
||||
"bytes": 35801,
|
||||
"sha256": "2253e6434f741687e22327c37d520ed15c043bc36025498650bc2366bb6a874d"
|
||||
},
|
||||
"transition-request.json": {
|
||||
"bytes": 4276,
|
||||
"sha256": "43b9a22e5f95ad3bc0ebd2478ead0e14406854abc989ae94ded9367b013d812a"
|
||||
},
|
||||
"evidence/repair-check.md": {
|
||||
"bytes": 1419,
|
||||
"sha256": "f4db17bdca4ecbb1bf0caef01b2da5f1f7f798ab3152b648ce6dd8696a6a68e5"
|
||||
},
|
||||
"oa/capabilities.arcadia": {
|
||||
"bytes": 630,
|
||||
"sha256": "26a3d9b615a3251ff010e0b47127f2d16bc2dcd45ed95967208b0076d725843a"
|
||||
},
|
||||
"oa/model.arcadia": {
|
||||
"bytes": 531,
|
||||
"sha256": "069a5eaaf525089935cc9d73ae7b916866ed78c6534705d75739650ecdea7ada"
|
||||
},
|
||||
"oa/participants.arcadia": {
|
||||
"bytes": 1580,
|
||||
"sha256": "591a75a9ecad280302be4d4ae0171ad616377ed11ead5e233848ca2dc0a71819"
|
||||
},
|
||||
"oa/types.arcadia": {
|
||||
"bytes": 554,
|
||||
"sha256": "f02c391d584674c879f662a418abba3a220f1fee88471ca49322ac9873de628d"
|
||||
},
|
||||
"sa/capabilities.arcadia": {
|
||||
"bytes": 630,
|
||||
"sha256": "81706a0ca9d7db2aa0350888b9c00d853885185db2e6b90557d3d51a11c3d645"
|
||||
},
|
||||
"sa/model.arcadia": {
|
||||
"bytes": 531,
|
||||
"sha256": "805b90262e27090ae7da81a51bcefa49c97fb0b3d3220b4a72323b4c4351c395"
|
||||
},
|
||||
"sa/participants.arcadia": {
|
||||
"bytes": 3604,
|
||||
"sha256": "ca144d6a8f45fe720b5d18c7b59c7671444baa8c37e5ce9117bcba34b3a6aa84"
|
||||
},
|
||||
"sa/types.arcadia": {
|
||||
"bytes": 903,
|
||||
"sha256": "540ddbc2bcd0ccf45298e3ea5660637341aff63ff65fd87ac2f26469d1adc064"
|
||||
},
|
||||
"views/diagram_oa_allocation_view.arcadia": {
|
||||
"bytes": 1786,
|
||||
"sha256": "c45d7467839219d894804c1ef2d22ff4d4a5a84a6a273c526bafd4c1facde624"
|
||||
},
|
||||
"views/diagram_sa_allocation_view.arcadia": {
|
||||
"bytes": 1797,
|
||||
"sha256": "352a3ca745517592b5c9b1239b5770f62f0466a329a91fd03457ef2b53c06ed6"
|
||||
},
|
||||
"views/diagram_sa_capability_view.arcadia": {
|
||||
"bytes": 1286,
|
||||
"sha256": "8f18fcccbcddcf3c1ea0ffe727b5b23b77fc148c5da4fde953abe681e4c20cd2"
|
||||
},
|
||||
"views/diagram_sa_service_view.arcadia": {
|
||||
"bytes": 1960,
|
||||
"sha256": "4c72cb7593d9c4be8d2600b0656a7a3a6ce84c45bb2f3e58a4ee5ae3bf91913c"
|
||||
},
|
||||
"views/diagram_sa_state_view.arcadia": {
|
||||
"bytes": 1576,
|
||||
"sha256": "dd1bea81ac7dc549a53f9b190be6f13052e00ede345bd180444cc31edb892230"
|
||||
},
|
||||
"oa/activities/activity_oa_restore_work.arcadia": {
|
||||
"bytes": 1130,
|
||||
"sha256": "21cbd7176af8fad68453306f2371ff03e127a994b8796cdf044567332de9686f"
|
||||
},
|
||||
"oa/behavior/process_oa_assessment_procedure.arcadia": {
|
||||
"bytes": 550,
|
||||
"sha256": "23cabc213c264a16c8595414db6acb09248c1cef9cd699f1b0316e5bb82c062a"
|
||||
},
|
||||
"oa/behavior/process_oa_field_procedure.arcadia": {
|
||||
"bytes": 1178,
|
||||
"sha256": "9c52086759b7344b4809ceb8d372f65647b16fc24153a03b887faa378c37fe96"
|
||||
},
|
||||
"oa/behavior/process_oa_response.arcadia": {
|
||||
"bytes": 2560,
|
||||
"sha256": "675798bd19e6b40d03e7076b0e59b110cdaaab7b6d16c47c3ac80fa960072e84"
|
||||
},
|
||||
"oa/behavior/scenario_oa_conversation.arcadia": {
|
||||
"bytes": 1515,
|
||||
"sha256": "e217e5394a0771dc16206ed9437a231da27905d2f19be64b3f48281c0a32fb6b"
|
||||
},
|
||||
"oa/behavior/scenario_oa_full_scenario.arcadia": {
|
||||
"bytes": 1121,
|
||||
"sha256": "c5a285f2d7c61bd2a136107f267fbf9cddb1cba3f63ff36a6f53f7ab98f33df5"
|
||||
},
|
||||
"oa/behavior/state_machine_oa_monitor.arcadia": {
|
||||
"bytes": 1358,
|
||||
"sha256": "e7349e1e5336282eed3f5a103129db33d3ae4ed500788ee7129e8fc193ac57f6"
|
||||
},
|
||||
"sa/behavior/process_sa_assessment_procedure.arcadia": {
|
||||
"bytes": 559,
|
||||
"sha256": "5c414fbdaabf9f9e402b0441fcacf1cacf4dbbc6c822162f028de35abf59be2d"
|
||||
},
|
||||
"sa/behavior/process_sa_field_procedure.arcadia": {
|
||||
"bytes": 1187,
|
||||
"sha256": "ece846fdf93857e71a9ab0efcbdf64a5c41c71180f62afa3f79077fffb53b8f2"
|
||||
},
|
||||
"sa/behavior/process_sa_response.arcadia": {
|
||||
"bytes": 2569,
|
||||
"sha256": "af7fdda280a917cf626f6e077162d481f9aaad280f8e81330c07d7fe384b1c52"
|
||||
},
|
||||
"sa/behavior/scenario_sa_conversation.arcadia": {
|
||||
"bytes": 1847,
|
||||
"sha256": "01339699ec3ee409418d9bb232542f2bcd9419f1e67b183e77700c56bb9f71d2"
|
||||
},
|
||||
"sa/behavior/scenario_sa_full_scenario.arcadia": {
|
||||
"bytes": 1116,
|
||||
"sha256": "5dce6b00a3a441162e8dee3e23d9ca5ab7bed4a24de669b1fba03664a3086dda"
|
||||
},
|
||||
"sa/behavior/state_machine_sa_monitor.arcadia": {
|
||||
"bytes": 1358,
|
||||
"sha256": "17dbcfa5bbfd10fc8e23a325fc950ce853c219b4aa89c74f96278cbb3f34acc8"
|
||||
},
|
||||
"sa/functions/function_sa_audit_thresholds.arcadia": {
|
||||
"bytes": 280,
|
||||
"sha256": "27f798f78f36e72b38edab3725af2feb0eaa010fd52a60b5c6b6bef57ad3b686"
|
||||
},
|
||||
"sa/functions/function_sa_restore_work.arcadia": {
|
||||
"bytes": 2251,
|
||||
"sha256": "357c6acb80f86b4e8d8f5c98f9f79d140f85fbe09f3406b41b7ac6eba464ec8c"
|
||||
}
|
||||
},
|
||||
"scope": "Every byte and relative filename, including seven companion files, equals the independently declared original bundle plus only the phase-specific activity rename or parent-injected valid comment."
|
||||
}
|
||||
@@ -0,0 +1,156 @@
|
||||
{
|
||||
"status": "PASS",
|
||||
"phase": "external-recovered",
|
||||
"folder": "C:\\ar-save-01a0d717\\.local\\native46\\external-b",
|
||||
"files": {
|
||||
"expected-diagnostics.json": {
|
||||
"bytes": 288,
|
||||
"sha256": "3700393d76b940cfc076bf52861bd7b1f43370f8eabce3594531bd0bf1fc851e"
|
||||
},
|
||||
"model.json": {
|
||||
"bytes": 134520,
|
||||
"sha256": "ef0ef4006c3e09d5db6e1b621256b3f7d6642f3a7b09cc34607cfbcca830c727"
|
||||
},
|
||||
"model.rs": {
|
||||
"bytes": 28776,
|
||||
"sha256": "ddc2d92b0d7699a4cadfbb35ae379f0a68d17f4f5d7df82b4b1afcf8d5425fbe"
|
||||
},
|
||||
"project.arcadia": {
|
||||
"bytes": 1958,
|
||||
"sha256": "b2674e6bf77cfe0f6f0ba79c81d2e96d92f39c02ca2c6266d80e91723bfb9fda"
|
||||
},
|
||||
"README.md": {
|
||||
"bytes": 11137,
|
||||
"sha256": "113cfb1cf38a98b51bff60442d86a35d636a3d80ef206bece7d53d0aae67f2d5"
|
||||
},
|
||||
"traceability.arcadia": {
|
||||
"bytes": 28041,
|
||||
"sha256": "474bd28d955ff7af7722f6e9a23220d816879e3f46202e79a233544b9c593116"
|
||||
},
|
||||
"transition-before.json": {
|
||||
"bytes": 35801,
|
||||
"sha256": "2253e6434f741687e22327c37d520ed15c043bc36025498650bc2366bb6a874d"
|
||||
},
|
||||
"transition-request.json": {
|
||||
"bytes": 4276,
|
||||
"sha256": "43b9a22e5f95ad3bc0ebd2478ead0e14406854abc989ae94ded9367b013d812a"
|
||||
},
|
||||
"evidence/repair-check.md": {
|
||||
"bytes": 1419,
|
||||
"sha256": "f4db17bdca4ecbb1bf0caef01b2da5f1f7f798ab3152b648ce6dd8696a6a68e5"
|
||||
},
|
||||
"oa/capabilities.arcadia": {
|
||||
"bytes": 630,
|
||||
"sha256": "26a3d9b615a3251ff010e0b47127f2d16bc2dcd45ed95967208b0076d725843a"
|
||||
},
|
||||
"oa/model.arcadia": {
|
||||
"bytes": 531,
|
||||
"sha256": "069a5eaaf525089935cc9d73ae7b916866ed78c6534705d75739650ecdea7ada"
|
||||
},
|
||||
"oa/participants.arcadia": {
|
||||
"bytes": 1580,
|
||||
"sha256": "591a75a9ecad280302be4d4ae0171ad616377ed11ead5e233848ca2dc0a71819"
|
||||
},
|
||||
"oa/types.arcadia": {
|
||||
"bytes": 554,
|
||||
"sha256": "f02c391d584674c879f662a418abba3a220f1fee88471ca49322ac9873de628d"
|
||||
},
|
||||
"sa/capabilities.arcadia": {
|
||||
"bytes": 630,
|
||||
"sha256": "81706a0ca9d7db2aa0350888b9c00d853885185db2e6b90557d3d51a11c3d645"
|
||||
},
|
||||
"sa/model.arcadia": {
|
||||
"bytes": 531,
|
||||
"sha256": "805b90262e27090ae7da81a51bcefa49c97fb0b3d3220b4a72323b4c4351c395"
|
||||
},
|
||||
"sa/participants.arcadia": {
|
||||
"bytes": 3604,
|
||||
"sha256": "ca144d6a8f45fe720b5d18c7b59c7671444baa8c37e5ce9117bcba34b3a6aa84"
|
||||
},
|
||||
"sa/types.arcadia": {
|
||||
"bytes": 903,
|
||||
"sha256": "540ddbc2bcd0ccf45298e3ea5660637341aff63ff65fd87ac2f26469d1adc064"
|
||||
},
|
||||
"views/diagram_oa_allocation_view.arcadia": {
|
||||
"bytes": 1786,
|
||||
"sha256": "c45d7467839219d894804c1ef2d22ff4d4a5a84a6a273c526bafd4c1facde624"
|
||||
},
|
||||
"views/diagram_sa_allocation_view.arcadia": {
|
||||
"bytes": 1797,
|
||||
"sha256": "352a3ca745517592b5c9b1239b5770f62f0466a329a91fd03457ef2b53c06ed6"
|
||||
},
|
||||
"views/diagram_sa_capability_view.arcadia": {
|
||||
"bytes": 1286,
|
||||
"sha256": "8f18fcccbcddcf3c1ea0ffe727b5b23b77fc148c5da4fde953abe681e4c20cd2"
|
||||
},
|
||||
"views/diagram_sa_service_view.arcadia": {
|
||||
"bytes": 1960,
|
||||
"sha256": "4c72cb7593d9c4be8d2600b0656a7a3a6ce84c45bb2f3e58a4ee5ae3bf91913c"
|
||||
},
|
||||
"views/diagram_sa_state_view.arcadia": {
|
||||
"bytes": 1576,
|
||||
"sha256": "dd1bea81ac7dc549a53f9b190be6f13052e00ede345bd180444cc31edb892230"
|
||||
},
|
||||
"oa/activities/activity_oa_restore_work.arcadia": {
|
||||
"bytes": 1130,
|
||||
"sha256": "21cbd7176af8fad68453306f2371ff03e127a994b8796cdf044567332de9686f"
|
||||
},
|
||||
"oa/behavior/process_oa_assessment_procedure.arcadia": {
|
||||
"bytes": 550,
|
||||
"sha256": "23cabc213c264a16c8595414db6acb09248c1cef9cd699f1b0316e5bb82c062a"
|
||||
},
|
||||
"oa/behavior/process_oa_field_procedure.arcadia": {
|
||||
"bytes": 1178,
|
||||
"sha256": "9c52086759b7344b4809ceb8d372f65647b16fc24153a03b887faa378c37fe96"
|
||||
},
|
||||
"oa/behavior/process_oa_response.arcadia": {
|
||||
"bytes": 2560,
|
||||
"sha256": "675798bd19e6b40d03e7076b0e59b110cdaaab7b6d16c47c3ac80fa960072e84"
|
||||
},
|
||||
"oa/behavior/scenario_oa_conversation.arcadia": {
|
||||
"bytes": 1515,
|
||||
"sha256": "e217e5394a0771dc16206ed9437a231da27905d2f19be64b3f48281c0a32fb6b"
|
||||
},
|
||||
"oa/behavior/scenario_oa_full_scenario.arcadia": {
|
||||
"bytes": 1121,
|
||||
"sha256": "c5a285f2d7c61bd2a136107f267fbf9cddb1cba3f63ff36a6f53f7ab98f33df5"
|
||||
},
|
||||
"oa/behavior/state_machine_oa_monitor.arcadia": {
|
||||
"bytes": 1358,
|
||||
"sha256": "e7349e1e5336282eed3f5a103129db33d3ae4ed500788ee7129e8fc193ac57f6"
|
||||
},
|
||||
"sa/behavior/process_sa_assessment_procedure.arcadia": {
|
||||
"bytes": 559,
|
||||
"sha256": "5c414fbdaabf9f9e402b0441fcacf1cacf4dbbc6c822162f028de35abf59be2d"
|
||||
},
|
||||
"sa/behavior/process_sa_field_procedure.arcadia": {
|
||||
"bytes": 1187,
|
||||
"sha256": "ece846fdf93857e71a9ab0efcbdf64a5c41c71180f62afa3f79077fffb53b8f2"
|
||||
},
|
||||
"sa/behavior/process_sa_response.arcadia": {
|
||||
"bytes": 2569,
|
||||
"sha256": "af7fdda280a917cf626f6e077162d481f9aaad280f8e81330c07d7fe384b1c52"
|
||||
},
|
||||
"sa/behavior/scenario_sa_conversation.arcadia": {
|
||||
"bytes": 1847,
|
||||
"sha256": "01339699ec3ee409418d9bb232542f2bcd9419f1e67b183e77700c56bb9f71d2"
|
||||
},
|
||||
"sa/behavior/scenario_sa_full_scenario.arcadia": {
|
||||
"bytes": 1116,
|
||||
"sha256": "5dce6b00a3a441162e8dee3e23d9ca5ab7bed4a24de669b1fba03664a3086dda"
|
||||
},
|
||||
"sa/behavior/state_machine_sa_monitor.arcadia": {
|
||||
"bytes": 1358,
|
||||
"sha256": "17dbcfa5bbfd10fc8e23a325fc950ce853c219b4aa89c74f96278cbb3f34acc8"
|
||||
},
|
||||
"sa/functions/function_sa_audit_thresholds.arcadia": {
|
||||
"bytes": 280,
|
||||
"sha256": "27f798f78f36e72b38edab3725af2feb0eaa010fd52a60b5c6b6bef57ad3b686"
|
||||
},
|
||||
"sa/functions/function_sa_restore_work.arcadia": {
|
||||
"bytes": 2251,
|
||||
"sha256": "357c6acb80f86b4e8d8f5c98f9f79d140f85fbe09f3406b41b7ac6eba464ec8c"
|
||||
}
|
||||
},
|
||||
"scope": "Every byte and relative filename, including seven companion files, equals the independently declared original bundle plus only the phase-specific activity rename or parent-injected valid comment."
|
||||
}
|
||||
@@ -0,0 +1,156 @@
|
||||
{
|
||||
"status": "PASS",
|
||||
"phase": "external-refused",
|
||||
"folder": "C:\\ar-save-01a0d717\\.local\\native46\\external-b",
|
||||
"files": {
|
||||
"expected-diagnostics.json": {
|
||||
"bytes": 288,
|
||||
"sha256": "3700393d76b940cfc076bf52861bd7b1f43370f8eabce3594531bd0bf1fc851e"
|
||||
},
|
||||
"model.json": {
|
||||
"bytes": 134520,
|
||||
"sha256": "ef0ef4006c3e09d5db6e1b621256b3f7d6642f3a7b09cc34607cfbcca830c727"
|
||||
},
|
||||
"model.rs": {
|
||||
"bytes": 28776,
|
||||
"sha256": "ddc2d92b0d7699a4cadfbb35ae379f0a68d17f4f5d7df82b4b1afcf8d5425fbe"
|
||||
},
|
||||
"project.arcadia": {
|
||||
"bytes": 1958,
|
||||
"sha256": "b2674e6bf77cfe0f6f0ba79c81d2e96d92f39c02ca2c6266d80e91723bfb9fda"
|
||||
},
|
||||
"README.md": {
|
||||
"bytes": 11137,
|
||||
"sha256": "113cfb1cf38a98b51bff60442d86a35d636a3d80ef206bece7d53d0aae67f2d5"
|
||||
},
|
||||
"traceability.arcadia": {
|
||||
"bytes": 28041,
|
||||
"sha256": "474bd28d955ff7af7722f6e9a23220d816879e3f46202e79a233544b9c593116"
|
||||
},
|
||||
"transition-before.json": {
|
||||
"bytes": 35801,
|
||||
"sha256": "2253e6434f741687e22327c37d520ed15c043bc36025498650bc2366bb6a874d"
|
||||
},
|
||||
"transition-request.json": {
|
||||
"bytes": 4276,
|
||||
"sha256": "43b9a22e5f95ad3bc0ebd2478ead0e14406854abc989ae94ded9367b013d812a"
|
||||
},
|
||||
"evidence/repair-check.md": {
|
||||
"bytes": 1419,
|
||||
"sha256": "f4db17bdca4ecbb1bf0caef01b2da5f1f7f798ab3152b648ce6dd8696a6a68e5"
|
||||
},
|
||||
"oa/capabilities.arcadia": {
|
||||
"bytes": 630,
|
||||
"sha256": "26a3d9b615a3251ff010e0b47127f2d16bc2dcd45ed95967208b0076d725843a"
|
||||
},
|
||||
"oa/model.arcadia": {
|
||||
"bytes": 531,
|
||||
"sha256": "069a5eaaf525089935cc9d73ae7b916866ed78c6534705d75739650ecdea7ada"
|
||||
},
|
||||
"oa/participants.arcadia": {
|
||||
"bytes": 1580,
|
||||
"sha256": "591a75a9ecad280302be4d4ae0171ad616377ed11ead5e233848ca2dc0a71819"
|
||||
},
|
||||
"oa/types.arcadia": {
|
||||
"bytes": 554,
|
||||
"sha256": "f02c391d584674c879f662a418abba3a220f1fee88471ca49322ac9873de628d"
|
||||
},
|
||||
"sa/capabilities.arcadia": {
|
||||
"bytes": 630,
|
||||
"sha256": "81706a0ca9d7db2aa0350888b9c00d853885185db2e6b90557d3d51a11c3d645"
|
||||
},
|
||||
"sa/model.arcadia": {
|
||||
"bytes": 531,
|
||||
"sha256": "805b90262e27090ae7da81a51bcefa49c97fb0b3d3220b4a72323b4c4351c395"
|
||||
},
|
||||
"sa/participants.arcadia": {
|
||||
"bytes": 3604,
|
||||
"sha256": "ca144d6a8f45fe720b5d18c7b59c7671444baa8c37e5ce9117bcba34b3a6aa84"
|
||||
},
|
||||
"sa/types.arcadia": {
|
||||
"bytes": 903,
|
||||
"sha256": "540ddbc2bcd0ccf45298e3ea5660637341aff63ff65fd87ac2f26469d1adc064"
|
||||
},
|
||||
"views/diagram_oa_allocation_view.arcadia": {
|
||||
"bytes": 1786,
|
||||
"sha256": "c45d7467839219d894804c1ef2d22ff4d4a5a84a6a273c526bafd4c1facde624"
|
||||
},
|
||||
"views/diagram_sa_allocation_view.arcadia": {
|
||||
"bytes": 1797,
|
||||
"sha256": "352a3ca745517592b5c9b1239b5770f62f0466a329a91fd03457ef2b53c06ed6"
|
||||
},
|
||||
"views/diagram_sa_capability_view.arcadia": {
|
||||
"bytes": 1286,
|
||||
"sha256": "8f18fcccbcddcf3c1ea0ffe727b5b23b77fc148c5da4fde953abe681e4c20cd2"
|
||||
},
|
||||
"views/diagram_sa_service_view.arcadia": {
|
||||
"bytes": 1960,
|
||||
"sha256": "4c72cb7593d9c4be8d2600b0656a7a3a6ce84c45bb2f3e58a4ee5ae3bf91913c"
|
||||
},
|
||||
"views/diagram_sa_state_view.arcadia": {
|
||||
"bytes": 1576,
|
||||
"sha256": "dd1bea81ac7dc549a53f9b190be6f13052e00ede345bd180444cc31edb892230"
|
||||
},
|
||||
"oa/activities/activity_oa_restore_work.arcadia": {
|
||||
"bytes": 1165,
|
||||
"sha256": "fd5d7f432badc619b04aea34d69eb36eb3ea7204d044ed290458a66ad64d94de"
|
||||
},
|
||||
"oa/behavior/process_oa_assessment_procedure.arcadia": {
|
||||
"bytes": 550,
|
||||
"sha256": "23cabc213c264a16c8595414db6acb09248c1cef9cd699f1b0316e5bb82c062a"
|
||||
},
|
||||
"oa/behavior/process_oa_field_procedure.arcadia": {
|
||||
"bytes": 1178,
|
||||
"sha256": "9c52086759b7344b4809ceb8d372f65647b16fc24153a03b887faa378c37fe96"
|
||||
},
|
||||
"oa/behavior/process_oa_response.arcadia": {
|
||||
"bytes": 2560,
|
||||
"sha256": "675798bd19e6b40d03e7076b0e59b110cdaaab7b6d16c47c3ac80fa960072e84"
|
||||
},
|
||||
"oa/behavior/scenario_oa_conversation.arcadia": {
|
||||
"bytes": 1515,
|
||||
"sha256": "e217e5394a0771dc16206ed9437a231da27905d2f19be64b3f48281c0a32fb6b"
|
||||
},
|
||||
"oa/behavior/scenario_oa_full_scenario.arcadia": {
|
||||
"bytes": 1121,
|
||||
"sha256": "c5a285f2d7c61bd2a136107f267fbf9cddb1cba3f63ff36a6f53f7ab98f33df5"
|
||||
},
|
||||
"oa/behavior/state_machine_oa_monitor.arcadia": {
|
||||
"bytes": 1358,
|
||||
"sha256": "e7349e1e5336282eed3f5a103129db33d3ae4ed500788ee7129e8fc193ac57f6"
|
||||
},
|
||||
"sa/behavior/process_sa_assessment_procedure.arcadia": {
|
||||
"bytes": 559,
|
||||
"sha256": "5c414fbdaabf9f9e402b0441fcacf1cacf4dbbc6c822162f028de35abf59be2d"
|
||||
},
|
||||
"sa/behavior/process_sa_field_procedure.arcadia": {
|
||||
"bytes": 1187,
|
||||
"sha256": "ece846fdf93857e71a9ab0efcbdf64a5c41c71180f62afa3f79077fffb53b8f2"
|
||||
},
|
||||
"sa/behavior/process_sa_response.arcadia": {
|
||||
"bytes": 2569,
|
||||
"sha256": "af7fdda280a917cf626f6e077162d481f9aaad280f8e81330c07d7fe384b1c52"
|
||||
},
|
||||
"sa/behavior/scenario_sa_conversation.arcadia": {
|
||||
"bytes": 1847,
|
||||
"sha256": "01339699ec3ee409418d9bb232542f2bcd9419f1e67b183e77700c56bb9f71d2"
|
||||
},
|
||||
"sa/behavior/scenario_sa_full_scenario.arcadia": {
|
||||
"bytes": 1116,
|
||||
"sha256": "5dce6b00a3a441162e8dee3e23d9ca5ab7bed4a24de669b1fba03664a3086dda"
|
||||
},
|
||||
"sa/behavior/state_machine_sa_monitor.arcadia": {
|
||||
"bytes": 1358,
|
||||
"sha256": "17dbcfa5bbfd10fc8e23a325fc950ce853c219b4aa89c74f96278cbb3f34acc8"
|
||||
},
|
||||
"sa/functions/function_sa_audit_thresholds.arcadia": {
|
||||
"bytes": 280,
|
||||
"sha256": "27f798f78f36e72b38edab3725af2feb0eaa010fd52a60b5c6b6bef57ad3b686"
|
||||
},
|
||||
"sa/functions/function_sa_restore_work.arcadia": {
|
||||
"bytes": 2251,
|
||||
"sha256": "357c6acb80f86b4e8d8f5c98f9f79d140f85fbe09f3406b41b7ac6eba464ec8c"
|
||||
}
|
||||
},
|
||||
"scope": "Every byte and relative filename, including seven companion files, equals the independently declared original bundle plus only the phase-specific activity rename or parent-injected valid comment."
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"source": "0e83157e09d52e6152df91208e41693b62da2d46",
|
||||
"start": "2026-10-02T01:34:07.329232+00:00",
|
||||
"binary_sha256": "e9cce9355525ecdc59bfae12608b1e0272167acef5a86b25368ef547e08886ff",
|
||||
"runtime_sha256": "f45604a12e8bcd839fd86f667c1be1cc7c4f9da2b3c69ff381ac708f0e1ae7d4",
|
||||
"cwd": "C:\\ar-save-01a0d717\\.local\\native46\\working",
|
||||
"path": "C:\\Windows\\System32;C:\\Windows",
|
||||
"pid": 10012,
|
||||
"exit_code": 0,
|
||||
"finished": "2026-10-02T01:44:46.909456+00:00",
|
||||
"stdout_bytes": 0,
|
||||
"stderr_bytes": 0,
|
||||
"binary_unchanged": true,
|
||||
"runtime_unchanged": true
|
||||
}
|
||||
@@ -0,0 +1,156 @@
|
||||
{
|
||||
"status": "PASS",
|
||||
"phase": "inject",
|
||||
"folder": "C:\\ar-save-01a0d717\\.local\\native46\\external-b",
|
||||
"files": {
|
||||
"expected-diagnostics.json": {
|
||||
"bytes": 288,
|
||||
"sha256": "3700393d76b940cfc076bf52861bd7b1f43370f8eabce3594531bd0bf1fc851e"
|
||||
},
|
||||
"model.json": {
|
||||
"bytes": 134520,
|
||||
"sha256": "ef0ef4006c3e09d5db6e1b621256b3f7d6642f3a7b09cc34607cfbcca830c727"
|
||||
},
|
||||
"model.rs": {
|
||||
"bytes": 28776,
|
||||
"sha256": "ddc2d92b0d7699a4cadfbb35ae379f0a68d17f4f5d7df82b4b1afcf8d5425fbe"
|
||||
},
|
||||
"project.arcadia": {
|
||||
"bytes": 1958,
|
||||
"sha256": "b2674e6bf77cfe0f6f0ba79c81d2e96d92f39c02ca2c6266d80e91723bfb9fda"
|
||||
},
|
||||
"README.md": {
|
||||
"bytes": 11137,
|
||||
"sha256": "113cfb1cf38a98b51bff60442d86a35d636a3d80ef206bece7d53d0aae67f2d5"
|
||||
},
|
||||
"traceability.arcadia": {
|
||||
"bytes": 28041,
|
||||
"sha256": "474bd28d955ff7af7722f6e9a23220d816879e3f46202e79a233544b9c593116"
|
||||
},
|
||||
"transition-before.json": {
|
||||
"bytes": 35801,
|
||||
"sha256": "2253e6434f741687e22327c37d520ed15c043bc36025498650bc2366bb6a874d"
|
||||
},
|
||||
"transition-request.json": {
|
||||
"bytes": 4276,
|
||||
"sha256": "43b9a22e5f95ad3bc0ebd2478ead0e14406854abc989ae94ded9367b013d812a"
|
||||
},
|
||||
"evidence/repair-check.md": {
|
||||
"bytes": 1419,
|
||||
"sha256": "f4db17bdca4ecbb1bf0caef01b2da5f1f7f798ab3152b648ce6dd8696a6a68e5"
|
||||
},
|
||||
"oa/capabilities.arcadia": {
|
||||
"bytes": 630,
|
||||
"sha256": "26a3d9b615a3251ff010e0b47127f2d16bc2dcd45ed95967208b0076d725843a"
|
||||
},
|
||||
"oa/model.arcadia": {
|
||||
"bytes": 531,
|
||||
"sha256": "069a5eaaf525089935cc9d73ae7b916866ed78c6534705d75739650ecdea7ada"
|
||||
},
|
||||
"oa/participants.arcadia": {
|
||||
"bytes": 1580,
|
||||
"sha256": "591a75a9ecad280302be4d4ae0171ad616377ed11ead5e233848ca2dc0a71819"
|
||||
},
|
||||
"oa/types.arcadia": {
|
||||
"bytes": 554,
|
||||
"sha256": "f02c391d584674c879f662a418abba3a220f1fee88471ca49322ac9873de628d"
|
||||
},
|
||||
"sa/capabilities.arcadia": {
|
||||
"bytes": 630,
|
||||
"sha256": "81706a0ca9d7db2aa0350888b9c00d853885185db2e6b90557d3d51a11c3d645"
|
||||
},
|
||||
"sa/model.arcadia": {
|
||||
"bytes": 531,
|
||||
"sha256": "805b90262e27090ae7da81a51bcefa49c97fb0b3d3220b4a72323b4c4351c395"
|
||||
},
|
||||
"sa/participants.arcadia": {
|
||||
"bytes": 3604,
|
||||
"sha256": "ca144d6a8f45fe720b5d18c7b59c7671444baa8c37e5ce9117bcba34b3a6aa84"
|
||||
},
|
||||
"sa/types.arcadia": {
|
||||
"bytes": 903,
|
||||
"sha256": "540ddbc2bcd0ccf45298e3ea5660637341aff63ff65fd87ac2f26469d1adc064"
|
||||
},
|
||||
"views/diagram_oa_allocation_view.arcadia": {
|
||||
"bytes": 1786,
|
||||
"sha256": "c45d7467839219d894804c1ef2d22ff4d4a5a84a6a273c526bafd4c1facde624"
|
||||
},
|
||||
"views/diagram_sa_allocation_view.arcadia": {
|
||||
"bytes": 1797,
|
||||
"sha256": "352a3ca745517592b5c9b1239b5770f62f0466a329a91fd03457ef2b53c06ed6"
|
||||
},
|
||||
"views/diagram_sa_capability_view.arcadia": {
|
||||
"bytes": 1286,
|
||||
"sha256": "8f18fcccbcddcf3c1ea0ffe727b5b23b77fc148c5da4fde953abe681e4c20cd2"
|
||||
},
|
||||
"views/diagram_sa_service_view.arcadia": {
|
||||
"bytes": 1960,
|
||||
"sha256": "4c72cb7593d9c4be8d2600b0656a7a3a6ce84c45bb2f3e58a4ee5ae3bf91913c"
|
||||
},
|
||||
"views/diagram_sa_state_view.arcadia": {
|
||||
"bytes": 1576,
|
||||
"sha256": "dd1bea81ac7dc549a53f9b190be6f13052e00ede345bd180444cc31edb892230"
|
||||
},
|
||||
"oa/activities/activity_oa_restore_work.arcadia": {
|
||||
"bytes": 1165,
|
||||
"sha256": "fd5d7f432badc619b04aea34d69eb36eb3ea7204d044ed290458a66ad64d94de"
|
||||
},
|
||||
"oa/behavior/process_oa_assessment_procedure.arcadia": {
|
||||
"bytes": 550,
|
||||
"sha256": "23cabc213c264a16c8595414db6acb09248c1cef9cd699f1b0316e5bb82c062a"
|
||||
},
|
||||
"oa/behavior/process_oa_field_procedure.arcadia": {
|
||||
"bytes": 1178,
|
||||
"sha256": "9c52086759b7344b4809ceb8d372f65647b16fc24153a03b887faa378c37fe96"
|
||||
},
|
||||
"oa/behavior/process_oa_response.arcadia": {
|
||||
"bytes": 2560,
|
||||
"sha256": "675798bd19e6b40d03e7076b0e59b110cdaaab7b6d16c47c3ac80fa960072e84"
|
||||
},
|
||||
"oa/behavior/scenario_oa_conversation.arcadia": {
|
||||
"bytes": 1515,
|
||||
"sha256": "e217e5394a0771dc16206ed9437a231da27905d2f19be64b3f48281c0a32fb6b"
|
||||
},
|
||||
"oa/behavior/scenario_oa_full_scenario.arcadia": {
|
||||
"bytes": 1121,
|
||||
"sha256": "c5a285f2d7c61bd2a136107f267fbf9cddb1cba3f63ff36a6f53f7ab98f33df5"
|
||||
},
|
||||
"oa/behavior/state_machine_oa_monitor.arcadia": {
|
||||
"bytes": 1358,
|
||||
"sha256": "e7349e1e5336282eed3f5a103129db33d3ae4ed500788ee7129e8fc193ac57f6"
|
||||
},
|
||||
"sa/behavior/process_sa_assessment_procedure.arcadia": {
|
||||
"bytes": 559,
|
||||
"sha256": "5c414fbdaabf9f9e402b0441fcacf1cacf4dbbc6c822162f028de35abf59be2d"
|
||||
},
|
||||
"sa/behavior/process_sa_field_procedure.arcadia": {
|
||||
"bytes": 1187,
|
||||
"sha256": "ece846fdf93857e71a9ab0efcbdf64a5c41c71180f62afa3f79077fffb53b8f2"
|
||||
},
|
||||
"sa/behavior/process_sa_response.arcadia": {
|
||||
"bytes": 2569,
|
||||
"sha256": "af7fdda280a917cf626f6e077162d481f9aaad280f8e81330c07d7fe384b1c52"
|
||||
},
|
||||
"sa/behavior/scenario_sa_conversation.arcadia": {
|
||||
"bytes": 1847,
|
||||
"sha256": "01339699ec3ee409418d9bb232542f2bcd9419f1e67b183e77700c56bb9f71d2"
|
||||
},
|
||||
"sa/behavior/scenario_sa_full_scenario.arcadia": {
|
||||
"bytes": 1116,
|
||||
"sha256": "5dce6b00a3a441162e8dee3e23d9ca5ab7bed4a24de669b1fba03664a3086dda"
|
||||
},
|
||||
"sa/behavior/state_machine_sa_monitor.arcadia": {
|
||||
"bytes": 1358,
|
||||
"sha256": "17dbcfa5bbfd10fc8e23a325fc950ce853c219b4aa89c74f96278cbb3f34acc8"
|
||||
},
|
||||
"sa/functions/function_sa_audit_thresholds.arcadia": {
|
||||
"bytes": 280,
|
||||
"sha256": "27f798f78f36e72b38edab3725af2feb0eaa010fd52a60b5c6b6bef57ad3b686"
|
||||
},
|
||||
"sa/functions/function_sa_restore_work.arcadia": {
|
||||
"bytes": 2251,
|
||||
"sha256": "357c6acb80f86b4e8d8f5c98f9f79d140f85fbe09f3406b41b7ac6eba464ec8c"
|
||||
}
|
||||
},
|
||||
"scope": "Every byte and relative filename, including seven companion files, equals the independently declared original bundle plus only the phase-specific activity rename or parent-injected valid comment."
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
"""Decode full pristine/saved source bundles with the exact packaged server."""
|
||||
from pathlib import Path
|
||||
import copy, hashlib, http.client, json, os, socket, subprocess, time
|
||||
root=Path(__file__).resolve().parent
|
||||
proof=json.loads(Path('C:/ar-compact-01a0d717/.local/package39/extraction-check.json').read_text(encoding='utf-8'))
|
||||
bundle=Path(proof['bundle'])
|
||||
run=root/'native-model-oracle';run.mkdir(exist_ok=False)
|
||||
exe=bundle/'arcadia-server.exe'
|
||||
assert hashlib.sha256(exe.read_bytes()).hexdigest()==proof['sha256']['arcadia-server.exe']
|
||||
assert hashlib.sha256((bundle/'libunwind.dll').read_bytes()).hexdigest()==proof['sha256']['libunwind.dll']
|
||||
env={k:os.environ[k] for k in ['SystemRoot','WINDIR','TEMP','TMP','USERPROFILE','LOCALAPPDATA','APPDATA','COMSPEC','OS','PROCESSOR_ARCHITECTURE'] if k in os.environ}
|
||||
env['PATH']=str(Path(os.environ['SystemRoot'])/'System32')+';'+os.environ['SystemRoot']
|
||||
with socket.socket() as s:s.bind(('127.0.0.1',0));port=s.getsockname()[1]
|
||||
cmd=[str(exe),'--bind',f'127.0.0.1:{port}','--data-dir',str(run/'store')]
|
||||
report={'status':'RUNNING','command':cmd,'path':env['PATH'],'server_sha256':proof['sha256']['arcadia-server.exe'],'runtime_sha256':proof['sha256']['libunwind.dll']}
|
||||
counter=0
|
||||
def request(method,path,body=None):
|
||||
global counter
|
||||
counter+=1
|
||||
raw=b'' if body is None else json.dumps(body,ensure_ascii=False).encode('utf-8')
|
||||
(run/f'{counter:02d}.request.json').write_bytes(raw)
|
||||
c=http.client.HTTPConnection('127.0.0.1',port,timeout=10)
|
||||
c.request(method,path,body=raw or None,headers={'Content-Type':'application/json','Connection':'close'})
|
||||
r=c.getresponse();data=r.read();status=r.status
|
||||
(run/f'{counter:02d}.response.json').write_bytes(data);c.close()
|
||||
assert status in (200,201),(status,data)
|
||||
return json.loads(data)
|
||||
with (run/'stdout.log').open('xb') as out,(run/'stderr.log').open('xb') as err:
|
||||
child=subprocess.Popen(cmd,cwd=run,env=env,stdout=out,stderr=err,creationflags=subprocess.CREATE_NO_WINDOW)
|
||||
report['pid']=child.pid
|
||||
try:
|
||||
for _ in range(100):
|
||||
assert child.poll() is None
|
||||
try:
|
||||
with socket.create_connection(('127.0.0.1',port),timeout=.1):break
|
||||
except OSError:time.sleep(.1)
|
||||
request('GET','/health/ready')
|
||||
models=[]
|
||||
source_records=[]
|
||||
for folder,entry in [(bundle/'examples/release1','project.arcadia'),(root/'fresh-c','project.arcadia')]:
|
||||
files={p.relative_to(folder).as_posix():p.read_bytes().decode('utf-8') for p in folder.rglob('*.arcadia')}
|
||||
assert len(files)==30
|
||||
source={'entry':entry,'files':files}
|
||||
imported=request('POST','/api/v1/projects/import-source-project',source)
|
||||
envelope=request('GET','/api/v1/projects/'+imported['resource_id'])
|
||||
assert envelope['source_project']==source
|
||||
models.append(envelope['model']);source_records.append(imported['resource_id'])
|
||||
expected=copy.deepcopy(models[0])
|
||||
target='61f7bbfb-74a4-5540-9182-2583dfb27a49'
|
||||
assert expected['elements'][target]['name']=='Assess pressure alarm'
|
||||
expected['elements'][target]['name']='Assess pressure alarm QA46'
|
||||
assert models[1]==expected,'Complete saved Project must have only declared Activity-name delta'
|
||||
report.update({'status':'PASS','resource_ids':source_records,'source_files_each':30,'model_delta':{'id':target,'field':'name','before':'Assess pressure alarm','after':'Assess pressure alarm QA46'},'complete_project_equal_to_declared_delta':True,'source_preserved_exactly':True})
|
||||
finally:
|
||||
child.terminate();report['server_exit']=child.wait(timeout=15)
|
||||
report['shutdown_scope']='Owned TerminateProcess after acknowledged import/read; no graceful shutdown claim.'
|
||||
(run/'result.json').write_text(json.dumps(report,indent=2)+'\n',encoding='utf-8')
|
||||
print(json.dumps(report,indent=2))
|
||||
@@ -0,0 +1 @@
|
||||
{"status":"ok"}
|
||||
@@ -0,0 +1 @@
|
||||
{"elements":94,"migration":null,"model_id":"2786d72f-5763-5f33-a57f-2773a4ca1a6c","name":"Restore safe water pressure — release 1 walkthrough","relations":62,"resource_id":"aaa8f7e3-8b4c-4ff3-b53b-556826ea10cf","revision":1,"schema_version":7}
|
||||
@@ -0,0 +1 @@
|
||||
{"elements":94,"migration":null,"model_id":"2786d72f-5763-5f33-a57f-2773a4ca1a6c","name":"Restore safe water pressure — release 1 walkthrough","relations":62,"resource_id":"9d5f5bdf-2483-4e7b-a92e-2384ea35b359","revision":1,"schema_version":7}
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"status": "PASS",
|
||||
"command": [
|
||||
"C:\\ar-compact-01a0d717\\.local\\package39\\extracted\\ArcadiaStudio-0.2.0-preview.compact-help.20261001-x86_64-pc-windows-gnullvm\\arcadia-server.exe",
|
||||
"--bind",
|
||||
"127.0.0.1:55938",
|
||||
"--data-dir",
|
||||
"C:\\ar-save-01a0d717\\.local\\native46\\native-model-oracle\\store"
|
||||
],
|
||||
"path": "C:\\Windows\\System32;C:\\Windows",
|
||||
"server_sha256": "6cebacc117e46fdab023c6402a5cebd6929fb55993ae8ff6b89cd1c6c1170237",
|
||||
"runtime_sha256": "f45604a12e8bcd839fd86f667c1be1cc7c4f9da2b3c69ff381ac708f0e1ae7d4",
|
||||
"pid": 8844,
|
||||
"resource_ids": [
|
||||
"aaa8f7e3-8b4c-4ff3-b53b-556826ea10cf",
|
||||
"9d5f5bdf-2483-4e7b-a92e-2384ea35b359"
|
||||
],
|
||||
"source_files_each": 30,
|
||||
"model_delta": {
|
||||
"id": "61f7bbfb-74a4-5540-9182-2583dfb27a49",
|
||||
"field": "name",
|
||||
"before": "Assess pressure alarm",
|
||||
"after": "Assess pressure alarm QA46"
|
||||
},
|
||||
"complete_project_equal_to_declared_delta": true,
|
||||
"source_preserved_exactly": true,
|
||||
"server_exit": 1,
|
||||
"shutdown_scope": "Owned TerminateProcess after acknowledged import/read; no graceful shutdown claim."
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
arcadia-server 0.2.0 listening on 127.0.0.1:55938; data C:\ar-save-01a0d717\.local\native46\native-model-oracle\store
|
||||
@@ -0,0 +1,43 @@
|
||||
from pathlib import Path
|
||||
import hashlib,json,sys
|
||||
run=Path(__file__).resolve().parent
|
||||
root=run.parents[1]
|
||||
record=json.loads((run/'baseline.json').read_text(encoding='utf-8'))
|
||||
source=root/'examples/release1'
|
||||
dependency=record['external_dependency']
|
||||
phase=sys.argv[1]
|
||||
assert phase in ['collision','saved-a','saved-c','external-before','inject','external-refused','restore','external-recovered']
|
||||
sha=lambda b:hashlib.sha256(b).hexdigest()
|
||||
original={r:(source/r).read_bytes() for r in record['baseline']}
|
||||
assert {r:{'bytes':len(b),'sha256':sha(b)} for r,b in original.items()}==record['baseline']
|
||||
def check(folder,expected):
|
||||
actual={f.relative_to(folder).as_posix():f.read_bytes() for f in folder.rglob('*') if f.is_file()}
|
||||
assert actual.keys()==expected.keys(),(phase,'file set', sorted(actual.keys()^expected.keys()))
|
||||
assert all(actual[r]==b for r,b in expected.items()),(phase,'changed files',[r for r,b in expected.items() if actual[r]!=b])
|
||||
return {r:{'bytes':len(b),'sha256':sha(b)} for r,b in actual.items()}
|
||||
if phase in ['collision','saved-a','saved-c']:
|
||||
expected=original.copy()
|
||||
if phase!='collision':
|
||||
old=b'oa_activity oa_assess "Assess pressure alarm" id "61f7bbfb-74a4-5540-9182-2583dfb27a49"'
|
||||
new=b'oa_activity oa_assess "Assess pressure alarm QA46" id "61f7bbfb-74a4-5540-9182-2583dfb27a49"'
|
||||
assert expected[dependency].count(old)==1
|
||||
expected[dependency]=expected[dependency].replace(old,new)
|
||||
folder=run/('fresh-c' if phase=='saved-c' else 'collision-a')
|
||||
assert not (run/'collision-a/collision-copy.arcadia').exists()
|
||||
files=check(folder,expected)
|
||||
else:
|
||||
folder=run/'external-b'
|
||||
changed=original.copy();changed[dependency]+=record['external_comment'].encode('utf-8')
|
||||
if phase=='inject':
|
||||
check(folder,original)
|
||||
(folder/dependency).write_bytes(changed[dependency])
|
||||
expected=changed
|
||||
elif phase=='restore':
|
||||
check(folder,changed)
|
||||
(folder/dependency).write_bytes(original[dependency])
|
||||
expected=original
|
||||
else: expected=changed if phase=='external-refused' else original
|
||||
files=check(folder,expected)
|
||||
result={'status':'PASS','phase':phase,'folder':str(folder),'files':files,'scope':'Every byte and relative filename, including seven companion files, equals the independently declared original bundle plus only the phase-specific activity rename or parent-injected valid comment.'}
|
||||
with (run/(phase+'-oracle.json')).open('x',encoding='utf-8') as f:json.dump(result,f,indent=2)
|
||||
print(json.dumps({'status':result['status'],'phase':phase,'files':len(files)},indent=2))
|
||||
@@ -0,0 +1,53 @@
|
||||
# Bounded native verification plan for #46
|
||||
|
||||
Prepared by `/root/ux_critique` against private code commit `0e83157e09d52e6152df91208e41693b62da2d46`. Read its `app.rs` presentation-only diff, `app/save_as_tests.rs` regressions, `harness/save-as-diagnostics-20261001.md`, the source integration contract and UI review criteria. This is a plan, not executed native evidence. No GUI input, launch, compilation, source edit or fixture creation was performed during preparation. #38 retains exclusive GUI ownership until the parent releases it.
|
||||
|
||||
## Intended distinction
|
||||
|
||||
The same-root/new-entry case must still refuse existing included files. Only its diagnosis and recovery guidance change. Established observed-file conflicts must continue to say files changed outside Arcadia Studio. The native check must verify these two messages using real filesystem conditions, then exercise legitimate recovery without bypassing either guard.
|
||||
|
||||
## Parent preparation and coordination
|
||||
|
||||
- Supply exact source commit, executable/DLL hashes, prepared paths and readiness after the frozen build. Parent launches with watcher; reviewer discovers the unique returned native window. Preserve stdout/stderr/exit separately.
|
||||
- Prepare two complete, separate copies of the water-pressure multi-file example: **collision/recovery copy A**, and **external-change copy B**. Record full relative-path inventories and SHA-256 baselines. Originals and packaged examples remain read-only.
|
||||
- Reserve a non-existing entry beside A's current `project.arcadia` for the collision attempt, e.g. `collision-copy.arcadia`. Record that it is absent. Do not create it.
|
||||
- Prepare **fresh destination C** with zero `.arcadia` source files. If reopen completeness is desired, copy only the tutorial/evidence companion files first and distinguish these parent copies from files written by the app. Use a new entry path in C for successful Save As.
|
||||
- For B's later genuine external change, identify the existing dependency `oa/activities/activity_oa_restore_work.arcadia`. Preserve its exact bytes. After the reviewer confirms B is loaded, parent appends one valid source comment (for example `// native #46 external-edit probe`) without changing semantic facts, records its resulting hash, then tells reviewer the edit is complete. Do not edit while a Save is running. Restore exact original bytes only when the reviewer requests recovery.
|
||||
- Reviewer writes screenshots and a report under the parent-selected evidence directory; parent owns independent full-file comparisons. No whole-model equality or exit-code claim comes from UI counts alone.
|
||||
|
||||
## Minimal actual UI sequence
|
||||
|
||||
### 1. Same-folder/new-entry collision and dirty-state preservation
|
||||
|
||||
1. Pointer Open A's exact `project.arcadia`. Verify OA Allocation, original Assess activity, saved state, 94 objects and 62 links. Record actual model-check count rather than using it as a model-equality oracle.
|
||||
2. Select `Assess pressure alarm`; change only Name to the predeclared **`Assess pressure alarm QA46`** and click Apply. This one semantic edit is justified because a clean model cannot show dirty-state recovery. Do not create raw-source drafts or any other authored change.
|
||||
3. At normal size, Save As to the reserved new entry in A's same directory. Expect refusal, retained QA46 name/selection, unsaved state and original active entry. Capture the diagnostic and full tooltip/detail if the status is shortened.
|
||||
4. Inspect the retained diagnostic at the minimum 1100x700 client size. The visible summary must identify an existing protected destination, without falsely alleging an external edit; the full message must expose the conflicting include and the actionable alternatives. Do not dismiss the error by triggering an unrelated command before this inspection. If resizing clears the status or makes it unreadable, record that observed limitation.
|
||||
|
||||
**User-visible oracle:** `Source destination files already exist: ... Existing files are protected.` with `Choose a fresh directory for Save As, or use Save All to update the open project's current entry.` It must not say `changed outside`. A visible failure and reachable recovery detail are required, not merely the presence of a string in source code.
|
||||
|
||||
**Parent disk oracle before recovery:** all A source and companion files remain baseline-identical; the requested new entry remains absent. Reviewer pauses Save actions until parent confirms this checkpoint. Never overwrite the protected destination to obtain a passing result.
|
||||
|
||||
### 2. Legitimate Save All recovery and fresh-folder Save As
|
||||
|
||||
1. Click Save all in the still-open A document. Expect `All source files saved`, saved state, and exact QA46 name. This establishes recovery followed the suggested current-entry route; the parent should verify A's existing entry remains the active destination through its file observations.
|
||||
2. Parent verifies all files equal the baseline plus exactly the one declared Activity name literal. No additional rename is needed. Native Undo/Redo is already independently covered in the #39 package run; #46's automated tests cover history preservation, so do not repeat it unless the parent wants that additional gate or native state appears inconsistent.
|
||||
3. Save As to C's exact fresh path. Expect saved state, exact QA46 name, and success feedback. Capture the result. Parent compares every emitted source byte and companion file to the explicit expected bundle; the entry relocation and single name change are the only permitted differences.
|
||||
|
||||
**Failure stop:** if legitimate Save All or fresh Save As fails, preserve the exact state/error and stop dependent mutation/reopen actions. Do not force a save, restore files speculatively or silently reinterpret the intended outcome.
|
||||
|
||||
### 3. Genuine external edit stays a different diagnostic
|
||||
|
||||
1. Pointer Open pristine copy B. No graphical or source edit is necessary here. Confirm loaded/saved state, then pause input and tell parent it is safe to append the predeclared valid comment to the observed dependency.
|
||||
2. After parent's edit receipt, click Save all. Even an unchanged model must check all observed dependency baselines, as the integration contract requires. Expect external-change refusal naming that dependency. Capture visible status and complete detail at minimum size.
|
||||
3. Parent verifies the external comment remains untouched, the entry and every other file remain identical, and no save output overwrote external work. The UI's accepted model and dirty state should remain as they were before Save (clean in this phase); no claim of unsaved model changes is required merely because disk diverged.
|
||||
4. If Save All does not actually perform checks for a clean document, stop and report that observation. Do not add a second rename to make the experiment pass. Parent can then choose a separately declared dirty-state trial if needed.
|
||||
5. Parent restores exactly the observed original dependency bytes, confirms restoration, then reviewer clicks Save all again. Expect success, saved state and unchanged original activity name. Close normally with Alt+F4 after the parent confirms no further native checkpoint is needed.
|
||||
|
||||
**User-visible oracle:** `Source files changed outside Arcadia Studio: ...` naming the edited dependency. It must not use `destination files already exist`, `Existing files are protected`, or recommend a fresh directory as if this were the new-destination collision. Both refused writes and the recovery must retain their genuine outcomes in the report.
|
||||
|
||||
## Evidence and limits
|
||||
|
||||
Capture the collision message at normal/minimum size, its full detail, saved current-entry recovery, successful fresh Save As, genuine external-change refusal/detail, and recovered existing Save. Include exact paths chosen in native dialogs and the declared rename. Keep observations, parent hash receipts and automated-test evidence separately attributed. Existing error footers can truncate long paths; inspect their actual disclosure rather than assuming that source text is readable at minimum size.
|
||||
|
||||
No additional fixture mutation or code change is necessary for this plan. Pending logistical inputs are the parent's exact A/B/C paths, build/DLL pins, output directory and exclusive-GUI-ready signal. No user decision is needed.
|
||||
@@ -0,0 +1,156 @@
|
||||
{
|
||||
"status": "PASS",
|
||||
"phase": "restore",
|
||||
"folder": "C:\\ar-save-01a0d717\\.local\\native46\\external-b",
|
||||
"files": {
|
||||
"expected-diagnostics.json": {
|
||||
"bytes": 288,
|
||||
"sha256": "3700393d76b940cfc076bf52861bd7b1f43370f8eabce3594531bd0bf1fc851e"
|
||||
},
|
||||
"model.json": {
|
||||
"bytes": 134520,
|
||||
"sha256": "ef0ef4006c3e09d5db6e1b621256b3f7d6642f3a7b09cc34607cfbcca830c727"
|
||||
},
|
||||
"model.rs": {
|
||||
"bytes": 28776,
|
||||
"sha256": "ddc2d92b0d7699a4cadfbb35ae379f0a68d17f4f5d7df82b4b1afcf8d5425fbe"
|
||||
},
|
||||
"project.arcadia": {
|
||||
"bytes": 1958,
|
||||
"sha256": "b2674e6bf77cfe0f6f0ba79c81d2e96d92f39c02ca2c6266d80e91723bfb9fda"
|
||||
},
|
||||
"README.md": {
|
||||
"bytes": 11137,
|
||||
"sha256": "113cfb1cf38a98b51bff60442d86a35d636a3d80ef206bece7d53d0aae67f2d5"
|
||||
},
|
||||
"traceability.arcadia": {
|
||||
"bytes": 28041,
|
||||
"sha256": "474bd28d955ff7af7722f6e9a23220d816879e3f46202e79a233544b9c593116"
|
||||
},
|
||||
"transition-before.json": {
|
||||
"bytes": 35801,
|
||||
"sha256": "2253e6434f741687e22327c37d520ed15c043bc36025498650bc2366bb6a874d"
|
||||
},
|
||||
"transition-request.json": {
|
||||
"bytes": 4276,
|
||||
"sha256": "43b9a22e5f95ad3bc0ebd2478ead0e14406854abc989ae94ded9367b013d812a"
|
||||
},
|
||||
"evidence/repair-check.md": {
|
||||
"bytes": 1419,
|
||||
"sha256": "f4db17bdca4ecbb1bf0caef01b2da5f1f7f798ab3152b648ce6dd8696a6a68e5"
|
||||
},
|
||||
"oa/capabilities.arcadia": {
|
||||
"bytes": 630,
|
||||
"sha256": "26a3d9b615a3251ff010e0b47127f2d16bc2dcd45ed95967208b0076d725843a"
|
||||
},
|
||||
"oa/model.arcadia": {
|
||||
"bytes": 531,
|
||||
"sha256": "069a5eaaf525089935cc9d73ae7b916866ed78c6534705d75739650ecdea7ada"
|
||||
},
|
||||
"oa/participants.arcadia": {
|
||||
"bytes": 1580,
|
||||
"sha256": "591a75a9ecad280302be4d4ae0171ad616377ed11ead5e233848ca2dc0a71819"
|
||||
},
|
||||
"oa/types.arcadia": {
|
||||
"bytes": 554,
|
||||
"sha256": "f02c391d584674c879f662a418abba3a220f1fee88471ca49322ac9873de628d"
|
||||
},
|
||||
"sa/capabilities.arcadia": {
|
||||
"bytes": 630,
|
||||
"sha256": "81706a0ca9d7db2aa0350888b9c00d853885185db2e6b90557d3d51a11c3d645"
|
||||
},
|
||||
"sa/model.arcadia": {
|
||||
"bytes": 531,
|
||||
"sha256": "805b90262e27090ae7da81a51bcefa49c97fb0b3d3220b4a72323b4c4351c395"
|
||||
},
|
||||
"sa/participants.arcadia": {
|
||||
"bytes": 3604,
|
||||
"sha256": "ca144d6a8f45fe720b5d18c7b59c7671444baa8c37e5ce9117bcba34b3a6aa84"
|
||||
},
|
||||
"sa/types.arcadia": {
|
||||
"bytes": 903,
|
||||
"sha256": "540ddbc2bcd0ccf45298e3ea5660637341aff63ff65fd87ac2f26469d1adc064"
|
||||
},
|
||||
"views/diagram_oa_allocation_view.arcadia": {
|
||||
"bytes": 1786,
|
||||
"sha256": "c45d7467839219d894804c1ef2d22ff4d4a5a84a6a273c526bafd4c1facde624"
|
||||
},
|
||||
"views/diagram_sa_allocation_view.arcadia": {
|
||||
"bytes": 1797,
|
||||
"sha256": "352a3ca745517592b5c9b1239b5770f62f0466a329a91fd03457ef2b53c06ed6"
|
||||
},
|
||||
"views/diagram_sa_capability_view.arcadia": {
|
||||
"bytes": 1286,
|
||||
"sha256": "8f18fcccbcddcf3c1ea0ffe727b5b23b77fc148c5da4fde953abe681e4c20cd2"
|
||||
},
|
||||
"views/diagram_sa_service_view.arcadia": {
|
||||
"bytes": 1960,
|
||||
"sha256": "4c72cb7593d9c4be8d2600b0656a7a3a6ce84c45bb2f3e58a4ee5ae3bf91913c"
|
||||
},
|
||||
"views/diagram_sa_state_view.arcadia": {
|
||||
"bytes": 1576,
|
||||
"sha256": "dd1bea81ac7dc549a53f9b190be6f13052e00ede345bd180444cc31edb892230"
|
||||
},
|
||||
"oa/activities/activity_oa_restore_work.arcadia": {
|
||||
"bytes": 1130,
|
||||
"sha256": "21cbd7176af8fad68453306f2371ff03e127a994b8796cdf044567332de9686f"
|
||||
},
|
||||
"oa/behavior/process_oa_assessment_procedure.arcadia": {
|
||||
"bytes": 550,
|
||||
"sha256": "23cabc213c264a16c8595414db6acb09248c1cef9cd699f1b0316e5bb82c062a"
|
||||
},
|
||||
"oa/behavior/process_oa_field_procedure.arcadia": {
|
||||
"bytes": 1178,
|
||||
"sha256": "9c52086759b7344b4809ceb8d372f65647b16fc24153a03b887faa378c37fe96"
|
||||
},
|
||||
"oa/behavior/process_oa_response.arcadia": {
|
||||
"bytes": 2560,
|
||||
"sha256": "675798bd19e6b40d03e7076b0e59b110cdaaab7b6d16c47c3ac80fa960072e84"
|
||||
},
|
||||
"oa/behavior/scenario_oa_conversation.arcadia": {
|
||||
"bytes": 1515,
|
||||
"sha256": "e217e5394a0771dc16206ed9437a231da27905d2f19be64b3f48281c0a32fb6b"
|
||||
},
|
||||
"oa/behavior/scenario_oa_full_scenario.arcadia": {
|
||||
"bytes": 1121,
|
||||
"sha256": "c5a285f2d7c61bd2a136107f267fbf9cddb1cba3f63ff36a6f53f7ab98f33df5"
|
||||
},
|
||||
"oa/behavior/state_machine_oa_monitor.arcadia": {
|
||||
"bytes": 1358,
|
||||
"sha256": "e7349e1e5336282eed3f5a103129db33d3ae4ed500788ee7129e8fc193ac57f6"
|
||||
},
|
||||
"sa/behavior/process_sa_assessment_procedure.arcadia": {
|
||||
"bytes": 559,
|
||||
"sha256": "5c414fbdaabf9f9e402b0441fcacf1cacf4dbbc6c822162f028de35abf59be2d"
|
||||
},
|
||||
"sa/behavior/process_sa_field_procedure.arcadia": {
|
||||
"bytes": 1187,
|
||||
"sha256": "ece846fdf93857e71a9ab0efcbdf64a5c41c71180f62afa3f79077fffb53b8f2"
|
||||
},
|
||||
"sa/behavior/process_sa_response.arcadia": {
|
||||
"bytes": 2569,
|
||||
"sha256": "af7fdda280a917cf626f6e077162d481f9aaad280f8e81330c07d7fe384b1c52"
|
||||
},
|
||||
"sa/behavior/scenario_sa_conversation.arcadia": {
|
||||
"bytes": 1847,
|
||||
"sha256": "01339699ec3ee409418d9bb232542f2bcd9419f1e67b183e77700c56bb9f71d2"
|
||||
},
|
||||
"sa/behavior/scenario_sa_full_scenario.arcadia": {
|
||||
"bytes": 1116,
|
||||
"sha256": "5dce6b00a3a441162e8dee3e23d9ca5ab7bed4a24de669b1fba03664a3086dda"
|
||||
},
|
||||
"sa/behavior/state_machine_sa_monitor.arcadia": {
|
||||
"bytes": 1358,
|
||||
"sha256": "17dbcfa5bbfd10fc8e23a325fc950ce853c219b4aa89c74f96278cbb3f34acc8"
|
||||
},
|
||||
"sa/functions/function_sa_audit_thresholds.arcadia": {
|
||||
"bytes": 280,
|
||||
"sha256": "27f798f78f36e72b38edab3725af2feb0eaa010fd52a60b5c6b6bef57ad3b686"
|
||||
},
|
||||
"sa/functions/function_sa_restore_work.arcadia": {
|
||||
"bytes": 2251,
|
||||
"sha256": "357c6acb80f86b4e8d8f5c98f9f79d140f85fbe09f3406b41b7ac6eba464ec8c"
|
||||
}
|
||||
},
|
||||
"scope": "Every byte and relative filename, including seven companion files, equals the independently declared original bundle plus only the phase-specific activity rename or parent-injected valid comment."
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
# Native #46 diagnostic verification
|
||||
|
||||
Predeclared intent, before native edits: independently exercise the desktop build from source `0e83157e09d52e6152df91208e41693b62da2d46`, executable SHA-256 `E9CCE9355525ECDC59BFAE12608B1E0272167ACEF5A86B25368EF547E08886FF`, runtime SHA-256 `F45604A12E8BCD839FD86F667C1BE1CC7C4F9DA2B3C69FF381AC708F0E1AE7D4`. Parent launched PID 10012 and retains watcher/log/oracle ownership. Reviewer `/root/ux_critique` uses only Computer Use `@oai/sky` for native interaction and has exclusive GUI ownership for this trial.
|
||||
|
||||
All trial paths are under `C:/ar-save-01a0d717/.local/native46/`:
|
||||
|
||||
- A: `collision-a/project.arcadia`. Exactly one allowed authored graphical change: Activity `61f7bbfb-74a4-5540-9182-2583dfb27a49`, name `Assess pressure alarm` to **`Assess pressure alarm QA46`**. No other authored edits.
|
||||
- Rejected Save As target: `collision-a/collision-copy.arcadia`, initially absent. Existing included files must remain protected.
|
||||
- Successful fresh Save As target: `fresh-c/project.arcadia`, with seven companion files prepared by parent and zero source files initially.
|
||||
- B: `external-b/project.arcadia`, pristine separate complete copy. After it is loaded, parent alone injects a valid comment into the observed dependency `oa/activities/activity_oa_restore_work.arcadia`, records the byte oracle, then restores exact bytes after the actual external-conflict trial.
|
||||
|
||||
Reviewer pauses after collision refusal, existing Save All success, fresh Save As success, B load and genuine external-change refusal for parent checkpoints. No source/model JSON inspection, fixture mutation outside the app, build, Gitea or unrelated GUI operation is part of this trial. Native status/name/count observations are not whole-model or disk-equality proofs. Parent supplies those independent results. Normal closure occurs only after final parent confirmation.
|
||||
|
||||
Plan: `.local/native46-plan.md`. Native observations and screenshots will be recorded below without erasing rejected operations or recovery steps.
|
||||
|
||||
## A: protected destination and recovery
|
||||
|
||||
Opened A by native Open chooser, typed full path and clicked Open. At 1442×932, selected Assess pressure alarm (UUID verified in inspector), replaced Name with exactly Assess pressure alarm QA46 and clicked Apply changes. Only this semantic edit was made. Save As to the predeclared absent collision-copy.arcadia entry was refused. Unsaved changes and the applied name remained visible. Footer now says Source destination files already exist, identifies oa/activities/activity_oa_restore_work.arcadia, and says existing files are protected. Pointer tooltip gives both recovery choices: fresh directory for Save As, or Save All to update the current entry. Full tooltip fits both 1442×932 and minimum 1102×732 outer windows (1100×700 client target); persistent footer truncates with ellipsis. No keyboard-only tooltip claim. Parent reported collision byte oracle PASS: all 37 A files exactly baseline, no reserved new entry.
|
||||
|
||||
Clicked Save All at minimum size after parent clearance. Observed Working then All changes saved / All source files saved, exact QA46 Name retained and title star cleared. Paused for saved-a byte oracle. Screenshots 00–07 document opening, the edit, destination chooser, refusal at both sizes, full tooltips, and recovery.
|
||||
|
||||
## C: fresh destination
|
||||
|
||||
Parent reported saved-a oracle PASS: all 37 files match baseline plus only the declared OA Activity name literal; original project.arcadia otherwise unchanged and refused new entry absent. Save As using typed full C path and pointer Save then showed Working followed by All source files saved / All changes saved. QA46 Name retained. Screenshots 08–09. Paused for saved-c oracle.
|
||||
|
||||
Parent reported saved-c oracle PASS: all 37 filenames and bytes exactly baseline plus only QA46 name; seven companion files were parent copies and 30 sources app writes. Opened B through typed exact native chooser path, then observed baseline Assess name, All changes saved, 94 objects / 62 links / 1 model check. No B model edits. Screenshots 10–11. Paused before Save All for parent external comment injection.
|
||||
|
||||
## B: genuine external edit
|
||||
|
||||
Parent reported baseline equality and injection of only a valid comment in oa/activities/activity_oa_restore_work.arcadia, with other bytes unchanged. Clicked Save All on the clean loaded B. Working resolved to Source files changed outside Arcadia Studio: ["oa/activities/activity_oa_restore_work.arcadia"]. Full message fits minimum footer and pointer tooltip, with no destination or fresh-directory wording. Header still says All changes saved because there are no local edits; this status is not proof of disk equality or successful attempted save. Screenshots 12–13. Paused for parent external-refused oracle/restoration.
|
||||
|
||||
## Recovery, outcome and limits
|
||||
|
||||
Parent reported external-refused oracle PASS: injected comment preserved, all other 36 files untouched. Parent restored exact baseline bytes and reported all 37 matching. Parent also reported complete parsed C model equals baseline plus only the predeclared Activity name. After clearance, clicked Save All on B: Working resolved to All source files saved, with All changes saved. Inspected Assess activity by pointer: exact baseline Name Assess pressure alarm, stable alias oa_assess, performer Control room; 94 objects / 62 links / 1 model check. No B model edits. Screenshots 14–15. Closed normally via Alt+F4; fresh native window enumeration no longer listed Arcadia. Parent owns post-close oracle, process exit/logs and executable/runtime checks.
|
||||
|
||||
Native result: no new defect found in the bounded #46 workflows. The collision now explains protected destination files and both supported recovery routes; actual external modification keeps the separate external-change wording. Save All recovery and fresh-folder Save As both completed through normal UI. The existing persistent footer is truncated for the longer collision message; full details are reachable and readable by pointer tooltip at normal and minimum size. Keyboard-only access to that tooltip was not tested. Clean B header All changes saved describes absence of local edits, not successful save or lack of disk conflict: the footer explicitly reported refusal. Native counts and screenshots do not prove whole-model/disk equality; parent-provided byte/parser results are labeled separately above. This run did not retest every save-error class or concurrency race. Evidence recorded 2026-10-01 America/Los_Angeles.
|
||||
@@ -0,0 +1,156 @@
|
||||
{
|
||||
"status": "PASS",
|
||||
"phase": "saved-a",
|
||||
"folder": "C:\\ar-save-01a0d717\\.local\\native46\\collision-a",
|
||||
"files": {
|
||||
"expected-diagnostics.json": {
|
||||
"bytes": 288,
|
||||
"sha256": "3700393d76b940cfc076bf52861bd7b1f43370f8eabce3594531bd0bf1fc851e"
|
||||
},
|
||||
"model.json": {
|
||||
"bytes": 134520,
|
||||
"sha256": "ef0ef4006c3e09d5db6e1b621256b3f7d6642f3a7b09cc34607cfbcca830c727"
|
||||
},
|
||||
"model.rs": {
|
||||
"bytes": 28776,
|
||||
"sha256": "ddc2d92b0d7699a4cadfbb35ae379f0a68d17f4f5d7df82b4b1afcf8d5425fbe"
|
||||
},
|
||||
"project.arcadia": {
|
||||
"bytes": 1958,
|
||||
"sha256": "b2674e6bf77cfe0f6f0ba79c81d2e96d92f39c02ca2c6266d80e91723bfb9fda"
|
||||
},
|
||||
"README.md": {
|
||||
"bytes": 11137,
|
||||
"sha256": "113cfb1cf38a98b51bff60442d86a35d636a3d80ef206bece7d53d0aae67f2d5"
|
||||
},
|
||||
"traceability.arcadia": {
|
||||
"bytes": 28041,
|
||||
"sha256": "474bd28d955ff7af7722f6e9a23220d816879e3f46202e79a233544b9c593116"
|
||||
},
|
||||
"transition-before.json": {
|
||||
"bytes": 35801,
|
||||
"sha256": "2253e6434f741687e22327c37d520ed15c043bc36025498650bc2366bb6a874d"
|
||||
},
|
||||
"transition-request.json": {
|
||||
"bytes": 4276,
|
||||
"sha256": "43b9a22e5f95ad3bc0ebd2478ead0e14406854abc989ae94ded9367b013d812a"
|
||||
},
|
||||
"evidence/repair-check.md": {
|
||||
"bytes": 1419,
|
||||
"sha256": "f4db17bdca4ecbb1bf0caef01b2da5f1f7f798ab3152b648ce6dd8696a6a68e5"
|
||||
},
|
||||
"oa/capabilities.arcadia": {
|
||||
"bytes": 630,
|
||||
"sha256": "26a3d9b615a3251ff010e0b47127f2d16bc2dcd45ed95967208b0076d725843a"
|
||||
},
|
||||
"oa/model.arcadia": {
|
||||
"bytes": 531,
|
||||
"sha256": "069a5eaaf525089935cc9d73ae7b916866ed78c6534705d75739650ecdea7ada"
|
||||
},
|
||||
"oa/participants.arcadia": {
|
||||
"bytes": 1580,
|
||||
"sha256": "591a75a9ecad280302be4d4ae0171ad616377ed11ead5e233848ca2dc0a71819"
|
||||
},
|
||||
"oa/types.arcadia": {
|
||||
"bytes": 554,
|
||||
"sha256": "f02c391d584674c879f662a418abba3a220f1fee88471ca49322ac9873de628d"
|
||||
},
|
||||
"sa/capabilities.arcadia": {
|
||||
"bytes": 630,
|
||||
"sha256": "81706a0ca9d7db2aa0350888b9c00d853885185db2e6b90557d3d51a11c3d645"
|
||||
},
|
||||
"sa/model.arcadia": {
|
||||
"bytes": 531,
|
||||
"sha256": "805b90262e27090ae7da81a51bcefa49c97fb0b3d3220b4a72323b4c4351c395"
|
||||
},
|
||||
"sa/participants.arcadia": {
|
||||
"bytes": 3604,
|
||||
"sha256": "ca144d6a8f45fe720b5d18c7b59c7671444baa8c37e5ce9117bcba34b3a6aa84"
|
||||
},
|
||||
"sa/types.arcadia": {
|
||||
"bytes": 903,
|
||||
"sha256": "540ddbc2bcd0ccf45298e3ea5660637341aff63ff65fd87ac2f26469d1adc064"
|
||||
},
|
||||
"views/diagram_oa_allocation_view.arcadia": {
|
||||
"bytes": 1786,
|
||||
"sha256": "c45d7467839219d894804c1ef2d22ff4d4a5a84a6a273c526bafd4c1facde624"
|
||||
},
|
||||
"views/diagram_sa_allocation_view.arcadia": {
|
||||
"bytes": 1797,
|
||||
"sha256": "352a3ca745517592b5c9b1239b5770f62f0466a329a91fd03457ef2b53c06ed6"
|
||||
},
|
||||
"views/diagram_sa_capability_view.arcadia": {
|
||||
"bytes": 1286,
|
||||
"sha256": "8f18fcccbcddcf3c1ea0ffe727b5b23b77fc148c5da4fde953abe681e4c20cd2"
|
||||
},
|
||||
"views/diagram_sa_service_view.arcadia": {
|
||||
"bytes": 1960,
|
||||
"sha256": "4c72cb7593d9c4be8d2600b0656a7a3a6ce84c45bb2f3e58a4ee5ae3bf91913c"
|
||||
},
|
||||
"views/diagram_sa_state_view.arcadia": {
|
||||
"bytes": 1576,
|
||||
"sha256": "dd1bea81ac7dc549a53f9b190be6f13052e00ede345bd180444cc31edb892230"
|
||||
},
|
||||
"oa/activities/activity_oa_restore_work.arcadia": {
|
||||
"bytes": 1135,
|
||||
"sha256": "ff8c6cfc568446a55110f1d719f510dddf8eaacf504232fcf8c0037fc5476450"
|
||||
},
|
||||
"oa/behavior/process_oa_assessment_procedure.arcadia": {
|
||||
"bytes": 550,
|
||||
"sha256": "23cabc213c264a16c8595414db6acb09248c1cef9cd699f1b0316e5bb82c062a"
|
||||
},
|
||||
"oa/behavior/process_oa_field_procedure.arcadia": {
|
||||
"bytes": 1178,
|
||||
"sha256": "9c52086759b7344b4809ceb8d372f65647b16fc24153a03b887faa378c37fe96"
|
||||
},
|
||||
"oa/behavior/process_oa_response.arcadia": {
|
||||
"bytes": 2560,
|
||||
"sha256": "675798bd19e6b40d03e7076b0e59b110cdaaab7b6d16c47c3ac80fa960072e84"
|
||||
},
|
||||
"oa/behavior/scenario_oa_conversation.arcadia": {
|
||||
"bytes": 1515,
|
||||
"sha256": "e217e5394a0771dc16206ed9437a231da27905d2f19be64b3f48281c0a32fb6b"
|
||||
},
|
||||
"oa/behavior/scenario_oa_full_scenario.arcadia": {
|
||||
"bytes": 1121,
|
||||
"sha256": "c5a285f2d7c61bd2a136107f267fbf9cddb1cba3f63ff36a6f53f7ab98f33df5"
|
||||
},
|
||||
"oa/behavior/state_machine_oa_monitor.arcadia": {
|
||||
"bytes": 1358,
|
||||
"sha256": "e7349e1e5336282eed3f5a103129db33d3ae4ed500788ee7129e8fc193ac57f6"
|
||||
},
|
||||
"sa/behavior/process_sa_assessment_procedure.arcadia": {
|
||||
"bytes": 559,
|
||||
"sha256": "5c414fbdaabf9f9e402b0441fcacf1cacf4dbbc6c822162f028de35abf59be2d"
|
||||
},
|
||||
"sa/behavior/process_sa_field_procedure.arcadia": {
|
||||
"bytes": 1187,
|
||||
"sha256": "ece846fdf93857e71a9ab0efcbdf64a5c41c71180f62afa3f79077fffb53b8f2"
|
||||
},
|
||||
"sa/behavior/process_sa_response.arcadia": {
|
||||
"bytes": 2569,
|
||||
"sha256": "af7fdda280a917cf626f6e077162d481f9aaad280f8e81330c07d7fe384b1c52"
|
||||
},
|
||||
"sa/behavior/scenario_sa_conversation.arcadia": {
|
||||
"bytes": 1847,
|
||||
"sha256": "01339699ec3ee409418d9bb232542f2bcd9419f1e67b183e77700c56bb9f71d2"
|
||||
},
|
||||
"sa/behavior/scenario_sa_full_scenario.arcadia": {
|
||||
"bytes": 1116,
|
||||
"sha256": "5dce6b00a3a441162e8dee3e23d9ca5ab7bed4a24de669b1fba03664a3086dda"
|
||||
},
|
||||
"sa/behavior/state_machine_sa_monitor.arcadia": {
|
||||
"bytes": 1358,
|
||||
"sha256": "17dbcfa5bbfd10fc8e23a325fc950ce853c219b4aa89c74f96278cbb3f34acc8"
|
||||
},
|
||||
"sa/functions/function_sa_audit_thresholds.arcadia": {
|
||||
"bytes": 280,
|
||||
"sha256": "27f798f78f36e72b38edab3725af2feb0eaa010fd52a60b5c6b6bef57ad3b686"
|
||||
},
|
||||
"sa/functions/function_sa_restore_work.arcadia": {
|
||||
"bytes": 2251,
|
||||
"sha256": "357c6acb80f86b4e8d8f5c98f9f79d140f85fbe09f3406b41b7ac6eba464ec8c"
|
||||
}
|
||||
},
|
||||
"scope": "Every byte and relative filename, including seven companion files, equals the independently declared original bundle plus only the phase-specific activity rename or parent-injected valid comment."
|
||||
}
|
||||
@@ -0,0 +1,156 @@
|
||||
{
|
||||
"status": "PASS",
|
||||
"phase": "saved-c",
|
||||
"folder": "C:\\ar-save-01a0d717\\.local\\native46\\fresh-c",
|
||||
"files": {
|
||||
"expected-diagnostics.json": {
|
||||
"bytes": 288,
|
||||
"sha256": "3700393d76b940cfc076bf52861bd7b1f43370f8eabce3594531bd0bf1fc851e"
|
||||
},
|
||||
"model.json": {
|
||||
"bytes": 134520,
|
||||
"sha256": "ef0ef4006c3e09d5db6e1b621256b3f7d6642f3a7b09cc34607cfbcca830c727"
|
||||
},
|
||||
"model.rs": {
|
||||
"bytes": 28776,
|
||||
"sha256": "ddc2d92b0d7699a4cadfbb35ae379f0a68d17f4f5d7df82b4b1afcf8d5425fbe"
|
||||
},
|
||||
"project.arcadia": {
|
||||
"bytes": 1958,
|
||||
"sha256": "b2674e6bf77cfe0f6f0ba79c81d2e96d92f39c02ca2c6266d80e91723bfb9fda"
|
||||
},
|
||||
"README.md": {
|
||||
"bytes": 11137,
|
||||
"sha256": "113cfb1cf38a98b51bff60442d86a35d636a3d80ef206bece7d53d0aae67f2d5"
|
||||
},
|
||||
"traceability.arcadia": {
|
||||
"bytes": 28041,
|
||||
"sha256": "474bd28d955ff7af7722f6e9a23220d816879e3f46202e79a233544b9c593116"
|
||||
},
|
||||
"transition-before.json": {
|
||||
"bytes": 35801,
|
||||
"sha256": "2253e6434f741687e22327c37d520ed15c043bc36025498650bc2366bb6a874d"
|
||||
},
|
||||
"transition-request.json": {
|
||||
"bytes": 4276,
|
||||
"sha256": "43b9a22e5f95ad3bc0ebd2478ead0e14406854abc989ae94ded9367b013d812a"
|
||||
},
|
||||
"evidence/repair-check.md": {
|
||||
"bytes": 1419,
|
||||
"sha256": "f4db17bdca4ecbb1bf0caef01b2da5f1f7f798ab3152b648ce6dd8696a6a68e5"
|
||||
},
|
||||
"oa/capabilities.arcadia": {
|
||||
"bytes": 630,
|
||||
"sha256": "26a3d9b615a3251ff010e0b47127f2d16bc2dcd45ed95967208b0076d725843a"
|
||||
},
|
||||
"oa/model.arcadia": {
|
||||
"bytes": 531,
|
||||
"sha256": "069a5eaaf525089935cc9d73ae7b916866ed78c6534705d75739650ecdea7ada"
|
||||
},
|
||||
"oa/participants.arcadia": {
|
||||
"bytes": 1580,
|
||||
"sha256": "591a75a9ecad280302be4d4ae0171ad616377ed11ead5e233848ca2dc0a71819"
|
||||
},
|
||||
"oa/types.arcadia": {
|
||||
"bytes": 554,
|
||||
"sha256": "f02c391d584674c879f662a418abba3a220f1fee88471ca49322ac9873de628d"
|
||||
},
|
||||
"sa/capabilities.arcadia": {
|
||||
"bytes": 630,
|
||||
"sha256": "81706a0ca9d7db2aa0350888b9c00d853885185db2e6b90557d3d51a11c3d645"
|
||||
},
|
||||
"sa/model.arcadia": {
|
||||
"bytes": 531,
|
||||
"sha256": "805b90262e27090ae7da81a51bcefa49c97fb0b3d3220b4a72323b4c4351c395"
|
||||
},
|
||||
"sa/participants.arcadia": {
|
||||
"bytes": 3604,
|
||||
"sha256": "ca144d6a8f45fe720b5d18c7b59c7671444baa8c37e5ce9117bcba34b3a6aa84"
|
||||
},
|
||||
"sa/types.arcadia": {
|
||||
"bytes": 903,
|
||||
"sha256": "540ddbc2bcd0ccf45298e3ea5660637341aff63ff65fd87ac2f26469d1adc064"
|
||||
},
|
||||
"views/diagram_oa_allocation_view.arcadia": {
|
||||
"bytes": 1786,
|
||||
"sha256": "c45d7467839219d894804c1ef2d22ff4d4a5a84a6a273c526bafd4c1facde624"
|
||||
},
|
||||
"views/diagram_sa_allocation_view.arcadia": {
|
||||
"bytes": 1797,
|
||||
"sha256": "352a3ca745517592b5c9b1239b5770f62f0466a329a91fd03457ef2b53c06ed6"
|
||||
},
|
||||
"views/diagram_sa_capability_view.arcadia": {
|
||||
"bytes": 1286,
|
||||
"sha256": "8f18fcccbcddcf3c1ea0ffe727b5b23b77fc148c5da4fde953abe681e4c20cd2"
|
||||
},
|
||||
"views/diagram_sa_service_view.arcadia": {
|
||||
"bytes": 1960,
|
||||
"sha256": "4c72cb7593d9c4be8d2600b0656a7a3a6ce84c45bb2f3e58a4ee5ae3bf91913c"
|
||||
},
|
||||
"views/diagram_sa_state_view.arcadia": {
|
||||
"bytes": 1576,
|
||||
"sha256": "dd1bea81ac7dc549a53f9b190be6f13052e00ede345bd180444cc31edb892230"
|
||||
},
|
||||
"oa/activities/activity_oa_restore_work.arcadia": {
|
||||
"bytes": 1135,
|
||||
"sha256": "ff8c6cfc568446a55110f1d719f510dddf8eaacf504232fcf8c0037fc5476450"
|
||||
},
|
||||
"oa/behavior/process_oa_assessment_procedure.arcadia": {
|
||||
"bytes": 550,
|
||||
"sha256": "23cabc213c264a16c8595414db6acb09248c1cef9cd699f1b0316e5bb82c062a"
|
||||
},
|
||||
"oa/behavior/process_oa_field_procedure.arcadia": {
|
||||
"bytes": 1178,
|
||||
"sha256": "9c52086759b7344b4809ceb8d372f65647b16fc24153a03b887faa378c37fe96"
|
||||
},
|
||||
"oa/behavior/process_oa_response.arcadia": {
|
||||
"bytes": 2560,
|
||||
"sha256": "675798bd19e6b40d03e7076b0e59b110cdaaab7b6d16c47c3ac80fa960072e84"
|
||||
},
|
||||
"oa/behavior/scenario_oa_conversation.arcadia": {
|
||||
"bytes": 1515,
|
||||
"sha256": "e217e5394a0771dc16206ed9437a231da27905d2f19be64b3f48281c0a32fb6b"
|
||||
},
|
||||
"oa/behavior/scenario_oa_full_scenario.arcadia": {
|
||||
"bytes": 1121,
|
||||
"sha256": "c5a285f2d7c61bd2a136107f267fbf9cddb1cba3f63ff36a6f53f7ab98f33df5"
|
||||
},
|
||||
"oa/behavior/state_machine_oa_monitor.arcadia": {
|
||||
"bytes": 1358,
|
||||
"sha256": "e7349e1e5336282eed3f5a103129db33d3ae4ed500788ee7129e8fc193ac57f6"
|
||||
},
|
||||
"sa/behavior/process_sa_assessment_procedure.arcadia": {
|
||||
"bytes": 559,
|
||||
"sha256": "5c414fbdaabf9f9e402b0441fcacf1cacf4dbbc6c822162f028de35abf59be2d"
|
||||
},
|
||||
"sa/behavior/process_sa_field_procedure.arcadia": {
|
||||
"bytes": 1187,
|
||||
"sha256": "ece846fdf93857e71a9ab0efcbdf64a5c41c71180f62afa3f79077fffb53b8f2"
|
||||
},
|
||||
"sa/behavior/process_sa_response.arcadia": {
|
||||
"bytes": 2569,
|
||||
"sha256": "af7fdda280a917cf626f6e077162d481f9aaad280f8e81330c07d7fe384b1c52"
|
||||
},
|
||||
"sa/behavior/scenario_sa_conversation.arcadia": {
|
||||
"bytes": 1847,
|
||||
"sha256": "01339699ec3ee409418d9bb232542f2bcd9419f1e67b183e77700c56bb9f71d2"
|
||||
},
|
||||
"sa/behavior/scenario_sa_full_scenario.arcadia": {
|
||||
"bytes": 1116,
|
||||
"sha256": "5dce6b00a3a441162e8dee3e23d9ca5ab7bed4a24de669b1fba03664a3086dda"
|
||||
},
|
||||
"sa/behavior/state_machine_sa_monitor.arcadia": {
|
||||
"bytes": 1358,
|
||||
"sha256": "17dbcfa5bbfd10fc8e23a325fc950ce853c219b4aa89c74f96278cbb3f34acc8"
|
||||
},
|
||||
"sa/functions/function_sa_audit_thresholds.arcadia": {
|
||||
"bytes": 280,
|
||||
"sha256": "27f798f78f36e72b38edab3725af2feb0eaa010fd52a60b5c6b6bef57ad3b686"
|
||||
},
|
||||
"sa/functions/function_sa_restore_work.arcadia": {
|
||||
"bytes": 2251,
|
||||
"sha256": "357c6acb80f86b4e8d8f5c98f9f79d140f85fbe09f3406b41b7ac6eba464ec8c"
|
||||
}
|
||||
},
|
||||
"scope": "Every byte and relative filename, including seven companion files, equals the independently declared original bundle plus only the phase-specific activity rename or parent-injected valid comment."
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"source": "0e83157e09d52e6152df91208e41693b62da2d46",
|
||||
"start": "2026-10-02T01:34:07.329232+00:00",
|
||||
"binary_sha256": "e9cce9355525ecdc59bfae12608b1e0272167acef5a86b25368ef547e08886ff",
|
||||
"runtime_sha256": "f45604a12e8bcd839fd86f667c1be1cc7c4f9da2b3c69ff381ac708f0e1ae7d4",
|
||||
"cwd": "C:\\ar-save-01a0d717\\.local\\native46\\working",
|
||||
"path": "C:\\Windows\\System32;C:\\Windows",
|
||||
"pid": 10012
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
from pathlib import Path
|
||||
import datetime,hashlib,json,os,subprocess
|
||||
root=Path(__file__).resolve().parents[1];run=root/'.local/native46'
|
||||
record=json.loads((run/'baseline.json').read_text(encoding='utf-8'))
|
||||
bin=run/'bin';exe=bin/'arcadia-studio.exe'
|
||||
sha=lambda p:hashlib.sha256(p.read_bytes()).hexdigest()
|
||||
assert sha(exe)==record['binary']['sha256'] and sha(bin/'libunwind.dll')==record['runtime']['sha256']
|
||||
work=run/'working';work.mkdir(exist_ok=False)
|
||||
env=os.environ.copy();system=os.environ['SystemRoot'];env['PATH']=str(Path(system)/'System32')+';'+system
|
||||
for k in list(env):
|
||||
if k.startswith(('CARGO_','RUST','LLVM','WGPU','ARCADIA_')):del env[k]
|
||||
receipt={'source':record['source'],'start':datetime.datetime.now(datetime.timezone.utc).isoformat(),'binary_sha256':sha(exe),'runtime_sha256':sha(bin/'libunwind.dll'),'cwd':str(work),'path':env['PATH']}
|
||||
with (run/'stdout.log').open('xb') as out,(run/'stderr.log').open('xb') as err:
|
||||
child=subprocess.Popen([str(exe)],cwd=work,env=env,stdout=out,stderr=err,creationflags=subprocess.CREATE_NO_WINDOW)
|
||||
receipt['pid']=child.pid;(run/'started.json').write_text(json.dumps(receipt,indent=2)+'\n',encoding='utf-8');print(json.dumps(receipt,indent=2),flush=True)
|
||||
code=child.wait()
|
||||
receipt.update({'exit_code':code,'finished':datetime.datetime.now(datetime.timezone.utc).isoformat(),'stdout_bytes':(run/'stdout.log').stat().st_size,'stderr_bytes':(run/'stderr.log').stat().st_size,'binary_unchanged':sha(exe)==record['binary']['sha256'],'runtime_unchanged':sha(bin/'libunwind.dll')==record['runtime']['sha256']})
|
||||
(run/'finished.json').write_text(json.dumps(receipt,indent=2)+'\n',encoding='utf-8');print(json.dumps(receipt,indent=2),flush=True)
|
||||
assert code==0 and receipt['stdout_bytes']==receipt['stderr_bytes']==0 and receipt['binary_unchanged'] and receipt['runtime_unchanged']
|
||||
@@ -0,0 +1,9 @@
|
||||
from pathlib import Path
|
||||
root=Path(__file__).resolve().parents[1]
|
||||
original=Path('C:/ar-compact-01a0d717/.local/package39/native-model-oracle.py').read_text(encoding='utf-8')
|
||||
text=original.replace("proof=json.loads((root/'extraction-check.json').read_text(encoding='utf-8'))", "proof=json.loads(Path('C:/ar-compact-01a0d717/.local/package39/extraction-check.json').read_text(encoding='utf-8'))")
|
||||
text=text.replace("(root/'working/saved','qa-saved.arcadia')", "(root/'fresh-c','project.arcadia')")
|
||||
text=text.replace('Assess pressure alarm QA LEFT XYRIGHT','Assess pressure alarm QA46')
|
||||
assert text!=original and 'working/saved' not in text and 'QA LEFT XYRIGHT' not in text
|
||||
(root/'.local/native46/native-model-oracle.py').write_text(text,encoding='utf-8')
|
||||
print('Prepared exact-source/model QA46 oracle with explicit UTF-8 read')
|
||||
@@ -0,0 +1,27 @@
|
||||
from pathlib import Path
|
||||
import hashlib,json,shutil,subprocess
|
||||
root=Path(__file__).resolve().parents[1]
|
||||
source='0e83157e09d52e6152df91208e41693b62da2d46'
|
||||
assert subprocess.check_output(['git','rev-parse','HEAD'],cwd=root,text=True).strip()==source
|
||||
subprocess.run(['git','diff','--exit-code',source,'--','crates','Cargo.toml','Cargo.lock'],cwd=root,check=True)
|
||||
run=root/'.local/native46';run.mkdir(exist_ok=False)
|
||||
bins=run/'bin';bins.mkdir()
|
||||
target=Path('C:/Users/User/Documents/Git/ARCADIA-Studio/.local/target-gnullvm/debug')
|
||||
runtime=Path('C:/ar-compact-01a0d717/.local/package39/bin/libunwind.dll')
|
||||
assert hashlib.sha256(runtime.read_bytes()).hexdigest()=='f45604a12e8bcd839fd86f667c1be1cc7c4f9da2b3c69ff381ac708f0e1ae7d4'
|
||||
shutil.copyfile(target/'arcadia-studio.exe',bins/'arcadia-studio.exe')
|
||||
shutil.copyfile(runtime,bins/'libunwind.dll')
|
||||
sha=lambda p:hashlib.sha256(p.read_bytes()).hexdigest()
|
||||
fixture=root/'examples/release1'
|
||||
def inventory(p): return {f.relative_to(p).as_posix():{'bytes':f.stat().st_size,'sha256':sha(f)} for f in p.rglob('*') if f.is_file()}
|
||||
baseline=inventory(fixture)
|
||||
assert len(baseline)==37
|
||||
for name in ['collision-a','external-b']: shutil.copytree(fixture,run/name)
|
||||
fresh=run/'fresh-c';fresh.mkdir()
|
||||
for f in fixture.rglob('*'):
|
||||
if f.is_file() and f.suffix!='.arcadia':
|
||||
p=fresh/f.relative_to(fixture);p.parent.mkdir(parents=True,exist_ok=True);shutil.copyfile(f,p)
|
||||
assert len(inventory(fresh))==7 and not list(fresh.rglob('*.arcadia'))
|
||||
receipt={'source':source,'profile':'dev/unoptimized','target':'x86_64-pc-windows-gnullvm','binary':{'bytes':(bins/'arcadia-studio.exe').stat().st_size,'sha256':sha(bins/'arcadia-studio.exe')},'runtime':{'bytes':(bins/'libunwind.dll').stat().st_size,'sha256':sha(bins/'libunwind.dll')},'baseline':baseline,'fresh_companions':inventory(fresh),'declared_rename':{'activity':'61f7bbfb-74a4-5540-9182-2583dfb27a49','before':'Assess pressure alarm','after':'Assess pressure alarm QA46'},'external_dependency':'oa/activities/activity_oa_restore_work.arcadia','external_comment':'\n// native #46 external-edit probe\n'}
|
||||
(run/'baseline.json').write_text(json.dumps(receipt,indent=2)+'\n',encoding='utf-8')
|
||||
print(json.dumps({k:v for k,v in receipt.items() if k not in ['baseline','fresh_companions']},indent=2))
|
||||
@@ -0,0 +1,9 @@
|
||||
$taskRoot = Split-Path -Parent (Split-Path -Parent $PSScriptRoot)
|
||||
$env:RUSTUP_HOME = Join-Path $taskRoot '.local\toolchain\rustup'
|
||||
$env:CARGO_HOME = Join-Path $taskRoot '.local\toolchain\cargo'
|
||||
$env:RUSTUP_TOOLCHAIN = 'stable-x86_64-pc-windows-gnullvm'
|
||||
$env:PATH = "$env:CARGO_HOME\bin;$(Join-Path $taskRoot '.local\toolchain\llvm-mingw-20260826-ucrt-x86_64\bin');$env:PATH"
|
||||
$env:CARGO_TARGET_DIR = Join-Path $taskRoot '.local\target-gnullvm'
|
||||
# Keep this small development disk from accumulating multi-GiB incremental caches.
|
||||
$env:CARGO_INCREMENTAL = '0'
|
||||
$env:CARGO_TARGET_X86_64_PC_WINDOWS_GNULLVM_LINKER = 'clang.exe'
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"source": "0e83157e09d52e6152df91208e41693b62da2d46",
|
||||
"files": {
|
||||
"Cargo.toml": {
|
||||
"bytes": 512,
|
||||
"sha256": "66d401d9f7629f1f6d174ae41b7f9203c9ce3a76d69abfc4381227dbdec12eae"
|
||||
},
|
||||
"Cargo.lock": {
|
||||
"bytes": 119855,
|
||||
"sha256": "2aa80d113c5112b31c0767b874845d60f555e4e8ae7eb3ecd0b4b91954b55378"
|
||||
},
|
||||
"crates/oa-desktop/src/app.rs": {
|
||||
"bytes": 298661,
|
||||
"sha256": "4e470c5ba93d85f122b62b48cf27a6faa4c005abcab0d7180e6db598506e1c83"
|
||||
},
|
||||
"crates/oa-desktop/src/app/save_as_tests.rs": {
|
||||
"bytes": 10111,
|
||||
"sha256": "8de25876f05e487ec3ce9292b49abfa5793de1c141b0a26833b6dca276cd6fb5"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
"""Read-only packet check; Python 3 stdlib + Git. Optional --index verifies staged bytes."""
|
||||
from pathlib import Path
|
||||
import copy
|
||||
import hashlib
|
||||
import json
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
packet = Path(__file__).resolve().parent
|
||||
root = packet.parents[2]
|
||||
load = lambda p: json.loads(p.read_text(encoding="utf-8"))
|
||||
digest = lambda data: {"bytes": len(data), "sha256": hashlib.sha256(data).hexdigest()}
|
||||
inventory = load(packet / "evidence-files.json")
|
||||
files = {p.relative_to(packet).as_posix() for p in packet.rglob("*") if p.is_file()}
|
||||
assert files == set(inventory) | {"evidence-files.json"}, "Unexpected/missing packet file"
|
||||
for name, expected in inventory.items():
|
||||
assert digest((packet / name).read_bytes()) == expected, name
|
||||
if "--index" in sys.argv:
|
||||
for name in files:
|
||||
rel = (packet / name).relative_to(root).as_posix()
|
||||
staged = subprocess.check_output(["git", "show", ":" + rel], cwd=root)
|
||||
assert staged == (packet / name).read_bytes(), "Index changed bytes: " + name
|
||||
|
||||
native = packet / "native"
|
||||
baseline = load(native / "baseline.json")
|
||||
source = baseline["source"]
|
||||
identity = load(packet / "source-files.json")
|
||||
assert identity["source"] == source
|
||||
for name, expected in identity["files"].items():
|
||||
data = subprocess.check_output(["git", "show", source + ":" + name], cwd=root)
|
||||
assert digest(data) == expected, name
|
||||
original = {name: subprocess.check_output(
|
||||
["git", "show", source + ":examples/release1/" + name], cwd=root
|
||||
) for name in baseline["baseline"]}
|
||||
assert len(original) == 37
|
||||
assert {name: digest(data) for name, data in original.items()} == baseline["baseline"]
|
||||
dependency = baseline["external_dependency"]
|
||||
renamed = original.copy()
|
||||
old = b'oa_activity oa_assess "Assess pressure alarm" id "61f7bbfb-74a4-5540-9182-2583dfb27a49"'
|
||||
new = old.replace(b'"Assess pressure alarm"', b'"Assess pressure alarm QA46"')
|
||||
assert renamed[dependency].count(old) == 1
|
||||
renamed[dependency] = renamed[dependency].replace(old, new)
|
||||
injected = original.copy()
|
||||
injected[dependency] += baseline["external_comment"].encode("utf-8")
|
||||
phases = {
|
||||
"collision": original, "saved-a": renamed, "saved-c": renamed,
|
||||
"external-before": original, "inject": injected, "external-refused": injected,
|
||||
"restore": original, "external-recovered": original,
|
||||
}
|
||||
for phase, expected in phases.items():
|
||||
receipt = load(native / (phase + "-oracle.json"))
|
||||
assert receipt["status"] == "PASS" and receipt["phase"] == phase
|
||||
assert receipt["files"] == {name: digest(data) for name, data in expected.items()}, phase
|
||||
assert len(list(native.glob("*.png"))) == 16
|
||||
finish = load(native / "finished.json")
|
||||
assert finish["source"] == source and finish["exit_code"] == 0
|
||||
assert finish["binary_unchanged"] and finish["runtime_unchanged"]
|
||||
for stream in ["stdout", "stderr"]:
|
||||
assert finish[stream + "_bytes"] == 0 and (native / (stream + ".log")).read_bytes() == b""
|
||||
assert finish["binary_sha256"] == baseline["binary"]["sha256"]
|
||||
assert finish["runtime_sha256"] == baseline["runtime"]["sha256"]
|
||||
|
||||
oracle = native / "native-model-oracle"
|
||||
models = []
|
||||
for request_number, response_number, expected in [(2, 3, original), (4, 5, renamed)]:
|
||||
request = load(oracle / f"{request_number:02d}.request.json")
|
||||
response = load(oracle / f"{response_number:02d}.response.json")
|
||||
expected_sources = {name: data.decode("utf-8") for name, data in expected.items() if name.endswith(".arcadia")}
|
||||
assert len(expected_sources) == 30
|
||||
assert request == {"entry": "project.arcadia", "files": expected_sources}
|
||||
assert response["source_project"] == request
|
||||
models.append(response["model"])
|
||||
expected_model = copy.deepcopy(models[0])
|
||||
activity = baseline["declared_rename"]
|
||||
assert expected_model["elements"][activity["activity"]]["name"] == activity["before"]
|
||||
expected_model["elements"][activity["activity"]]["name"] = activity["after"]
|
||||
assert models[1] == expected_model
|
||||
result = load(oracle / "result.json")
|
||||
assert result["status"] == "PASS" and result["server_exit"] == 1
|
||||
assert result["runtime_sha256"] == baseline["runtime"]["sha256"]
|
||||
donor = load(packet / "donor/build-evidence.json")
|
||||
extraction = load(packet / "donor/extraction-check.json")
|
||||
assert result["server_sha256"] == donor["binary_sha256"]["arcadia-server.exe"]
|
||||
assert result["server_sha256"] == extraction["sha256"]["arcadia-server.exe"]
|
||||
assert result["runtime_sha256"] == donor["runtime_sha256"] == extraction["sha256"]["libunwind.dll"]
|
||||
print(json.dumps({"status": "PASS", "inventory_files": len(inventory), "phase_receipts": 8,
|
||||
"source_files_per_request": 30, "complete_model_delta": activity,
|
||||
"indexed_bytes_checked": "--index" in sys.argv}, indent=2))
|
||||
@@ -1,4 +0,0 @@
|
||||
fixture/** -text whitespace=-blank-at-eol,-blank-at-eof,cr-at-eol
|
||||
source-review-initial.md -text whitespace=-blank-at-eof,cr-at-eol
|
||||
evidence/** -text whitespace=-blank-at-eol,-blank-at-eof,cr-at-eol
|
||||
final-review.md -text whitespace=cr-at-eol
|
||||
@@ -1,29 +0,0 @@
|
||||
# E/F wrapped-label experiment evidence
|
||||
|
||||
Neither profile is promoted. Start with [validation and limitations](validation.md),
|
||||
then the locked [E](evidence/native-E/first-reading.md) and
|
||||
[F](evidence/native-F/first-reading.md) readings. Source gates and artifact
|
||||
conservation passed; dependable first-reading ownership did not.
|
||||
|
||||
Run from the repository root with Python 3, without launching the application:
|
||||
|
||||
```powershell
|
||||
python harness/experiments/wrapped-label-20261001/evidence/verify.py
|
||||
python harness/experiments/wrapped-label-20261001/evidence/verify.py --index
|
||||
python harness/experiments/wrapped-label-20261001/evidence/verify.py --source
|
||||
```
|
||||
|
||||
Default verification uses only included packet bytes. `--index` additionally
|
||||
requires this packet staged in Git; `--source` reads the pinned d089 source
|
||||
objects from Git. The helper checks the inventory, pristine E/F SVG conservation,
|
||||
full exported Project delta, reopened-F logical coordinates and process receipts.
|
||||
It does not render SVG or replay native interactions. Original checkers and
|
||||
launchers are preserved byte-for-byte under [evidence/scripts](evidence/scripts/);
|
||||
some retain historical local paths, so use the wrapper for portable offline checks.
|
||||
|
||||
The [earlier independent review](evidence/reviews/wrapped-final-evidence-review.md)
|
||||
predates fresh reopen tests. The [later saved-F review](evidence/reviews/wrapped-reopen-svg-review.md)
|
||||
covers their model/export files; [parent observations](evidence/reviews/wrapped-native-observation.md)
|
||||
describe the actual native events and limitations. Profile selection is external
|
||||
and not persisted. The ordinary Baseline reopen showed one line; it is not a
|
||||
claim of ordinary wrapping parity or a source-save round trip.
|
||||
@@ -1,70 +0,0 @@
|
||||
# Issue 38: bounded label-generator alternatives
|
||||
|
||||
Local-only feasibility study; root owns synthesis. Source baseline is the original saved full twelve-relation geometry in `.local/native-reading/manual/geometry-before.json`, not a simplified view. The existing-generator feasibility result is separately confirmed by the Rust probe at source `70cf` and published in packet `45bfb63b`; this note does not rerun or replace that evidence. Candidate B's fresh native evaluation is still independent and its outcome is not assumed here.
|
||||
|
||||
Only this report was written. No production/probe changes, compiler, native GUI, or Gitea actions. All alternative results below are read-only JavaScript double-precision rectangle/orthogonal-segment arithmetic over the saved JSON. They are feasible geometric witnesses, not fresh reading passes or production implementation recommendations.
|
||||
|
||||
## Fixed requirements and arithmetic
|
||||
|
||||
Keep all twelve paths, cards, semantic identities/endpoints/ports, other displayed labels, and authored fields exact. Change only the automatic conversation label's derived position and, for explicitly identified alternatives, its visual line wrapping. The semantic string remains `Technician service conversation` throughout. The conversation ID is `63009b5f-539e-5914-b630-ec6b7fefb4d5`.
|
||||
|
||||
Use full flat card rectangles inflated by 12, other nonempty label rectangles inflated by 4, and candidate label rectangle inflated by 3 for stroke intersection checks. Own/foreign clearances below are shortest distances from the **uninflated** label rectangle to the respective routes. Foreign routes retain semantic identity, including coincident portions. These conventions match the bounded probe's geometry assumptions; they do not establish a perceptual threshold.
|
||||
|
||||
The original label is 233 x 24, centered (1296.5,274.5). It intersects foreign allocation `sa_repair_allocation` at x1312.5, y179..325. Its own vertical route is x1162, y89.5..316.5. Other foreign verticals at x1065 and x1071 bound the space to its left. The foreign allocation also runs horizontally at y325, which matters for taller labels.
|
||||
|
||||
For multiline witnesses only, assume unchanged font size 13, line advance 16, and padding consistent with the existing 24-high one-line box: height = 8 + 16 * line_count; width = 16 + 7 * longest_line_character_count. These are explicit experimental dimensions. Production typography must use actual rendered line metrics and then recheck geometry; replacing exact semantic text with a shortened name is excluded.
|
||||
|
||||
## Actual witnesses
|
||||
|
||||
Every row below has **zero node, foreign-stroke, and other-label collisions** under the declared margins. All boxes stay inside the original whole-scene node extents, so their union cannot enlarge Fit bounds. Whole-scene Fit would remain geometrically unchanged under these fixed paths and cards.
|
||||
|
||||
| Alternative | Center; size | Own stroke intersections | Own / foreign clearance | Center displacement from baseline |
|
||||
| --- | --- | ---: | ---: | ---: |
|
||||
| D. Dynamic single-line corridor placement, permit own backing | (1191.75,274.5); 233 x 24 | 1 | 0 / 4.25 | 104.75 |
|
||||
| E. Two lines centered on own route, permit own backing | (1162,274.5); 142 x 40 | 1 | 0 / 20 | 134.5 |
|
||||
| F. Three lines beside own route, keep every stroke clear | (1230,254.2); 100 x 56 | 0 | 18 / 32.5 | about 69.53 |
|
||||
|
||||
D bounds: x1075.25..1308.25, y262.5..286.5. Own vertical x1162 passes through the box. The nearest foreign lines are x1071 and x1312.5, 4.25 units away on either side. A minimum-movement variant centered at (1193,274.5) moves 103.5 units but leaves only 3 units to the allocation. D's balanced witness maximizes horizontal clearance within this narrow corridor; its 4.25-unit clearance is only about **2.2 pixels at Fit**. Collision freedom therefore does not imply good association or legibility. A grid enumeration at 0.5-unit steps over x950..1470/y180..340 found the minimum-movement variant above, but this bounded grid is not a global optimum proof and is not a suggested production algorithm.
|
||||
|
||||
E wraps as `Technician service` / `conversation`; longest line is 18 characters, yielding width 142. Bounds are x1091..1233, y254.5..294.5. Own stroke is centered beneath the opaque backing; the closest foreign stroke is x1071, 20 units away. The box intentionally hides a 40-unit own-route interval, about 20.6 screen pixels at Fit. This may create clear line-label association through aligned entering/exiting segments, or may make the path look broken. Geometry cannot decide which. It moves farther than D but gains substantial foreign clearance and uses only two text lines.
|
||||
|
||||
F wraps as `Technician` / `service` / `conversation`; longest line is 12 characters, yielding width 100. Bounds are x1180..1280, y226.2..282.2. Its own anchor can use the **already-existing fraction .55**, which is approximately (1162,254.2); the existing right-offset formula for the narrower box gives +68. The label is 18 units right of its own vertical path, 32.5 units left of the allocation vertical, and 42.8 above the allocation horizontal. It adds no strokes and obscures no route. It does increase label height from 24 to 56 (about 12.4 to 28.9 screen pixels at Fit), at the same small font size. The geometric own-versus-foreign clearance margin is 14.5 units, about 7.5 pixels; it is an evaluator observation, not a validated scoring threshold.
|
||||
|
||||
F at the original .5 fraction is also collision-free: center (1230,274.5), same width/height, displacement 66.5. However, its bottom lies 22.5 units above the allocation horizontal, leaving only 4.5 units of own-versus-foreign distance advantage. Thus a first-zero-collision chooser can still pick a perceptually weaker candidate even after wrapping. The .55 witness improves that geometry without introducing a new fraction generator.
|
||||
|
||||
## Materially different definitions
|
||||
|
||||
**D: dynamic free-interval generation, unchanged text shape, changed own-stroke objective.** For a bounded set of existing route fractions, take candidate label y positions from the existing offsets. Subtract forbidden horizontal center intervals induced by padded nodes, other labels, and foreign strokes that meet the candidate's vertical extent. Generate at most the nearest feasible center to the old center plus an interval midpoint; do not raster-scan the canvas. Permit covering the owning stroke only where one unique straight own segment enters and exits opposite box sides and no foreign semantic owner occupies that segment. This is a new generator and a new collision objective, not a tie-break patch. Keep node/other-label/foreign collisions hard exclusions. Use limited candidates and charged comparisons before considering any reusable spatial index.
|
||||
|
||||
D demonstrates that a single line can avoid the wrong allocation under a changed objective, but its narrow foreign margins weaken it as the next visual experiment. Reject the tempting minimum-movement variant as a preferred witness: it optimizes movement by hugging the wrong stroke at the collision margin. Also reject unconstrained own-stroke occlusion at turns or shared runs.
|
||||
|
||||
**E: bounded wrapping plus on-route placement.** Derive one-, two-, and three-line layouts from legal word boundaries, preserve the complete string, and measure them at the same font size. Include placement centered on a unique straight own segment as an explicit alternative. Keep all foreign strokes/cards/other labels excluded while permitting the defined own-route backing interval. Limit line count and candidate count; if a long unbreakable token cannot fit, fail this fallback rather than shrink text indefinitely or change the name. E is the smallest actual witness with materially comfortable foreign clearance and only two lines, but its intentional route interruption needs direct comparison.
|
||||
|
||||
**F: bounded wrapping with the existing side-placement family and improved ownership comparison.** For each permitted line layout, recompute its real width/height, then apply existing fractions and side-offset construction. Maintain exclusion of **all** strokes, including own strokes. Among feasible candidates, compare own/foreign association with displacement and wrapping cost; report these dimensions separately before accepting any scalar weighting. Prefer one-line layouts only when they also meet the experiment's association gate, not merely because they are collision-free. F is the strongest current geometric comparison if B fails: it keeps all routes visibly continuous, moves less than D/E, and has a clear own/foreign separation margin. Its tradeoff is a taller and less quickly scanned name. It requires matching multiline layout, hit/backing bounds, and SVG output; simply inserting a newline in the existing string/size formula is incorrect.
|
||||
|
||||
No one of D/E/F is accepted for production. A useful next native comparison would be **E versus F versus baseline**, using these frozen witnesses, after B's current result. D need not consume a native run unless the narrower alternatives prove unreadable or typography invalidates their feasibility.
|
||||
|
||||
## Rejected or deferred alternatives
|
||||
|
||||
- **Same fixed candidates with another weight:** already falsified for collision-preserving A. The new widths/objectives above are explicit departures.
|
||||
- **A long horizontal-own-segment preference alone:** own horizontal segments are 18, 143, 18 units. No segment accommodates the original 233-wide label. The 143-unit segment is crossed by foreign corridors at 1065/1071 and sits next to the system/repair cards. Merely moving the old label above that segment reproduces foreign/corner crowding. It can remain one candidate family, not a solution claim.
|
||||
- **Move the original full-width box just outside the allocation and add a leader:** local rightward placements require the leader to cross that foreign vertical; guarded B would properly suppress it. Large exterior placements add displacement and potential Fit costs. A short guard cannot repair arbitrary distant placement.
|
||||
- **Minimal movement as the first objective:** D's 3-unit foreign margin is the counterexample. Use movement to break ties only after meaningful ownership/clearance evidence.
|
||||
- **Shorter semantic text, hidden relations, or smaller font:** these evade the intended full-scene reading task. Multiline display must preserve the entire name and font size.
|
||||
- **Global packing/rerouting or a new general layout API:** not justified by three concrete label-only witnesses. Keep exploratory geometry separate until a reader establishes an improvement.
|
||||
|
||||
## Policy boundaries before any whole-scene implementation
|
||||
|
||||
These witnesses concern one automatic label in an unnested scene. A whole-scene policy must treat authored label offsets/fractions as authoritative and must not silently wrap or move authored labels as collateral changes. All other automatic-label settlement must be inventoried, not hidden behind identical serialized fields.
|
||||
|
||||
Include association-end text and every visible label as obstacles. Nested/folded views require their actual label/card/header visibility rules; the flat-node arithmetic must reject or separately handle them, not silently reuse traversable route obstacles for text. Shared/partially coincident paths retain all semantic owners; an apparently own-only segment with another owner is foreign for the guard. Segment indices are zero-based windows over original points, independent of collision deduplication.
|
||||
|
||||
Separate fixed-path label-order permutations from full UUID-remapped reroutes, because the latter changes the evidence under the label. Keep existing gesture baseline caching; do not recompute wrap/interval packing on unchanged pointer hover. Charge extra interval/candidate scoring work and bound it on geometry rebuilds. A target label drag must commit once, preserve authored shape/anchor semantics, and remain stable across Undo/Redo, reopen, and canvas/SVG rendering. A layout policy depending continuously on zoom can cause label jumps; use zoom for evaluation first, not an automatic per-frame generator.
|
||||
|
||||
## Explicit gates and stop rule
|
||||
|
||||
Before implementation, render the measured typography for E/F in an isolated experiment with frozen scene/viewport. Recheck the reported bounds and all collisions. Reject a witness if actual text exceeds the assumed box, any node/foreign/other-label collision appears, endpoints disappear from Fit, or any semantic/path/authored state changes.
|
||||
|
||||
Then use a reader without prior endpoint exposure: first unselected path and port-owner identification, no Inspector answer beforehand. Require the conversation's original wrong allocation association to disappear without new wrong turns on Request/Report or the port mappings; record font readability and multiline scan cost separately. For E, explicitly ask whether the path remains traceable across the label backing; for F, whether stacked words associate with the left conversation route rather than the lower/right allocation. Any need to explain the intended attachment first is a failure of this experiment, not a pass after coaching.
|
||||
|
||||
A positive isolated result permits considering a small production rule and its regression/latency tests; it does not close the broader full-view shared-corridor readability issue. If E/F both fail first reading, stop tuning weights around this fixture and record the failed hypotheses before choosing a different approach.
|
||||
@@ -1,108 +0,0 @@
|
||||
# E/F measured-label experiment implementation handoff
|
||||
|
||||
Local uncommitted implementation against `6ea7518e7be5b5f17d5fbc5d667da8b388058af4`.
|
||||
No compiler, GUI, Gitea, commit or push run by this worker. Root owns all gates.
|
||||
`rustfmt --edition 2024 --config skip_children=true` completed for the six
|
||||
explicitly owned/authorized Rust files. This establishes formatting only.
|
||||
|
||||
## Changed implementation
|
||||
|
||||
- New private `crates/oa-desktop/src/diagram/label_layout_experiment.rs` contains
|
||||
read-once external E/F/Baseline profile, one-target identity guards, measured
|
||||
typography cache, shared Layout, fixed placements, collision guards, Canvas
|
||||
line records, explicit SVG line export and five focused tests.
|
||||
- `diagram.rs`: Scene stores the shared Layout, profile and font-system version;
|
||||
both ordinary and work-preview scenes apply it before geometry consumers.
|
||||
Existing cache additionally keys profile/font version. Drawing and SVG consume
|
||||
the same ordered line positions. Derived target label bounds feed existing hit
|
||||
and route-drag start code. The private adapter applies to already-routed data.
|
||||
- Parent-authorized thin calls: `app.rs` Fit, `diagram_usage.rs` whole/edge bounds,
|
||||
and `diagram/work_drag.rs` dirty-input shield. No second routing call introduced.
|
||||
- `diagram/attachment_tests.rs`: existing manual Scene literal gains default fields.
|
||||
- Parent supplied the pinned `harness/experiments/wrapped-label-20261001/fixture/eight-card.json`;
|
||||
it is referenced with include_bytes, not rewritten by this worker.
|
||||
|
||||
No changes to core, schema, source formats, canonical label.text/Name, Project,
|
||||
port/card/path state, or B's cue. The fixture and diagram are identified exactly;
|
||||
other labels return untouched. Baseline returns the complete routed value unchanged.
|
||||
Automatic guard failure leaves baseline rather than painting an invalid narrower
|
||||
shape over an old hitbox. Nested/collapsed scenes are excluded from this witness.
|
||||
|
||||
## Measurement and scope
|
||||
|
||||
Pinned Iced 0.14 graphics Paragraph is accessible through
|
||||
`iced::advanced::graphics::text::Paragraph`; the same implementation is used by
|
||||
Canvas Text. Each fixed line is shaped at font 13 with absolute line height 16,
|
||||
Basic ASCII shaping and no wrap. Width comes from Paragraph min_width; baseline
|
||||
and resolved face family come from actual cosmic-text runs. A single face per
|
||||
line is required; mixed fallback or unsupported metrics reject the trial.
|
||||
Cached measurements are keyed by profile and Iced font-system version; ordinary
|
||||
hover, selection and camera changes reuse the entire Scene. No character-count
|
||||
width heuristic is used.
|
||||
|
||||
SVG writes explicit per-line x and shaped baseline y with the resolved family,
|
||||
not browser wrapping or generic sans-serif. It does not embed the font: native
|
||||
export rendering and font availability on another machine remain a validation
|
||||
boundary, not proven glyph parity. Tests compare generated text/geometry records,
|
||||
not raster output or browser appearance.
|
||||
|
||||
Automatic E permits exactly one straight own segment crossing both padded sides;
|
||||
all foreign strokes, cards and labels (including association-end labels) are
|
||||
excluded. Automatic F clears all strokes. Guards use measured boxes, card margin
|
||||
12, other-label margin 4 and stroke margin 3. Fixed F's own-is-closer width margin
|
||||
is explicitly asserted by its fixture test rather than accepted as a general
|
||||
placement scoring rule.
|
||||
|
||||
Authored target labels keep the externally selected line shape and honor actual
|
||||
fraction/offset. They deliberately retain that shape when a user moves into a
|
||||
collision, reporting Layout.clear=false; silently unwrapping/resetting would
|
||||
violate the trial boundary. Conservative whole-scene bounds retain prior bounds
|
||||
and include moved authored boxes. No ordinary save/reopen formatting contract,
|
||||
general typesetter, placement winner, or production policy is claimed.
|
||||
|
||||
## Parent gates
|
||||
|
||||
Suggested targeted test selector:
|
||||
|
||||
```powershell
|
||||
cargo test --locked -p oa-desktop label_layout_experiment -- --test-threads=1 --nocapture
|
||||
```
|
||||
|
||||
Five tests cover full unchanged baseline and all 12 point arrays/other labels,
|
||||
actual measured dimensions and guard result, matching Canvas/SVG/picking/focus
|
||||
geometry records, foreign-stroke/card rejection without mutation, authored
|
||||
fraction/offset/shape retention during real route-preview construction, and
|
||||
actual Scene/measurement cache reuse plus profile/revision invalidation.
|
||||
The first test prints measured line/family/bounds records for parent capture.
|
||||
|
||||
Compilation, strict lint, fixture guard feasibility on this font installation,
|
||||
native rendering, actual edit lifecycle, performance, independent fresh-reader
|
||||
trial, and integration/publication remain pending. Preserve first failures and
|
||||
revise at the responsible layer; no successful test/native outcome is asserted.
|
||||
|
||||
## Captured failure and responsible preview-baseline correction
|
||||
|
||||
Parent observed initial source `d8ccd6ed49adac799c02a3c52cb9e431214a4963`
|
||||
fail compilation because the test EdgeRoute literal omitted its attachment fields.
|
||||
The first compiler log remains `.local/wrapped-label-tests-first.log`.
|
||||
At regression source `ebb6a9980b11c4d4df2f7e413c6b135a337f6f6d`, parent observed
|
||||
five tests passing and the added different-edge preview regression failing:
|
||||
guard rejection cleared Layout, but target geometry retained wrapped E bounds
|
||||
(119.174805 x 40) instead of core one-line bounds (233 x 24). Parent's measured
|
||||
F was 89.18213 x 56; both used Segoe UI. These are parent-reported executed
|
||||
results, not worker-executed gates. Failed transition log is retained at
|
||||
`.local/wrapped-label-regression-first.log`.
|
||||
|
||||
Correction, now local and frozen for parent compilation: Scene retains a
|
||||
`core_routed` Arc before the experiment modifies derived presentation. Both
|
||||
ordinary and allocation-work-preview constructors store that raw Arc; Baseline
|
||||
shares it with `routed` without copying. `begin_route_with_profile` captures
|
||||
`core_routed`, so core preview freezes raw one-line labels and a refused wrapper
|
||||
leaves a complete valid fallback. No guards, measured dimensions, route/path
|
||||
scoring or failing-regression assertions were changed. The existing authored
|
||||
preview test setup now uses the same raw baseline contract; existing cache test
|
||||
also checks Baseline's Arc identity. The one manual Scene literal was updated.
|
||||
|
||||
No additional compiler/native execution by this worker. Explicit-file rustfmt
|
||||
and git diff --check passed. Parent rerun of all six tests and broader gates is
|
||||
pending at this correction checkpoint.
|
||||
@@ -1,59 +0,0 @@
|
||||
# Independent adversarial review: next #38 label experiment
|
||||
|
||||
Recommend a bounded measured F prototype, with E retained as the materially different comparison. Defer D. F has enough geometric advantage to justify a real Rust/Iced test, but neither F nor E is an accepted remedy. Candidate B's source correctness and passing gates do not reverse its unsuccessful fresh-reading result: correct participants with a plausible foreign-allocation alternative is not reliable label ownership.
|
||||
|
||||
Read the alternatives note, immutable full baseline geometry/Project, prior native/cue caveats, and current derived-label, picking, drag and SVG consumers. Independently recomputed rectangle/orthogonal-segment clearances and card/other-label exclusions from actual baseline data. No broad external research was needed to distinguish these local hypotheses. No code, compiler, GUI, Gitea or commit action; this report is the only new artifact.
|
||||
|
||||
## Comparison and recommendation
|
||||
|
||||
Independent arithmetic reproduces the witnesses: D own/foreign clearance 0/4.25, E 0/20, F 18/32.5. None overlaps padded visible cards or the other two nonempty labels. The full scene retains eight cards, twelve semantic routes and the independently recorded 37 distinct stroke geometries. These are backing-box distances, not measured glyph or perceptual clearances.
|
||||
|
||||
D keeps one-line scanning but requires a new free-interval generator and hides its own route while leaving only about 2.2 pixels to foreign routes at Fit. That is weak separation for considerable algorithmic change. It should not consume the next native trial unless measured typography invalidates both narrower alternatives.
|
||||
|
||||
E has only two lines and directly aligns its label with a uniquely owned straight segment. This can be an effective conventional line-label cue, but it intentionally obscures about 40 world units of the path and moves farther. A reader must reconnect the entering/exiting stroke across text; in this already congested scene that may recreate a branch ambiguity. E is a useful comparator precisely because it tests association by on-line interruption rather than proximity.
|
||||
|
||||
F preserves every visible route, has the least displacement, separates the foreign stroke from the label backing, and uses an existing route fraction/side-placement family. Unlike B it removes the foreign stroke through the text rather than adding a faint secondary cue. This is a meaningful improvement in the hypothesis, not merely another weight. The cost is three-line scanning at the same tiny Fit font. F may still look associated with the nearby allocation, or require zoom for words. The three-line box is only about 29 pixels high at Fit; each character remains about 6.7 pixels at nominal font size 13. Neither geometry nor extra height establishes legibility.
|
||||
|
||||
Prototype the frozen measured F .55 witness first, retaining E .5 for a separate fresh comparison. Do not immediately implement a general winner-selection algorithm. A fixed-witness experiment can falsify the visual premise before spending effort on candidate objectives, global ordering or persistence schema.
|
||||
|
||||
## Blocking conceptual issues before production/parity claims
|
||||
|
||||
1. **Authored layout transition is unspecified.** EdgeLabel currently persists fraction and offset only. The note requires automatic wrapping and also says authored labels must not silently wrap. Dragging automatic F makes it authored; a naive implementation then unwraps it, changes its box and may put the foreign stroke back through the label. Saving/reopening loses any transient remembered wrapping. Decide explicitly whether wrapping is derived independently of authored position, an opt-in display policy, or persisted authored presentation before claiming drag/Undo/Redo/reopen parity. Do not add a serialized field solely to rescue an unvalidated visual witness.
|
||||
|
||||
2. **Measured text and consumed geometry must be the same layout.** Inserting newlines into text while retaining old dimensions, or painting narrower text over the old label hitbox, invalidates the experiment. Actual font, font size, shaping, advance, line height, baseline, alignment and padding must determine one geometry object. The whole name stays canonical; derived line breaks are presentation. SVG must consume the same measured line positions/bounds rather than relying on browser auto-wrap or a different generic font. A screenshot-only drawing patch cannot establish edit/export/spec parity.
|
||||
|
||||
3. **A production placement objective remains undecided.** F .5 is already collision-free but weaker than .55. Existing first-zero exit will choose it. The next experiment must not claim an implemented general rule merely because a manually chosen .55 screenshot looks better. Keep the witness explicitly fixed, then use observed readability to decide a separate ordering/association criterion. Do not silently elevate minimum displacement or nearest-box margin into a validated human metric.
|
||||
|
||||
These issues do not block a clearly isolated visual experiment. They block general product or persisted-label acceptance.
|
||||
|
||||
## Feasible implementation boundary
|
||||
|
||||
Use an isolated experiment profile, explicitly selecting the target relation and frozen E/F line split/anchor policy. Derive a transient LabelLayout containing the original display text, ordered line strings and measured positions, anchor/fraction, union backing/hit bounds and font identity/metrics. Preserve Project, canonical Name, source text, all routed point arrays and authored fields. Apply that layout to the derived scene before any consumer uses it, not only in the final paint call.
|
||||
|
||||
Canvas painting, label hit testing, label drag start/offset calculation, focus/navigation bounds, overall scene bounds and SVG export must read that same derived layout. Existing semantic relation identity remains the hit result; no new relation or leader target is introduced. Both preview and committed scenes need the same transformation. A test-only/external experiment profile can preserve the target's chosen layout through the controlled editing trial, but then save/reopen evidence must explicitly say it requires that experiment profile and does not prove the ordinary product's persisted formatting contract. Alternatively postpone edit/reopen acceptance until the authored-layout decision is resolved.
|
||||
|
||||
Keep the old one-line layout as the default for all unrelated labels. For the first fixed-path experiment, freeze and inventory those other derived labels rather than allowing an unnoticed re-settlement. This is a deliberately scoped witness, not yet a whole-scene policy. If the witness passes, define the shared derived-layout interface and documentation at the appropriate layer before promoting it into production routing or export. Avoid a general typesetting/layout framework until there is positive evidence.
|
||||
|
||||
## Finite assumptions to falsify early
|
||||
|
||||
- Re-measure before native reading. With F's left side fixed 18 units from x1162, nearest foreign vertical x1312.5 gives clearance 132.5 minus measured width. F retains the claimed own-is-closer advantage only below width 114.5, and its 3-unit foreign exclusion only below width 129.5 (strict-border details must follow the scorer). The predicted width100 has useful but finite slack. Actual glyph extents and antialiasing are distinct from backing bounds.
|
||||
- At F center y254.2, the foreign horizontal y325 yields clearance 70.8 minus half the measured height. Recheck all actual card/label/stroke constraints, not just that one line. For E, recheck the enlarged backing against the entire unique straight own segment, both margins and all foreign segments.
|
||||
- E's permitted own crossing must be one uniquely owned straight interval entering and leaving opposite sides. Reject bends, endpoint/port-symbol coverage, shared or partially coincident foreign runs, unrelated strokes just beyond a rectangle boundary, and other label/node interception. Ownership lists must retain all IDs rather than deduplicating to one owner.
|
||||
- F must keep all strokes clear after measurement, including its own; do not add an explanatory cue when the comparison is supposed to isolate wrapping/placement.
|
||||
- Names with Unicode, long unbreakable tokens, punctuation or explicit whitespace need declared non-destructive line-breaking rules. A failure to fit must fail this experimental fallback rather than shrink font, truncate semantic Name or insert source newlines. This one English name does not validate general wrapping.
|
||||
|
||||
## Reading experiment and causal controls
|
||||
|
||||
Predeclare fixed F and E geometry after measurement. Hold complete model, paths, cards, viewport, zoom, font and other labels identical. Disable B cues in these comparisons. Record actual pixel and world bounds, rather than assuming unchanged Fit because the old arithmetic fit inside node extents.
|
||||
|
||||
First reading must precede Inspector/selection/highlighting or explanation of the intended owning path. A reader who has already identified this conversation in B or baseline is not fresh. Showing the same participant names in baseline before F also teaches the answer. Prefer fresh readers per arm; if constrained, use separately declared isomorphic, relabeled scenes with counterbalanced presentation and report that limitation. Do not present repeated same-scene exposure as independent accuracy.
|
||||
|
||||
Record the first path chosen and participant/port-owner answer, confidence, wrong alternatives, tracing time, pan/zoom and word-reading difficulty. Correct participants with persistent plausible allocation ownership remains failure. Ask an unleading trace task first; ask whether E looks broken or F appears attached to the allocation only afterward. Verify Request/Report and the two port mappings so improvement does not come at their expense. A correct click after highlighting proves selectability, not unselected association. Stop if coaching is needed, target words become hard to scan, another relationship becomes harder, or full-scene endpoint context is lost.
|
||||
|
||||
## Later integration gates
|
||||
|
||||
After a positive visual witness, compare full Project and every computed route/port/node/label record. Any other automatic label movement must be listed. Exercise target hitbox at each line and padding, drag start/preview/commit, Undo/Redo, cancellation, save/export/reopen under the declared layout policy, and canvas/SVG parity. Preserve authored offsets/fractions and unrelated authored labels exactly.
|
||||
|
||||
For a generalized rule, separately test fixed-path label-order permutations and consistent UUID-remapped reroutes. Do not conflate the latter with a label-only change. Charge every new measurement/candidate/foreign-segment comparison, retain a bounded budget and deterministic fallback, and measure actual scene rebuild and active preview costs on the representative scene plus the existing dense control. Cache font/layout for unchanged text/style; hover, selection and camera changes must not reshape or rescore. Do not add an index or optimizer before measurements justify it.
|
||||
|
||||
A successful first F reading would justify the next bounded implementation decision. It would not close shared-corridor ambiguity, broad accessibility, arbitrary names, nested/folded views, full OA/SA usability, or production release acceptance. If both measured E and F fail, record the hypotheses as rejected and change approach instead of tuning around this one scene.
|
||||
@@ -1,17 +0,0 @@
|
||||
{
|
||||
"source": "6e7c4ddaf0775198384a8c4882809ea8e14b2976",
|
||||
"start": "2026-10-02T02:05:58.837634+00:00",
|
||||
"binary_sha256": "d55ecad4b0f75c0c9c26625e5441bef9c9360890b65bc13236c6ebfaf03d631e",
|
||||
"runtime_sha256": "f45604a12e8bcd839fd86f667c1be1cc7c4f9da2b3c69ff381ac708f0e1ae7d4",
|
||||
"fixture_sha256": "9db1015369f450d5810c96a01fddb8a009d57f6aafbda5182703f15ded23d9c8",
|
||||
"cwd": "C:\\ar-label-cue-01a0d717\\.local\\native-cue-baseline\\working",
|
||||
"path": "C:\\Windows\\System32;C:\\Windows",
|
||||
"pid": 10220,
|
||||
"exit_code": 0,
|
||||
"finished": "2026-10-02T02:09:43.777146+00:00",
|
||||
"stdout_bytes": 0,
|
||||
"stderr_bytes": 0,
|
||||
"fixture_unchanged": true,
|
||||
"binary_unchanged": true,
|
||||
"runtime_unchanged": true
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
{
|
||||
"source": "6e7c4ddaf0775198384a8c4882809ea8e14b2976",
|
||||
"start": "2026-10-02T02:05:58.837634+00:00",
|
||||
"binary_sha256": "d55ecad4b0f75c0c9c26625e5441bef9c9360890b65bc13236c6ebfaf03d631e",
|
||||
"runtime_sha256": "f45604a12e8bcd839fd86f667c1be1cc7c4f9da2b3c69ff381ac708f0e1ae7d4",
|
||||
"fixture_sha256": "9db1015369f450d5810c96a01fddb8a009d57f6aafbda5182703f15ded23d9c8",
|
||||
"cwd": "C:\\ar-label-cue-01a0d717\\.local\\native-cue-baseline\\working",
|
||||
"path": "C:\\Windows\\System32;C:\\Windows",
|
||||
"pid": 10220
|
||||
}
|
||||
|
Before Width: | Height: | Size: 7.0 KiB |
@@ -1,13 +0,0 @@
|
||||
{
|
||||
"source": "d0896ced75fea73bcda6bd14f259a34503840704",
|
||||
"platform": "Windows x86_64-pc-windows-gnullvm; Rust 1.98.1; LLVM-MinGW 20260826 UCRT; jobs1 incremental0",
|
||||
"environment": "C:/Users/User/Documents/Git/ARCADIA-Studio/.local/toolchain/env.ps1",
|
||||
"target_directory": "C:/Users/User/Documents/Git/ARCADIA-Studio/.local/target-gnullvm",
|
||||
"final_gates": [
|
||||
{"command":"cargo fmt --all -- --check","log":"wrapped-label-format-check.log","exit_code":0,"note":"fresh parent check after earlier summary named a nonexistent log; empty output with exit0"},
|
||||
{"command":"cargo test --locked -p oa-desktop -- diagram:: diagram_usage:: fit_ --test-threads=1 --nocapture","log":"wrapped-label-diagram-tests.log","exit_code":0,"passed":126,"failed":0,"ignored":0,"filtered":1426},
|
||||
{"command":"cargo clippy --locked -p oa-desktop --all-targets -- -D warnings","log":"wrapped-label-clippy.log","exit_code":0},
|
||||
{"command":"cargo build --locked -p oa-desktop --bin arcadia-studio","log":"wrapped-label-build.log","exit_code":0}
|
||||
],
|
||||
"limits":"Focused desktop gates; no full workspace or desktop suite rerun, release packaging, Linux or performance acceptance"
|
||||
}
|
||||
@@ -1,334 +0,0 @@
|
||||
{
|
||||
"baseline/finished.json": {
|
||||
"bytes": 721,
|
||||
"sha256": "963bc0b874318519b8c7678e8026cb2798a92bdc77151510126b5f53048da6da"
|
||||
},
|
||||
"baseline/started.json": {
|
||||
"bytes": 518,
|
||||
"sha256": "8465e67b75b252ff02c86e3a302bf888535b50aa2d587b852a1d2072b41bdf3f"
|
||||
},
|
||||
"baseline/stderr.log": {
|
||||
"bytes": 0,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"baseline/stdout.log": {
|
||||
"bytes": 0,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"baseline/working/baseline.svg": {
|
||||
"bytes": 7209,
|
||||
"sha256": "645ee69cc97d11acc812539b62528d7fdceec32aa2516d4ade8508016164119d"
|
||||
},
|
||||
"baseline/working/eight-card.json": {
|
||||
"bytes": 138661,
|
||||
"sha256": "9db1015369f450d5810c96a01fddb8a009d57f6aafbda5182703f15ded23d9c8"
|
||||
},
|
||||
"commands.json": {
|
||||
"bytes": 1172,
|
||||
"sha256": "a6c2d18688bfa1eda0e6efc4a1c5897d2b705b40b50faec5ee5a1136cd8fce4a"
|
||||
},
|
||||
"gates/wrapped-label-build.log": {
|
||||
"bytes": 309,
|
||||
"sha256": "3e9d2faf1a2d098a2309f08677b66b4a5ab4dcbdf2af06a93d65cb1875d5ed4b"
|
||||
},
|
||||
"gates/wrapped-label-clippy.log": {
|
||||
"bytes": 379,
|
||||
"sha256": "cdcbd2156854eba0cac90a96b87de470d3c90e50ed9a7b6f5169819849269dae"
|
||||
},
|
||||
"gates/wrapped-label-diagram-tests.log": {
|
||||
"bytes": 16179,
|
||||
"sha256": "801d4e9223530db238aeba790fc37ac99f8e82404c41cff1f9983d89ce961921"
|
||||
},
|
||||
"gates/wrapped-label-format-check.log": {
|
||||
"bytes": 0,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"gates/wrapped-label-regression-first.log": {
|
||||
"bytes": 3269,
|
||||
"sha256": "4759fdfa2a879ae8e645d27fb3a6ea89fef5181efa67bb1cc82a7d7131141bbc"
|
||||
},
|
||||
"gates/wrapped-label-tests-first.log": {
|
||||
"bytes": 877,
|
||||
"sha256": "224b7168de971dbc60a3ec1e8647cf8fe1c826ee68338ef6d2424f14035b8782"
|
||||
},
|
||||
"native-E/baseline.json": {
|
||||
"bytes": 717,
|
||||
"sha256": "8d252d9652eb00a07034e9f3ba8801cd6ec73475aa07ee8eb004ad1618e0de2c"
|
||||
},
|
||||
"native-E/captures/00-fit-pristine.jpg": {
|
||||
"bytes": 151158,
|
||||
"sha256": "48adaf65c6b655e66bcab47d3a7a4ac9080a0da4f7e98dc84e9ea9573f731acb"
|
||||
},
|
||||
"native-E/captures/01-svg-exported.jpg": {
|
||||
"bytes": 146692,
|
||||
"sha256": "769c4df771000ff444419104e99c10557a5846d81ccee71d014d348c20e456c2"
|
||||
},
|
||||
"native-E/captures/02-first-line-selected.jpg": {
|
||||
"bytes": 149452,
|
||||
"sha256": "42648a450d21b2654d02eab5df5e53cb43984b1917d5c75ced31a1dd3fdba84e"
|
||||
},
|
||||
"native-E/captures/03-second-line-selected.jpg": {
|
||||
"bytes": 149304,
|
||||
"sha256": "5584ac78406107367a9b72773ac5927c675068b73c9b7f1418b34923a294d38f"
|
||||
},
|
||||
"native-E/finished.json": {
|
||||
"bytes": 687,
|
||||
"sha256": "20ea462b837ac98d02fe41b56446d1fe8a4f2e6f7a640b26c37e45016e069537"
|
||||
},
|
||||
"native-E/first-reading.md": {
|
||||
"bytes": 4778,
|
||||
"sha256": "9de823d0d43e7753f2799e203a68332b7361c1c6c2f8f18baece5c60baa01c66"
|
||||
},
|
||||
"native-E/started.json": {
|
||||
"bytes": 534,
|
||||
"sha256": "9c8b4e4152d8ed361e39d5b8719560a1f8c27df5e9764987fdcebd2df8f7330a"
|
||||
},
|
||||
"native-E/stderr.log": {
|
||||
"bytes": 0,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"native-E/stdout.log": {
|
||||
"bytes": 0,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"native-E/svg-conservation.json": {
|
||||
"bytes": 3162,
|
||||
"sha256": "968ae031b1e25940c70332b3a3351df7dc08b11040b211537c477c0d7fe3e88b"
|
||||
},
|
||||
"native-E/working/eight-card.json": {
|
||||
"bytes": 138661,
|
||||
"sha256": "9db1015369f450d5810c96a01fddb8a009d57f6aafbda5182703f15ded23d9c8"
|
||||
},
|
||||
"native-E/working/pristine-E.svg": {
|
||||
"bytes": 7353,
|
||||
"sha256": "d84f6c4b03a305f89849b013e809501f7d613203fd2c71bea80b645958a4b64c"
|
||||
},
|
||||
"native-F/baseline.json": {
|
||||
"bytes": 717,
|
||||
"sha256": "68a070420bfe0d118048dbbc6e7d865eead6dc21a26c99f96d6931888d5ce340"
|
||||
},
|
||||
"native-F/captures/00-fit-pristine.jpg": {
|
||||
"bytes": 151241,
|
||||
"sha256": "213647f0f826deb78267ff58197755e17bfcc6f5f9b86273f90093a45769870e"
|
||||
},
|
||||
"native-F/captures/01-first-line-selected.jpg": {
|
||||
"bytes": 149733,
|
||||
"sha256": "186d87402cd2aca0a305e55f050c916116135c2044b9e76aad7f7e66d7ad57e5"
|
||||
},
|
||||
"native-F/captures/02-middle-line-selected.jpg": {
|
||||
"bytes": 149546,
|
||||
"sha256": "e11fd35de721db851d53410e62bc5b2a022080459a0d844fb0f9d412db304c1d"
|
||||
},
|
||||
"native-F/captures/03-label-moved.jpg": {
|
||||
"bytes": 150951,
|
||||
"sha256": "4c3c39e2c4e04eebdbe725d8cc2dd4a68f26ebef1d2725351901dec0d1c0e04c"
|
||||
},
|
||||
"native-F/captures/04-undo.jpg": {
|
||||
"bytes": 149702,
|
||||
"sha256": "cffb756bad10e0378758da7e0fae9e9c1a49791199dcfa025532e63f776fe697"
|
||||
},
|
||||
"native-F/captures/05-redo.jpg": {
|
||||
"bytes": 149546,
|
||||
"sha256": "766083066a95d57cadd01e4b6ed70227eb57bf135c1f2f526cedd5c3f8b15041"
|
||||
},
|
||||
"native-F/captures/06-save-path.jpg": {
|
||||
"bytes": 57727,
|
||||
"sha256": "e4b7752864a0df2ac2fa769dab41c60ae60001b94d7d204e0f1182ff47892f03"
|
||||
},
|
||||
"native-F/captures/07-saved.jpg": {
|
||||
"bytes": 152431,
|
||||
"sha256": "b224e3d21849acceb1cc7bd6a2595a2d9394703c98437a44bd19a7c1967335b9"
|
||||
},
|
||||
"native-F/captures/08-after-export-undo-clean.jpg": {
|
||||
"bytes": 148392,
|
||||
"sha256": "417a5ddad9f231229edf6a1ba91231fab1475bccfc5469aea92da5ac880a2ff5"
|
||||
},
|
||||
"native-F/finished.json": {
|
||||
"bytes": 687,
|
||||
"sha256": "304b144a7c2f9696a1006e9fbd9dd64084887904e6c7e5293b9eca5602493b28"
|
||||
},
|
||||
"native-F/first-reading.md": {
|
||||
"bytes": 4192,
|
||||
"sha256": "2867ba22c3195e7b77cf696fffbdcc65ca6e8a74dc212f38407ef797216b5f8e"
|
||||
},
|
||||
"native-F/model-oracle.json": {
|
||||
"bytes": 618,
|
||||
"sha256": "007e0ca5765c80a6726d27a28ecc39e2a7e252d3c42aab17c544185e7d512928"
|
||||
},
|
||||
"native-F/started.json": {
|
||||
"bytes": 534,
|
||||
"sha256": "9521cf90ef719c16313329f21ae85d082ad1f804c2318a2a7db6be5e93d06aad"
|
||||
},
|
||||
"native-F/stderr.log": {
|
||||
"bytes": 0,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"native-F/stdout.log": {
|
||||
"bytes": 0,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"native-F/svg-conservation-v2.json": {
|
||||
"bytes": 3261,
|
||||
"sha256": "d8c738cb16c7cf756f7ecc23816c367ea7ccc01df74bde686d3eeb7c2bb7f4c6"
|
||||
},
|
||||
"native-F/svg-conservation.json": {
|
||||
"bytes": 3261,
|
||||
"sha256": "b3af75b6a6386fabef612898cd643b7bdb6b226985754e1380be99885e988fc2"
|
||||
},
|
||||
"native-F/working/eight-card.json": {
|
||||
"bytes": 138661,
|
||||
"sha256": "9db1015369f450d5810c96a01fddb8a009d57f6aafbda5182703f15ded23d9c8"
|
||||
},
|
||||
"native-F/working/moved-F.json": {
|
||||
"bytes": 138935,
|
||||
"sha256": "0ad4015d06cf513cd8f9cfe3a155c07590ba09585002277d6eed7a78dd3b6a57"
|
||||
},
|
||||
"native-F/working/pristine-F.svg": {
|
||||
"bytes": 7436,
|
||||
"sha256": "5213a764251c134a7ebbad482abb82d260c6c4216c73cd4e5e2295a9da3094a0"
|
||||
},
|
||||
"reopen-Baseline/captures/00-reopened-single-line.jpg": {
|
||||
"bytes": 151284,
|
||||
"sha256": "b2e0aadb03aa219bab95298e21b944584a223f6c7d3cef65f67b6c4e8ea306de"
|
||||
},
|
||||
"reopen-Baseline/finished.json": {
|
||||
"bytes": 774,
|
||||
"sha256": "e63262dee74aa8b90977430f5c74b0922874907f2932559a2ce5e9f53fb30c6f"
|
||||
},
|
||||
"reopen-Baseline/started.json": {
|
||||
"bytes": 621,
|
||||
"sha256": "bdf75da27f5307f82808898ab414bddca2ce55359dc7e7adef7c9434455e3d9b"
|
||||
},
|
||||
"reopen-Baseline/stderr.log": {
|
||||
"bytes": 0,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"reopen-Baseline/stdout.log": {
|
||||
"bytes": 0,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"reopen-Baseline/working/moved-F.json": {
|
||||
"bytes": 138935,
|
||||
"sha256": "0ad4015d06cf513cd8f9cfe3a155c07590ba09585002277d6eed7a78dd3b6a57"
|
||||
},
|
||||
"reopen-F/captures/00-forward-slash-path-refused.jpg": {
|
||||
"bytes": 98127,
|
||||
"sha256": "abfe0ef0a83927637de5cbfe413b0c89709aed60729a5e704824ab9c0e3e78be"
|
||||
},
|
||||
"reopen-F/captures/01-reopened-authored-label.jpg": {
|
||||
"bytes": 151196,
|
||||
"sha256": "9acac41740199155c565651967271f6216d05989f3bb1caef652185dc0b8bd18"
|
||||
},
|
||||
"reopen-F/captures/02-reopened-svg-exported.jpg": {
|
||||
"bytes": 146684,
|
||||
"sha256": "cb120e7be70a1f730115c7b6a8054902eb32dda1937913f2d4f6afe512a9af9a"
|
||||
},
|
||||
"reopen-F/finished.json": {
|
||||
"bytes": 759,
|
||||
"sha256": "7c2b590582d29780243c12b8209d435492f3be44ac4923cbe7af0bee8c5f5488"
|
||||
},
|
||||
"reopen-F/started.json": {
|
||||
"bytes": 606,
|
||||
"sha256": "5f721c530aa78e077cce78ad3c633ae2dfe37f7c25358bdcc8794b01e76f3551"
|
||||
},
|
||||
"reopen-F/stderr.log": {
|
||||
"bytes": 0,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"reopen-F/stdout.log": {
|
||||
"bytes": 0,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"reopen-F/working/moved-F.json": {
|
||||
"bytes": 138935,
|
||||
"sha256": "0ad4015d06cf513cd8f9cfe3a155c07590ba09585002277d6eed7a78dd3b6a57"
|
||||
},
|
||||
"reopen-F/working/reopened-F.svg": {
|
||||
"bytes": 7449,
|
||||
"sha256": "5b1106b9f8cdb6030e29d657f8aac1920e1a554e868bab4fce3e250a42469cd5"
|
||||
},
|
||||
"reviews/native-wrapped-plan.md": {
|
||||
"bytes": 3018,
|
||||
"sha256": "d9ae551792921cf2e816699e0434794dc75f140b5b89fa805bc09c195100a3c7"
|
||||
},
|
||||
"reviews/wrapped-final-evidence-review.md": {
|
||||
"bytes": 13422,
|
||||
"sha256": "c23b9c97ec21dec3591431ba8fc6a583e6f5e167f45c4b8b59b2fc34ddd066d2"
|
||||
},
|
||||
"reviews/wrapped-label-change-summary.md": {
|
||||
"bytes": 6489,
|
||||
"sha256": "2670a438b3e4506e99538cef2dcd070b93c69438dfae9f2c338411cfde118627"
|
||||
},
|
||||
"reviews/wrapped-label-independent-repair-review.md": {
|
||||
"bytes": 8518,
|
||||
"sha256": "11f3b06cb551162124f95f375395172347f943937ab8dfbe654bbfe47b8c2e29"
|
||||
},
|
||||
"reviews/wrapped-label-independent-source-review.md": {
|
||||
"bytes": 12676,
|
||||
"sha256": "262673d399bab74502ce15ec11b6b6e8cc50daab6eb79d0d4914e06c9ee8a05d"
|
||||
},
|
||||
"reviews/wrapped-native-observation.md": {
|
||||
"bytes": 5985,
|
||||
"sha256": "11a295fd1f60dad6c57b674f810a16d2e91b40bf2f84592cadc51ae5f4c3d114"
|
||||
},
|
||||
"reviews/wrapped-reopen-independent-result.json": {
|
||||
"bytes": 2866,
|
||||
"sha256": "8804ba0f50500ae92c1dd2c175ca241aa23070db6a0221793d6a85d67cd27e0f"
|
||||
},
|
||||
"reviews/wrapped-reopen-independent-selfcheck.json": {
|
||||
"bytes": 1422,
|
||||
"sha256": "7e22a0379be1ecf095130ab179525525b850f50ee905e804b607db3bc92e023b"
|
||||
},
|
||||
"reviews/wrapped-reopen-svg-review.md": {
|
||||
"bytes": 6784,
|
||||
"sha256": "dcfeaa45e888adc798bcb1d5493e3e1142fc306b64f973e411ce19e66184784d"
|
||||
},
|
||||
"reviews/wrapped-svg-oracle-report.md": {
|
||||
"bytes": 4470,
|
||||
"sha256": "0f1c608b09e0b3f85a51e187383701d5e3b157847bb687f65652b9a49dbe5a0e"
|
||||
},
|
||||
"reviews/wrapped-svg-oracle-selfcheck-first-failed.json": {
|
||||
"bytes": 244,
|
||||
"sha256": "67e6ceb254e614184cb99ce86a77a3855e98b055715f2052ffb58287fe9319b0"
|
||||
},
|
||||
"reviews/wrapped-svg-oracle-selfcheck.json": {
|
||||
"bytes": 1758,
|
||||
"sha256": "88f6b86b4c00a3bd50b19681de821c47fdc52ce3963d311f8d03e35435d61dc0"
|
||||
},
|
||||
"scripts/check-wrapped-model.py": {
|
||||
"bytes": 1991,
|
||||
"sha256": "55765130c9aabe85e1b8b243aa12272a88de66f8d0d62d38d66150a7c18d009e"
|
||||
},
|
||||
"scripts/check-wrapped-svg-initial.py": {
|
||||
"bytes": 8851,
|
||||
"sha256": "e679b3dfb056d441c4627967b469118621f83e6941c7a6daa4213ce3a7ff4970"
|
||||
},
|
||||
"scripts/check-wrapped-svg.py": {
|
||||
"bytes": 9102,
|
||||
"sha256": "136f0c458316e9c6747f2fbd26a4326a07cc6fc78a8bd4fe408beac331e4d099"
|
||||
},
|
||||
"scripts/launch-native-wrapped.py": {
|
||||
"bytes": 2272,
|
||||
"sha256": "3daf15de7abdc820ae66190e8218f50402f08fd1e34adfd9de187ed835b18c78"
|
||||
},
|
||||
"scripts/launch-wrapped-reopen.py": {
|
||||
"bytes": 2692,
|
||||
"sha256": "fdba16739e87ef172be5c083668949141d0d8977a67e09ec39cad7ce5a8b8ff3"
|
||||
},
|
||||
"scripts/prepare-native-wrapped.py": {
|
||||
"bytes": 1903,
|
||||
"sha256": "5315b4d71db4eb7f2f9784afb68543cc32901e7fe76a4cad16e8de28aeb0d8c8"
|
||||
},
|
||||
"scripts/wrapped-reopen-independent-check.py": {
|
||||
"bytes": 7852,
|
||||
"sha256": "8d718db9a52e894e8160436eab2d57998f211b71f4485b3543c6badde36b7815"
|
||||
},
|
||||
"source-manifest.json": {
|
||||
"bytes": 52831,
|
||||
"sha256": "bc858025f5f0b7c10d02cc0b5a19b1659a6ced5cf6f09f5ea623025e71ad7c0a"
|
||||
},
|
||||
"verify.py": {
|
||||
"bytes": 7021,
|
||||
"sha256": "282f8d95355d764d09ceea5662be2aa381b17ed863b5fd442d37599817616c23"
|
||||
}
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
Compiling iced_widget v0.14.2 (C:\ar-wrap-01a0d717\crates\vendor\iced_widget)
|
||||
Compiling oa-core v0.2.0 (C:\ar-wrap-01a0d717\crates\oa-core)
|
||||
Compiling iced v0.14.0
|
||||
Compiling oa-desktop v0.2.0 (C:\ar-wrap-01a0d717\crates\oa-desktop)
|
||||
Finished `dev` profile [unoptimized] target(s) in 1m 25s
|
||||
@@ -1,6 +0,0 @@
|
||||
Compiling oa-core v0.2.0 (C:\ar-wrap-01a0d717\crates\oa-core)
|
||||
Checking iced_widget v0.14.2 (C:\ar-wrap-01a0d717\crates\vendor\iced_widget)
|
||||
Compiling oa-desktop v0.2.0 (C:\ar-wrap-01a0d717\crates\oa-desktop)
|
||||
Compiling oa-server v0.2.0 (C:\ar-wrap-01a0d717\crates\oa-server)
|
||||
Checking iced v0.14.0
|
||||
Finished `dev` profile [unoptimized] target(s) in 1m 10s
|
||||
@@ -1,140 +0,0 @@
|
||||
Compiling oa-desktop v0.2.0 (C:\ar-wrap-01a0d717\crates\oa-desktop)
|
||||
Finished `test` profile [unoptimized] target(s) in 1m 40s
|
||||
Running unittests src\main.rs (C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps\arcadia_studio-c5b42126ba36cd38.exe)
|
||||
|
||||
running 126 tests
|
||||
test app::allocation_drag::tests::modal_roundtrip_equal_fit_undo_resize_and_focus_retire_press_before_replay ... ok
|
||||
test app::scenario_diagram::adoption_tests::missing_and_deleted_picker_ids_cannot_apply_an_unrelated_valid_property_draft ... ok
|
||||
test app::scenario_diagram::adoption_tests::source_cross_layer_owner_retarget_undo_redo_keeps_requested_saved_uuid ... ok
|
||||
test app::scenario_diagram::adoption_tests::source_deleted_owner_and_saved_view_mount_unavailable_instead_of_another_behavior ... ok
|
||||
test app::scenario_diagram::adoption_tests::source_same_layer_owner_retarget_undo_redo_keeps_requested_saved_uuid ... ok
|
||||
test app::scenario_diagram::owner_navigation_tests::saved_scenario_direct_behavior_selection_enters_explicit_process_or_state_owner ... ok
|
||||
test app::scenario_diagram::owner_navigation_tests::saved_scenario_guide_selection_returns_to_explicit_process_or_state_owner ... ok
|
||||
test app::scenario_diagram::tests::arrangement_picker_rejects_previous_visit_and_switches_automatic_without_model_changes ... ok
|
||||
test app::scenario_diagram::tests::leaving_and_reentering_saved_view_preserves_source_and_retires_passive_visit ... ok
|
||||
test app::scenario_diagram::tests::saved_picker_applies_valid_old_draft_and_uuid_edit_follows_that_same_view ... ok
|
||||
test app::scenario_diagram::tests::saved_reference_back_restores_exact_view_with_a_fresh_visit ... ok
|
||||
test app::scenario_diagram::tests::saved_view_return_rejects_old_passive_events_without_an_intermediate_frame ... ok
|
||||
test app::scenario_diagram::tests::saved_view_switches_are_distinct_passive_visits_and_preserve_actual_history ... ok
|
||||
test app::state_diagram_tests::same_size_viewport_after_revision_or_tool_epoch_does_not_refit_the_camera ... ok
|
||||
test app::state_diagram_tests::state_navigation_return_to_the_same_view_preserves_camera_tool_and_fit_mode ... ok
|
||||
test app::state_multiselect_focus_tests::mounted_state_selection_and_missing_picker_never_resize_or_refit_the_canvas ... ok
|
||||
test behavior::scenario::camera::tests::fit_remains_active_across_first_and_changed_viewport ... ok
|
||||
test behavior::scenario::camera::tests::negative_origin_fit_contains_independently_known_extremes ... ok
|
||||
test behavior::scenario::camera::tests::pan_leaves_fit_from_displayed_position_and_zero_motion_preserves_fit ... ok
|
||||
test behavior::scenario::camera::tests::tiny_fit_zoom_in_out_preserves_pointer_world_anchor_without_floor_jump ... ok
|
||||
test behavior::scenario::workspace::spacing_tests::saved_drag_return_to_origin_preserves_redo_selection_and_original_fit_camera ... ok
|
||||
test behavior::scenario::workspace::spacing_tests::saved_header_preview_survives_frames_and_freezes_fit_while_actual_bounds_expand ... ok
|
||||
test behavior::scenario::workspace::tests::scenario_workspace_fit_uses_measured_inner_viewport_and_rejects_nonfinite_inputs ... ok
|
||||
test behavior::scenario::workspace::tests::scenario_workspace_same_size_owner_and_document_changes_remeasure_fit_viewport ... ok
|
||||
test behavior::topology::contextual_routing::tests::contextual_route_shared_anchor_preserves_selected_direct_reconnect_at_fit_and_full_scale ... ok
|
||||
test behavior::topology::direct_tests::direct_process_palette_preserves_fit_and_manual_camera ... ok
|
||||
test behavior::topology::direct_tests::direct_process_readable_default_fit_expansion_and_bounded_choices ... ok
|
||||
test behavior::topology::tests::process_fit_uses_measured_height_and_reports_minimum_without_changing_manual_zoom ... ok
|
||||
test behavior::topology::view::layout_tests::production_process_canvas_focus_wheel_fit_and_stale_camera_are_presentation_only ... ok
|
||||
test diagram::allocation_group_tests::allocation_handle_click_collapses_but_out_and_back_refuses_after_app_rebuilds ... ok
|
||||
test diagram::allocation_group_tests::allocation_handles_keep_exact_edge_through_shift_and_pending_group_dispatch ... ok
|
||||
test diagram::allocation_group_tests::armed_isolated_bend_is_owned_but_unarmed_controls_still_edit_routes ... ok
|
||||
test diagram::allocation_group_tests::dirty_selected_pin_outer_ring_is_shielded_without_starting_pan ... ok
|
||||
test diagram::allocation_group_tests::ordinary_performer_body_uses_one_token_and_retains_existing_movement_policy ... ok
|
||||
test diagram::attachment_tests::attachment_camera_layout_focus_and_outside_release_cancel_after_motion ... ok
|
||||
test diagram::attachment_tests::attachment_event_batches_commit_one_source_history_change_at_three_zooms ... ok
|
||||
test diagram::attachment_tests::attachment_fast_release_uses_release_position_and_stays_in_one_view ... ok
|
||||
test diagram::attachment_tests::attachment_reset_preserves_opposite_end_pins_label_and_semantics ... ok
|
||||
test diagram::attachment_tests::attachment_stale_context_wrong_placement_and_unowned_route_fields_are_rejected ... ok
|
||||
test diagram::attachment_tests::attachment_stationary_return_and_escape_leave_source_unchanged ... ok
|
||||
test diagram::attachment_tests::attachment_wheel_and_middle_pan_cancel_before_same_batch_left_release ... ok
|
||||
test diagram::attachment_tests::coincident_attachment_handles_honor_explicit_end_choice ... ok
|
||||
test diagram::group_gesture::tests::any_frozen_viewport_change_is_detected ... ok
|
||||
test diagram::group_gesture::tests::explicit_grid_and_default_constructor_keep_existing_quantization ... ok
|
||||
test diagram::group_gesture::tests::finite_inputs_that_overflow_world_geometry_retire_without_an_operation ... ok
|
||||
test diagram::group_gesture::tests::full_typed_selection_and_saved_surface_are_required ... ok
|
||||
test diagram::group_gesture::tests::invalid_initial_geometry_cannot_start ... ok
|
||||
test diagram::group_gesture::tests::invalid_pointer_permanently_retires_even_if_pointer_returns ... ok
|
||||
test diagram::group_gesture::tests::offgrid_anchor_yields_one_shared_delta_and_release_matches_preview ... ok
|
||||
test diagram::group_gesture::tests::release_only_displacement_that_snaps_to_zero_still_preserves_group ... ok
|
||||
test diagram::group_gesture::tests::stationary_or_exact_threshold_release_is_click_without_snapping ... ok
|
||||
test diagram::group_gesture::tests::threshold_latches_and_return_to_offgrid_origin_is_zero_move ... ok
|
||||
test diagram::group_gesture::tests::unsnapped_fractional_pointer_delta_preserves_authored_offset ... ok
|
||||
test diagram::group_gesture::tests::unsnapped_release_only_movement_and_invalid_pointer_retirement ... ok
|
||||
test diagram::group_gesture::tests::unsnapped_threshold_and_return_to_origin_preserve_group_lifecycle ... ok
|
||||
test diagram::group_gesture::tests::zoom_scales_world_delta_but_threshold_remains_in_screen_pixels ... ok
|
||||
test diagram::label_layout_experiment::tests::authored_fraction_offset_keep_shape_even_during_conflicting_move ... ok
|
||||
test diagram::label_layout_experiment::tests::automatic_guard_refuses_foreign_coincident_stroke_and_card ... ok
|
||||
test diagram::label_layout_experiment::tests::baseline_is_exact_and_wrapping_changes_only_target_derived_geometry ... E: bounds=RoutingBounds { position: Position { x: 1102.4126, y: 254.5 }, size: Size { width: 119.174805, height: 40.0 } }; lines=[Line { text: "Technician service", position: Position { x: 1110.4126, y: 258.5 }, baseline_y: 271.8828, width: 103.174805, family: "Segoe UI" }, Line { text: "conversation", position: Position { x: 1125.4089, y: 274.5 }, baseline_y: 287.8828, width: 73.18213, family: "Segoe UI" }]
|
||||
F: bounds=RoutingBounds { position: Position { x: 1180.0, y: 226.2 }, size: Size { width: 89.18213, height: 56.0 } }; lines=[Line { text: "Technician", position: Position { x: 1194.2905, y: 230.2 }, baseline_y: 243.58281, width: 60.601074, family: "Segoe UI" }, Line { text: "service", position: Position { x: 1205.0847, y: 246.2 }, baseline_y: 259.58282, width: 39.012695, family: "Segoe UI" }, Line { text: "conversation", position: Position { x: 1188.0, y: 262.2 }, baseline_y: 275.58282, width: 73.18213, family: "Segoe UI" }]
|
||||
ok
|
||||
test diagram::label_layout_experiment::tests::different_edge_preview_guard_rejection_restores_complete_core_geometry ... ok
|
||||
test diagram::label_layout_experiment::tests::measured_backing_canvas_svg_picking_and_focus_share_geometry ... ok
|
||||
test diagram::label_layout_experiment::tests::scene_and_measurement_cache_reuse_and_geometry_invalidation ... ok
|
||||
test diagram::lifecycle_tests::menu_reset_and_draw_use_fresh_open_context ... ok
|
||||
test diagram::lifecycle_tests::middle_and_arrow_panning_preserve_source_and_history ... ok
|
||||
test diagram::lifecycle_tests::motion_after_release_must_not_move_clicked_port ... ok
|
||||
test diagram::lifecycle_tests::motion_after_source_click_release_must_not_create_connection ... ok
|
||||
test diagram::multiselect_tests::changed_selection_generation_rejects_press_even_after_membership_is_restored ... ok
|
||||
test diagram::multiselect_tests::changed_viewport_or_context_retires_group_without_a_release_intent ... ok
|
||||
test diagram::multiselect_tests::delete_is_captured_without_hiding_during_live_group_then_release_moves_once ... ok
|
||||
test diagram::multiselect_tests::escape_cancels_live_group_without_clearing_or_publishing_a_model_intent ... ok
|
||||
test diagram::multiselect_tests::group_canvas_preview_and_release_match_independent_expected_geometry ... ok
|
||||
test diagram::multiselect_tests::initial_press_without_pointer_history_consumes_release_only_displacement ... ok
|
||||
test diagram::multiselect_tests::middle_pan_excludes_group_start_and_delete_even_when_left_is_pressed ... ok
|
||||
test diagram::multiselect_tests::mixed_set_keeps_click_lifecycle_and_refuses_only_actual_drag ... ok
|
||||
test diagram::multiselect_tests::shift_press_uses_ordered_hit_not_native_batch_final_cursor ... ok
|
||||
test diagram::multiselect_tests::stationary_group_click_does_not_use_motion_after_release_in_same_batch ... ok
|
||||
test diagram::multiselect_tests::threshold_crossing_then_return_to_origin_emits_zero_move_not_singleton_click ... ok
|
||||
test diagram::pointer_tests::coalesced_fe_ports_commit_once_through_app_and_source_history ... ok
|
||||
test diagram::pointer_tests::coalesced_port_drag_commits_once_through_app_and_source_history ... ok
|
||||
test diagram::pointer_tests::drag_from_already_selected_stationary_port_keeps_source_between_batches ... ok
|
||||
test diagram::pointer_tests::menu_captured_motion_must_not_turn_following_click_into_old_port_drag ... ok
|
||||
test diagram::pointer_tests::modal_and_stale_epoch_block_queued_connection_and_port_commits ... ok
|
||||
test diagram::port_hit_tests::coincident_ports_keep_selection_then_use_stable_identity ... ok
|
||||
test diagram::port_hit_tests::nearest_port_center_wins_on_all_borders_and_zoom_levels ... ok
|
||||
test diagram::port_hit_tests::nested_owner_palette_selection_drag_and_context_menu_pick_the_same_port ... ok
|
||||
test diagram::port_labels::tests::leaving_and_reentering_keeps_suppression_until_each_held_button_releases ... ok
|
||||
test diagram::port_labels::tests::menu_epoch_clears_suppression_when_the_overlay_consumes_release ... ok
|
||||
test diagram::port_labels::tests::outside_presses_do_not_suppress_and_cancel_or_focus_loss_clear_held_buttons ... ok
|
||||
test diagram::port_labels::tests::passive_layer_leaves_port_drag_selection_and_commit_with_the_interactive_canvas ... ok
|
||||
test diagram::tests::association_end_contracts_share_svg_geometry_and_select_without_moving_name_label ... ok
|
||||
test diagram::tests::bend_gestures_use_screen_hit_radius_and_commit_one_undo_at_three_zooms ... ok
|
||||
test diagram::tests::coincident_line_hit_retains_the_selected_connection ... ok
|
||||
test diagram::tests::connection_gestures_pick_real_ports_and_commit_coalesced_drag_at_every_zoom ... ok
|
||||
test diagram::tests::detached_label_selects_connection_and_occluding_card_owns_its_hit ... ok
|
||||
test diagram::tests::dragging_a_child_previews_the_same_enclosure_and_ports_as_commit ... ok
|
||||
test diagram::tests::fast_drags_commit_the_release_cursor_without_a_final_motion_event ... ok
|
||||
test diagram::tests::implicit_port_click_selects_semantics_and_drag_preview_svg_share_anchors ... ok
|
||||
test diagram::tests::route_cache_ignores_pan_zoom_and_cancelled_drag_cannot_commit ... ok
|
||||
test diagram::tests::routed_svg_has_same_polyline_label_and_bounds_as_canvas_scene ... ok
|
||||
test diagram::tests::svg_accepts_populated_and_empty_architecture_views ... ok
|
||||
test diagram::tests::svg_distinguishes_inferred_work_allocation_from_direct_allocation ... ok
|
||||
test diagram::tests::svg_preserves_visible_exchange_labels_and_capability_stereotypes ... ok
|
||||
test diagram::tests::svg_rejects_missing_diagram_without_mutation ... ok
|
||||
test diagram::tests::svg_rejects_saved_scenario_with_absent_or_authored_layout_without_mutation ... ok
|
||||
test diagram::tests::typed_function_glyphs_and_unoriented_standard_connections_have_distinct_svg ... ok
|
||||
test diagram::view_options_tests::communication_svg_uses_saved_visibility_labels_and_direction ... ok
|
||||
test diagram_usage::coverage_tests::absent_endpoint_placements_and_hidden_performer_do_not_create_grouping_targets ... ok
|
||||
test diagram_usage::coverage_tests::allocation_grouping_has_exact_relation_placements_and_readable_work_geometry ... ok
|
||||
test diagram_usage::coverage_tests::allocation_grouping_walks_two_visible_summary_levels_without_inventing_allocations ... ok
|
||||
test diagram_usage::coverage_tests::collapsed_leaf_and_edge_filter_still_leave_the_actual_nesting_visible ... ok
|
||||
test diagram_usage::coverage_tests::folded_summary_or_performer_does_not_substitute_a_visible_ancestor_for_the_leaf ... ok
|
||||
test diagram_usage::coverage_tests::other_projections_do_not_report_allocation_nesting_when_only_an_arrow_or_nothing_is_drawn ... ok
|
||||
test diagram_usage::coverage_tests::repeated_saved_views_keep_allocation_placement_identity_and_geometry_independent ... ok
|
||||
test diagram_usage::coverage_tests::role_derived_nesting_without_a_direct_allocation_does_not_invent_one ... ok
|
||||
test diagram_usage::tests::folded_child_is_not_a_visible_node_and_placement_identity_stays_exact ... ok
|
||||
test diagram_usage::tests::oversized_container_reveal_targets_its_labelled_header ... ok
|
||||
test diagram_usage::tests::ports_are_found_at_the_visible_owner_and_unplaced_elements_do_not_match_names ... ok
|
||||
test diagram_usage::tests::reveal_camera_centers_target_without_whole_view_shrink ... ok
|
||||
test diagram_usage::tests::saved_membership_respects_filters_and_does_not_change_project ... ok
|
||||
test diagram_usage::tests::state_machine_owner_finds_its_view_without_a_machine_placement ... ok
|
||||
test diagram_usage::tests::whole_diagram_camera_fits_large_bounds_instead_of_individual_object_scale ... ok
|
||||
test source_annotations::widget::tests::measured_footer_and_omitted_count_fit_actual_shaped_widths_and_ancestor_clip ... ok
|
||||
test tests::fit_adapts_to_canvas_returning_after_help_but_preserves_manual_navigation ... ok
|
||||
test tests::fit_uses_measured_canvas_bounds_and_preserves_them_on_open ... ok
|
||||
test tests::routing_actions_are_atomic_guarded_and_fit_the_authored_detour ... ok
|
||||
test views::text_workspace::summary_visibility_tests::all_reference_exceptions_fit_allocated_width_with_wide_alias_and_large_counts ... old alias-first summary width=840 alias="雨雨雨雨雨雨雨雨雨雨雨雨雨雨雨雨雨雨雨雨雨雨雨雨雨雨雨雨雨雨雨雨": 0 missing/clipped flag-byte checks; first=None
|
||||
old alias-first summary width=720 alias="雨雨雨雨雨雨雨雨雨雨雨雨雨雨雨雨雨雨雨雨雨雨雨雨雨雨雨雨雨雨雨雨": 18 missing/clipped flag-byte checks; first=Some("flag Detached is clipped: glyph Rectangle { x: 724.93945, y: 0.0, width: 8.4140625, height: 15.599999 }, clip Rectangle { x: 0.0, y: 0.0, width: 720.0, height: 24.0 }")
|
||||
old alias-first summary width=840 alias="WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW": 0 missing/clipped flag-byte checks; first=None
|
||||
old alias-first summary width=720 alias="WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW": 15 missing/clipped flag-byte checks; first=Some("flag Detached is clipped: glyph Rectangle { x: 718.3828, y: 0.0, width: 6.1054688, height: 15.599999 }, clip Rectangle { x: 0.0, y: 0.0, width: 720.0, height: 24.0 }")
|
||||
ok
|
||||
|
||||
test result: ok. 126 passed; 0 failed; 0 ignored; 0 measured; 1426 filtered out; finished in 5.44s
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
Compiling oa-desktop v0.2.0 (C:\ar-wrap-01a0d717\crates\oa-desktop)
|
||||
Finished `test` profile [unoptimized] target(s) in 1m 44s
|
||||
Running unittests src\main.rs (C:\Users\User\Documents\Git\ARCADIA-Studio\.local\target-gnullvm\debug\deps\arcadia_studio-c5b42126ba36cd38.exe)
|
||||
|
||||
running 6 tests
|
||||
test diagram::label_layout_experiment::tests::authored_fraction_offset_keep_shape_even_during_conflicting_move ... ok
|
||||
test diagram::label_layout_experiment::tests::automatic_guard_refuses_foreign_coincident_stroke_and_card ... ok
|
||||
test diagram::label_layout_experiment::tests::baseline_is_exact_and_wrapping_changes_only_target_derived_geometry ... E: bounds=RoutingBounds { position: Position { x: 1102.4126, y: 254.5 }, size: Size { width: 119.174805, height: 40.0 } }; lines=[Line { text: "Technician service", position: Position { x: 1110.4126, y: 258.5 }, baseline_y: 271.8828, width: 103.174805, family: "Segoe UI" }, Line { text: "conversation", position: Position { x: 1125.4089, y: 274.5 }, baseline_y: 287.8828, width: 73.18213, family: "Segoe UI" }]
|
||||
F: bounds=RoutingBounds { position: Position { x: 1180.0, y: 226.2 }, size: Size { width: 89.18213, height: 56.0 } }; lines=[Line { text: "Technician", position: Position { x: 1194.2905, y: 230.2 }, baseline_y: 243.58281, width: 60.601074, family: "Segoe UI" }, Line { text: "service", position: Position { x: 1205.0847, y: 246.2 }, baseline_y: 259.58282, width: 39.012695, family: "Segoe UI" }, Line { text: "conversation", position: Position { x: 1188.0, y: 262.2 }, baseline_y: 275.58282, width: 73.18213, family: "Segoe UI" }]
|
||||
ok
|
||||
|
||||
thread 'diagram::label_layout_experiment::tests::different_edge_preview_guard_rejection_restores_complete_core_geometry' (7440) panicked at crates\oa-desktop\src\diagram\label_layout_experiment.rs:714:13:
|
||||
assertion `left == right` failed: No Layout means original complete one-line target geometry, never stale wrapped hit bounds
|
||||
left: EdgeLabelGeometry { text: "Technician service conversation", fraction: 0.5, anchor: Position { x: 1162.0, y: 274.5 }, center: Position { x: 1162.0, y: 274.5 }, bounds: RoutingBounds { position: Position { x: 1102.4126, y: 254.5 }, size: Size { width: 119.174805, height: 40.0 } } }
|
||||
right: EdgeLabelGeometry { text: "Technician service conversation", fraction: 0.5, anchor: Position { x: 1162.0, y: 274.5 }, center: Position { x: 1296.5, y: 274.5 }, bounds: RoutingBounds { position: Position { x: 1180.0, y: 262.5 }, size: Size { width: 233.0, height: 24.0 } } }
|
||||
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
|
||||
test diagram::label_layout_experiment::tests::different_edge_preview_guard_rejection_restores_complete_core_geometry ... FAILED
|
||||
test diagram::label_layout_experiment::tests::measured_backing_canvas_svg_picking_and_focus_share_geometry ... ok
|
||||
test diagram::label_layout_experiment::tests::scene_and_measurement_cache_reuse_and_geometry_invalidation ... ok
|
||||
|
||||
failures:
|
||||
|
||||
failures:
|
||||
diagram::label_layout_experiment::tests::different_edge_preview_guard_rejection_restores_complete_core_geometry
|
||||
|
||||
test result: FAILED. 5 passed; 1 failed; 0 ignored; 0 measured; 1546 filtered out; finished in 0.21s
|
||||
|
||||
error: test failed, to rerun pass `-p oa-desktop --bin arcadia-studio`
|
||||
@@ -1,13 +0,0 @@
|
||||
Compiling oa-core v0.2.0 (C:\ar-wrap-01a0d717\crates\oa-core)
|
||||
Compiling oa-server v0.2.0 (C:\ar-wrap-01a0d717\crates\oa-server)
|
||||
Compiling iced_widget v0.14.2 (C:\ar-wrap-01a0d717\crates\vendor\iced_widget)
|
||||
Compiling oa-desktop v0.2.0 (C:\ar-wrap-01a0d717\crates\oa-desktop)
|
||||
Compiling iced v0.14.0
|
||||
error[E0063]: missing fields `source_attachment` and `target_attachment` in initializer of `oa_core::EdgeRoute`
|
||||
--> crates\oa-desktop\src\diagram\label_layout_experiment.rs:577:60
|
||||
|
|
||||
577 | p.diagrams.get_mut(&id).unwrap().routes = vec![EdgeRoute {
|
||||
| ^^^^^^^^^ missing `source_attachment` and `target_attachment`
|
||||
|
||||
For more information about this error, try `rustc --explain E0063`.
|
||||
error: could not compile `oa-desktop` (bin "arcadia-studio" test) due to 1 previous error
|
||||
@@ -1,21 +0,0 @@
|
||||
{
|
||||
"source": "d0896ced75fea73bcda6bd14f259a34503840704",
|
||||
"experiment": "bounded measured multiline labels; not production acceptance",
|
||||
"label_profile": "E",
|
||||
"compiler_profile": "dev/unoptimized",
|
||||
"target": "x86_64-pc-windows-gnullvm",
|
||||
"files": {
|
||||
"bin/arcadia-studio.exe": {
|
||||
"bytes": 119551488,
|
||||
"sha256": "2b6d76d744d7422fc826f7f7ca0009b296a0efb751fe0b3bbc1516b8a624c201"
|
||||
},
|
||||
"bin/libunwind.dll": {
|
||||
"bytes": 190976,
|
||||
"sha256": "f45604a12e8bcd839fd86f667c1be1cc7c4f9da2b3c69ff381ac708f0e1ae7d4"
|
||||
},
|
||||
"working/eight-card.json": {
|
||||
"bytes": 138661,
|
||||
"sha256": "9db1015369f450d5810c96a01fddb8a009d57f6aafbda5182703f15ded23d9c8"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 148 KiB |
|
Before Width: | Height: | Size: 143 KiB |
|
Before Width: | Height: | Size: 146 KiB |
|
Before Width: | Height: | Size: 146 KiB |
@@ -1,16 +0,0 @@
|
||||
{
|
||||
"source": "d0896ced75fea73bcda6bd14f259a34503840704",
|
||||
"start": "2026-10-02T02:41:31.588364+00:00",
|
||||
"label_profile": "E",
|
||||
"binary_sha256": "2b6d76d744d7422fc826f7f7ca0009b296a0efb751fe0b3bbc1516b8a624c201",
|
||||
"runtime_sha256": "f45604a12e8bcd839fd86f667c1be1cc7c4f9da2b3c69ff381ac708f0e1ae7d4",
|
||||
"fixture_sha256": "9db1015369f450d5810c96a01fddb8a009d57f6aafbda5182703f15ded23d9c8",
|
||||
"cwd": "C:\\ar-wrap-01a0d717\\.local\\native-wrapped-E\\working",
|
||||
"path": "C:\\Windows\\System32;C:\\Windows",
|
||||
"pid": 6560,
|
||||
"exit_code": 0,
|
||||
"finished": "2026-10-02T02:47:04.978388+00:00",
|
||||
"stdout_bytes": 0,
|
||||
"stderr_bytes": 0,
|
||||
"all_pinned_files_unchanged": true
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
# Locked first exposure: static screenshot reading
|
||||
|
||||
Source: `captures/00-fit-pristine.jpg`, viewed once at original detail as a complete screenshot. No crop, other image, model, repository, code, answer key, or agent interpretation was consulted before these answers. These are first impressions from visible strokes and ports, not verified model facts. Confidence values are qualitative estimates.
|
||||
|
||||
## First answers
|
||||
|
||||
| Label | First endpoint/direction interpretation | Confidence |
|
||||
| --- | --- | --- |
|
||||
| Request field repair | **Assess pressure alarm → Repair valve in the field** | Moderate (about 65%) |
|
||||
| Report repair result | **Repair valve in the field → Confirm safe pressure** | Moderate (about 60%) |
|
||||
| Technician service conversation | **Pressure coordination service — Field technician**, with **no clearly visible arrow direction** | Moderate for endpoints (about 65%); moderately high that direction is not visually established (about 80%) |
|
||||
|
||||
### Request field repair
|
||||
|
||||
I associate this text, just below the Pressure coordination service card, with the horizontal stroke around screenshot y=611, running from about x=430 to x=807. My reading traces its left end upward to the Assess pressure alarm card's right port (roughly 422,568), and its right end upward to the upper left port of Repair valve in the field (roughly 815,591). The upper repair port appears to point toward the repair card, giving the direction above.
|
||||
|
||||
The alternatives I cannot confidently exclude are that one of the vertical overlaps belongs to a different relationship, or that the nearby Pressure coordination service is the source. The latter is spatially plausible from the label position but is less consistent with my first attempt to follow the stroke. The outline-like long rectangular routes complicate distinguishing crossings from route turns.
|
||||
|
||||
### Report repair result
|
||||
|
||||
I associate this label with the horizontal stroke around y=646, extending left from the lower left port of Repair valve in the field (roughly 815,646) to a vertical route near x=521. My first reading follows that route downward toward Confirm safe pressure, whose right port (roughly 511,797) appears to have a leftward arrow. The repair card's lower port also appears oriented leftward, supporting travel away from repair toward confirmation.
|
||||
|
||||
I am less confident about the long vertical continuation than the label's association with the y=646 stroke. Reset valve remotely is a plausible mistaken destination because its connection is immediately beside the same vertical corridor; another alternative is that a shared-looking stroke routes back toward the alarm function. The screenshot does not make the separation of coincident or closely spaced vertical lines easy to establish.
|
||||
|
||||
### Technician service conversation
|
||||
|
||||
My first reading assigns the two-line label to the horizontal connector emerging from the Pressure coordination service card's right square port at roughly (773,568), passing beneath the label toward x=855, and then routing toward the Field technician card's left square port at roughly (865,451). I see square endpoint marks rather than a definite arrowhead at those two cards, so I read a connection with unspecified direction rather than confidently calling it one-way or two-way.
|
||||
|
||||
The label appears to own the short horizontal segment immediately below it, near y=568, and its associated orthogonal route toward the technician. It does **not** initially read as the label of the technician-to-repair stroke farther right, which drops from the technician card near x=934 and turns left into the top of the repair card. Nevertheless, the label sits close to multiple vertical strokes and that technician-to-repair relationship is a plausible alternate ownership reading. I cannot confidently distinguish every bend near the shared upper horizontal corridor.
|
||||
|
||||
## Legibility and scope
|
||||
|
||||
The main application controls are readable. At the displayed 52% diagram zoom, card names require concentrated reading and relationship labels are substantially smaller and faint. “Technician service conversation” is readable as two lines, but its wrapping and position do not by themselves establish stroke ownership. “Request field repair” and “Report repair result” are just legible in the full image, with close scrutiny. Small port shapes and overlapping vertical routes are a greater obstacle to dependable endpoint/direction reading than the large card arrangement.
|
||||
|
||||
These answers are deliberately retained as an unverified first exposure. This is evidence from one agent reading one static image; it does not establish human usability, generalized UX performance, a causal comparison, or model correctness. No native GUI interaction or answer-key verification was performed.
|
||||
@@ -1,11 +0,0 @@
|
||||
{
|
||||
"source": "d0896ced75fea73bcda6bd14f259a34503840704",
|
||||
"start": "2026-10-02T02:41:31.588364+00:00",
|
||||
"label_profile": "E",
|
||||
"binary_sha256": "2b6d76d744d7422fc826f7f7ca0009b296a0efb751fe0b3bbc1516b8a624c201",
|
||||
"runtime_sha256": "f45604a12e8bcd839fd86f667c1be1cc7c4f9da2b3c69ff381ac708f0e1ae7d4",
|
||||
"fixture_sha256": "9db1015369f450d5810c96a01fddb8a009d57f6aafbda5182703f15ded23d9c8",
|
||||
"cwd": "C:\\ar-wrap-01a0d717\\.local\\native-wrapped-E\\working",
|
||||
"path": "C:\\Windows\\System32;C:\\Windows",
|
||||
"pid": 6560
|
||||
}
|
||||
@@ -1,88 +0,0 @@
|
||||
{
|
||||
"status": "PASS",
|
||||
"profile": "E",
|
||||
"script": {
|
||||
"bytes": 9102,
|
||||
"sha256": "136f0c458316e9c6747f2fbd26a4326a07cc6fc78a8bd4fe408beac331e4d099"
|
||||
},
|
||||
"metrics_source": "ebb6a9980b11c4d4df2f7e413c6b135a337f6f6d Rust/Iced test stdout; wrapped-label-regression-first.log",
|
||||
"inputs": {
|
||||
"baseline_svg": {
|
||||
"path": "C:\\ar-label-cue-01a0d717\\.local\\native-cue-baseline\\working\\baseline.svg",
|
||||
"bytes": 7209,
|
||||
"sha256": "645ee69cc97d11acc812539b62528d7fdceec32aa2516d4ade8508016164119d"
|
||||
},
|
||||
"candidate_svg": {
|
||||
"path": ".local\\native-wrapped-E\\working\\pristine-E.svg",
|
||||
"bytes": 7353,
|
||||
"sha256": "d84f6c4b03a305f89849b013e809501f7d613203fd2c71bea80b645958a4b64c"
|
||||
},
|
||||
"baseline_project": {
|
||||
"path": "C:\\ar-label-cue-01a0d717\\.local\\native-cue-baseline\\working\\eight-card.json",
|
||||
"bytes": 138661,
|
||||
"sha256": "9db1015369f450d5810c96a01fddb8a009d57f6aafbda5182703f15ded23d9c8"
|
||||
},
|
||||
"candidate_project": {
|
||||
"path": ".local\\native-wrapped-E\\working\\eight-card.json",
|
||||
"bytes": 138661,
|
||||
"sha256": "9db1015369f450d5810c96a01fddb8a009d57f6aafbda5182703f15ded23d9c8"
|
||||
}
|
||||
},
|
||||
"full_project_bytes_equal": true,
|
||||
"edge_uuids": [
|
||||
"09eaa992-4cdf-5ea3-b748-f10fd74b8cba",
|
||||
"3cc9ab52-2b00-57fd-8709-aabc75e5d3e3",
|
||||
"55ec4dbf-bd17-5b0c-b3a3-95b2194aa8b9",
|
||||
"568c5c01-de21-52a2-83bd-afdddc158085",
|
||||
"628cb4fc-fe63-5f6b-b364-6268f26b5740",
|
||||
"63009b5f-539e-5914-b630-ec6b7fefb4d5",
|
||||
"684eadc3-e670-5779-a60f-bbc9a5bfb062",
|
||||
"725f2e1b-aa2c-5615-9b1f-28da178168fa",
|
||||
"93474111-f23e-56c1-b61b-b7c2396b91bd",
|
||||
"9b9356d7-2db2-5a94-a47e-ea892cf02afe",
|
||||
"b76bf8de-2fa4-563f-a540-dd30f30e6c49",
|
||||
"e53b7a40-e8a3-5b3f-826d-c2b5c164a84a"
|
||||
],
|
||||
"all_12_edge_records_exact": true,
|
||||
"root_and_viewBox_exact": true,
|
||||
"all_remaining_svg_bytes_exact": true,
|
||||
"remaining_svg": {
|
||||
"bytes": 6977,
|
||||
"sha256": "5603ada145dbb255eb4dfd583258427057a9312443685d47f278ef76756ef8ed"
|
||||
},
|
||||
"removed_baseline_presentation": {
|
||||
"bytes": 232,
|
||||
"sha256": "f43b00c1fbce723b31fc308027a537234bedf2ee3f0aea1a163008947a6ac033"
|
||||
},
|
||||
"removed_candidate_presentation": {
|
||||
"bytes": 376,
|
||||
"sha256": "287d99087d8cb87ab24cc523dbbf367420155271ddfef861821bc95c19d9d311"
|
||||
},
|
||||
"expected_logical_metrics": {
|
||||
"rect": [
|
||||
1102.4126,
|
||||
254.5,
|
||||
119.174805,
|
||||
40.0
|
||||
],
|
||||
"lines": [
|
||||
[
|
||||
"Technician service",
|
||||
1110.4126,
|
||||
258.5,
|
||||
271.8828,
|
||||
103.174805
|
||||
],
|
||||
[
|
||||
"conversation",
|
||||
1125.4089,
|
||||
274.5,
|
||||
287.8828,
|
||||
73.18213
|
||||
]
|
||||
]
|
||||
},
|
||||
"numeric_absolute_tolerance": 0.0002,
|
||||
"conservation_scope": "All edge/path/orientation/drawing, card, port and unrelated label bytes preserved; only target immediate label presentation removed for comparison.",
|
||||
"limits": "Logical SVG conservation and declared typography coordinates only. No browser/font availability, glyph/raster parity, screenshot reading, native input-event history, save/reopen or usability claim."
|
||||
}
|
||||