Add reproducible native child-work verification fixtures
This commit is contained in:
@@ -0,0 +1,156 @@
|
||||
//! Native issue4 fixture/oracle. generate DIR | check oa|sa STAGE ENTRY
|
||||
//! snapshot ENTRY DIR | compare ENTRY DIR | self-check
|
||||
use oa_core::{source_project::*, *};
|
||||
use std::{collections::{BTreeMap, BTreeSet}, fs, path::Path};
|
||||
fn id(n: u128) -> Id { Id::from_u128(0xc1140000000040008000000000000000 + n) }
|
||||
fn work(layer: Layer) -> Kind { if layer == Layer::Oa { Kind::Activity } else { Kind::Function } }
|
||||
fn fixture(layer: Layer) -> Project {
|
||||
let mut p = Project::empty();
|
||||
p.id = id(1); p.alias = "child_work_native".into(); p.name = format!("Issue4 {layer:?} child work");
|
||||
for (n, kind, name) in [(10, if layer == Layer::Oa { Kind::Entity } else { Kind::System }, "Performer"), (11, work(layer), "Parent work")] {
|
||||
p.elements.insert(id(n), Element { id: id(n), alias: format!("seed_{n}"), name: name.into(), description: format!("Preserve original {name}"), parent: None, body: ElementBody::new(kind, layer).unwrap() });
|
||||
}
|
||||
p.relations.insert(id(20), Relation { id:id(20), alias:"original_allocation".into(), name:"Original responsibility".into(), description:"Preserve allocation engineering rationale 雨".into(), body:RelationBody::Allocation { source:id(10), target:id(11) } });
|
||||
if layer == Layer::Oa {
|
||||
for n in [12,13] {
|
||||
p.elements.insert(id(n), Element { id:id(n), alias:format!("role_{n}"), name:format!("Responsibility role {n}"), description:"Preserve role".into(), parent:None, body:ElementBody::new(Kind::Role, layer).unwrap() });
|
||||
for (r, kind, source, target) in [(n+10,RelationKind::RoleAssignment,id(n),id(11)),(n+20,RelationKind::RoleRealization,id(10),id(n))] {
|
||||
p.relations.insert(id(r), Relation { id:id(r), alias:format!("responsibility_{r}"), name:format!("Role link {r}"), description:format!("Retain role link metadata {r}"), body:RelationBody::new(kind,source,target) });
|
||||
}
|
||||
}
|
||||
}
|
||||
for (index, owner) in [id(20),id(22),id(23)].into_iter().filter(|owner| p.relations.contains_key(owner)).enumerate() {
|
||||
let key=id(50+index as u128);
|
||||
p.artifact_links.insert(key, ArtifactLink { id:key, alias:format!("evidence_{index}"), name:format!("Responsibility evidence {index}"), description:"Keep owner identity and evidence metadata".into(), owner, relation:ArtifactRelation::References, uri:format!("https://example.invalid/evidence/{index}"), revision:Some("review-7".into()), fragment:Some("assignment".into()) });
|
||||
}
|
||||
p.diagrams.insert(id(2), Diagram { id:id(2), alias:"allocation_view".into(), name:format!("{layer:?} allocated work"), description:"Native child-work fixture".into(), layer, projection:ProjectionKind::Allocation, routes:vec![], view_options:Default::default(), nodes:BTreeMap::new() });
|
||||
for (n,element,x,y,collapsed) in [(40,id(10),60.,60.,false),(41,id(11),84.,124.,true)] {
|
||||
p.diagrams.get_mut(&id(2)).unwrap().nodes.insert(id(n), NodePlacement { id:id(n), alias:format!("seed_view_{n}"), element, position:Position{x,y}, size:Size{width:224.,height:94.}, collapsed, port_anchors:vec![] });
|
||||
}
|
||||
execute_batch(&p,&[]).unwrap()
|
||||
}
|
||||
fn bundle(p:&Project)->CompiledSourceProject {
|
||||
let source=language::format(p).replacen("{\n","{\n include \"rationale.arcadia\";\n",1);
|
||||
let raw=SourceBundle { entry:"project.arcadia".into(), files:BTreeMap::from([("project.arcadia".into(),source),("rationale.arcadia".into(),"// Preserve included note bytes: responsibility 雨.\r\n".into())]) };
|
||||
let result=compile_bundle(&raw,ProjectLimits::default()).unwrap();
|
||||
assert_eq!(result.bundle,raw); assert_eq!(&result.decoded.project,p); result
|
||||
}
|
||||
fn load(entry:&Path)->CompiledSourceProject {
|
||||
let raw=source_files::load_project(entry,ProjectLimits::default()).unwrap().reachable_bundle();
|
||||
let result=compile_bundle(&raw,ProjectLimits::default()).unwrap();
|
||||
assert_eq!(result.bundle,raw,"No source normalization permitted");
|
||||
execute_batch(&result.decoded.project,&[]).unwrap(); result
|
||||
}
|
||||
fn advance(base:&mut CompiledSourceProject,commands:Vec<Command>) {
|
||||
let expected=execute_batch(&base.decoded.project,&commands).unwrap();
|
||||
*base=update_bundle(base,&expected,ProjectLimits::default()).unwrap();
|
||||
}
|
||||
#[derive(Clone, Copy)]
|
||||
struct Keys { children:[Id;3], nodes:[Id;3], allocation:Id }
|
||||
fn expected(layer:Layer,stage:usize,k:Keys)->CompiledSourceProject {
|
||||
assert!(stage<=3);
|
||||
let mut base=bundle(&fixture(layer));
|
||||
for step in 0..stage {
|
||||
let p=&base.decoded.project;
|
||||
let key=k.children[step];
|
||||
let name=format!("New {}",work(layer).label().to_lowercase());
|
||||
let element=Element { id:key, alias:p.fresh_alias(&name,"element",key), name, description:String::new(), parent:Some(if step==2 { k.children[0] } else { id(11) }), body:ElementBody::new(work(layer),layer).unwrap() };
|
||||
let mut commands=vec![Command::CreateElement(element.clone())];
|
||||
if step==1 {
|
||||
commands.push(Command::CreateRelation(Relation { id:k.allocation, alias:p.fresh_alias("Performs","relation",k.allocation), name:"Performs".into(), description:String::new(), body:RelationBody::Allocation { source:id(10),target:key } }));
|
||||
} else {
|
||||
for original in p.relations.values().filter(|r| [id(20),id(22),id(23)].contains(&r.id)) {
|
||||
let mut r=original.clone();
|
||||
match &mut r.body { RelationBody::Allocation{target,..}|RelationBody::RoleAssignment{target,..}=>*target=key,_=>unreachable!() }
|
||||
commands.push(Command::EditRelation(r.id,r));
|
||||
}
|
||||
}
|
||||
if step==0 {
|
||||
let mut node=p.diagrams[&id(2)].nodes[&id(41)].clone(); node.collapsed=false;
|
||||
commands.push(Command::EditNode{diagram:id(2),original:node.id,node});
|
||||
}
|
||||
let mut with_element=p.clone(); with_element.elements.insert(key,element);
|
||||
let (x,y)=[(108.,188.),(108.,298.),(132.,252.)][step];
|
||||
commands.push(Command::CreateNode { diagram:id(2), node:NodePlacement { id:k.nodes[step], alias:with_element.fresh_alias(&format!("view_{}",with_element.named(key)),"node",k.nodes[step]), element:key,position:Position{x,y},size:Size{width:224.,height:94.},collapsed:false,port_anchors:vec![] } });
|
||||
if step==2 {
|
||||
// Grandchild expands first child to bottom370; sibling follows at394
|
||||
// (24px reflow gap), independently predicted for this fixed fixture.
|
||||
let mut sibling=p.diagrams[&id(2)].nodes[&k.nodes[1]].clone(); sibling.position.y=394.;
|
||||
commands.push(Command::EditNode{diagram:id(2),original:sibling.id,node:sibling});
|
||||
}
|
||||
advance(&mut base,commands);
|
||||
}
|
||||
base
|
||||
}
|
||||
fn only(ids:Vec<Id>,role:&str)->Id { assert_eq!(ids.len(),1,"Exactly one {role}"); ids[0] }
|
||||
fn admit(actual:&Project,layer:Layer,stage:usize)->Keys {
|
||||
let mut k=Keys{children:[Id::nil();3],nodes:[Id::nil();3],allocation:Id::nil()};
|
||||
if stage==0 { return k; }
|
||||
let target=actual.relations[&id(20)].target();
|
||||
k.children[0]=if stage==3 { actual.elements[&target].parent.unwrap() } else { target };
|
||||
if stage>=2 {
|
||||
k.children[1]=only(actual.elements.values().filter(|e|e.parent==Some(id(11))&&e.id!=k.children[0]&&e.kind()==work(layer)).map(|e|e.id).collect(),"second child");
|
||||
k.allocation=only(actual.relations.values().filter(|r|r.kind()==RelationKind::Allocation&&r.source()==id(10)&&r.target()==k.children[1]).map(|r|r.id).collect(),"new sibling allocation");
|
||||
}
|
||||
if stage==3 { k.children[2]=target; }
|
||||
for step in 0..stage {
|
||||
let e=&actual.elements[&k.children[step]];
|
||||
assert_eq!(e.kind(),work(layer)); assert_eq!(e.layer(),layer);
|
||||
assert_eq!(e.parent,Some(if step==2{k.children[0]}else{id(11)}));
|
||||
k.nodes[step]=only(actual.diagrams[&id(2)].nodes.values().filter(|n|n.element==e.id).map(|n|n.id).collect(),"child placement");
|
||||
}
|
||||
let seed=fixture(layer); let mut used=BTreeSet::new();
|
||||
for key in k.children[..stage].iter().chain(&k.nodes[..stage]).copied().chain((stage>=2).then_some(k.allocation)) {
|
||||
assert_eq!(key.get_version_num(),4,"Native fresh UUIDv4 required");
|
||||
assert!(!seed.contains(key)&&used.insert(key),"Fresh distinct role identity required");
|
||||
}
|
||||
k
|
||||
}
|
||||
fn check(actual:&CompiledSourceProject,layer:Layer,stage:usize) {
|
||||
let prediction=expected(layer,stage,admit(&actual.decoded.project,layer,stage));
|
||||
assert_eq!(actual.decoded.project,prediction.decoded.project,"Complete typed model mismatch, including placements and references");
|
||||
assert_eq!(actual.bundle,prediction.bundle,"Exact source mismatch, including included note bytes");
|
||||
}
|
||||
fn history(actual:&CompiledSourceProject,layer:Layer,stage:usize,first:&CompiledSourceProject,second:Option<&CompiledSourceProject>) {
|
||||
check(first,layer,1);
|
||||
let first_keys=admit(&first.decoded.project,layer,1);
|
||||
let current_keys=admit(&actual.decoded.project,layer,stage);
|
||||
assert_eq!(current_keys.children[0],first_keys.children[0],"First child identity must match original first-commit carrier");
|
||||
assert_eq!(current_keys.nodes[0],first_keys.nodes[0],"First placement identity must match original first-commit carrier");
|
||||
if stage==3 {
|
||||
let second=second.expect("Original second-commit carrier required");
|
||||
check(second,layer,2);
|
||||
history(second,layer,2,first,None);
|
||||
let second_keys=admit(&second.decoded.project,layer,2);
|
||||
assert_eq!(current_keys.children[1],second_keys.children[1],"Sibling identity must persist");
|
||||
assert_eq!(current_keys.nodes[1],second_keys.nodes[1],"Sibling placement identity must persist");
|
||||
assert_eq!(current_keys.allocation,second_keys.allocation,"Sibling allocation identity must persist");
|
||||
}
|
||||
}
|
||||
fn write_bundle(dir:&Path,raw:&SourceBundle) {
|
||||
assert!(!dir.exists(),"Use a new evidence directory"); fs::create_dir_all(dir).unwrap();
|
||||
for (name,bytes) in &raw.files { let path=dir.join(name); if let Some(parent)=path.parent(){fs::create_dir_all(parent).unwrap();} fs::write(path,bytes).unwrap(); }
|
||||
}
|
||||
fn main() {
|
||||
assert_eq!(SCHEMA_VERSION,7);
|
||||
let args:Vec<_>=std::env::args().collect();
|
||||
match args.get(1).map(String::as_str) {
|
||||
Some("generate")=>{assert_eq!(args.len(),3);let dir=Path::new(&args[2]);assert!(!dir.exists()); for (name,layer) in [("oa",Layer::Oa),("sa",Layer::Sa)] {write_bundle(&dir.join(name),&bundle(&fixture(layer)).bundle);} println!("PASS deterministic OA/SA native fixtures generated");}
|
||||
Some("check")=>{
|
||||
let layer=match args[2].as_str(){"oa"=>Layer::Oa,"sa"=>Layer::Sa,_=>panic!("oa|sa")};
|
||||
let stage=args[3].parse::<usize>().unwrap();assert!(stage<=3);
|
||||
assert_eq!(args.len(),5+stage.saturating_sub(1),"Stages2/3 require original stage1/stage2 checkpoint directories");
|
||||
let actual=load(Path::new(&args[4]));check(&actual,layer,stage);
|
||||
if stage>=2 {
|
||||
let first=load(&Path::new(&args[5]).join("project.arcadia"));
|
||||
let second=if stage==3 {Some(load(&Path::new(&args[6]).join("project.arcadia")))} else {None};
|
||||
history(&actual,layer,stage,&first,second.as_ref());
|
||||
}
|
||||
println!("PASS complete model, exact source and pinned history stage {stage}");
|
||||
}
|
||||
Some("snapshot")=>{assert_eq!(args.len(),4);let actual=load(Path::new(&args[2]));write_bundle(Path::new(&args[3]),&actual.bundle);println!("PASS immutable source checkpoint");}
|
||||
Some("compare")=>{assert_eq!(args.len(),4);let actual=load(Path::new(&args[2]));let checkpoint=load(&Path::new(&args[3]).join(&actual.bundle.entry));assert_eq!(actual.bundle,checkpoint.bundle,"Saved reachable source bytes changed");assert_eq!(actual.decoded.project,checkpoint.decoded.project);println!("PASS exact checkpoint bytes and model");}
|
||||
Some("self-check")=>{for layer in [Layer::Oa,Layer::Sa]{let keys=Keys{children:std::array::from_fn(|_|Id::new_v4()),nodes:std::array::from_fn(|_|Id::new_v4()),allocation:Id::new_v4()};for stage in 0..=3 {let candidate=expected(layer,stage,keys);check(&candidate,layer,stage);if stage>=2 {history(&candidate,layer,stage,&expected(layer,1,keys),(stage==3).then(||expected(layer,2,keys)).as_ref());}let mut altered=candidate.decoded.project.clone();altered.elements.get_mut(&id(11)).unwrap().description="Unrequested mutation".into();assert_ne!(expected(layer,stage,admit(&altered,layer,stage)).decoded.project,altered);}}println!("PASS oracle fixed points and unrelated-mutation discriminator");}
|
||||
_=>panic!("generate DIR | check oa|sa STAGE ENTRY [STAGE1DIR] [STAGE2DIR] | snapshot ENTRY DIR | compare ENTRY DIR | self-check"),
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
# Child-work native fixture and oracle
|
||||
|
||||
[Issue4](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/issues/4): create children of work displayed inside its performer. [Contract](../../child-work-native-contract.rs) is a standalone Rust2024 helper, adapted from basic-editing-contract.rs; it is not a production crate target. OA contains a directly allocated activity with two matching role assignments and evidence links. SA contains a directly allocated function with evidence. Parent work starts folded inside Performer. Included rationale files retain Unicode and CRLF bytes.
|
||||
|
||||
## Build and admit
|
||||
|
||||
Choose the exact tested oa_core rlib and matching dependency directory from the source build being evaluated. Do not select an arbitrary newest cached rlib. From repository root, in PowerShell:
|
||||
|
||||
```powershell
|
||||
& $Rustc --edition=2024 -D warnings --crate-name child_work_native_contract harness/child-work-native-contract.rs --extern "oa_core=$CoreRlib" -L "dependency=$Deps" -o $ContractExe
|
||||
& $ContractExe self-check
|
||||
& $ContractExe generate $NewRunDirectory
|
||||
```
|
||||
|
||||
The variables are explicit caller-selected toolchain, dependency, executable and fresh run-directory paths. Generation refuses an existing destination and creates deterministic `oa/project.arcadia` and `sa/project.arcadia` with included notes. Alternatively copy these checked-in case directories to a fresh writable run directory. Never perform native editing in the checked-in fixtures.
|
||||
|
||||
## Native procedure
|
||||
|
||||
Repeat for `oa` and `sa`. `ENTRY` is the working case's absolute project.arcadia path. Save in place after each action. Keep default names New activity / New function; do not run Layout, move cards, rename objects or manually change fold state during this strict workflow.
|
||||
|
||||
1. Run `check CASE 0 ENTRY`, then `snapshot ENTRY BASELINE_DIR`. Open ENTRY in Studio and select its Allocation view.
|
||||
2. Right-click Parent work → Create child work; Save. Run `check CASE 1 ENTRY`, then `snapshot ENTRY STAGE1_DIR`. Parent work unfolds; original allocation and OA role assignments target the new first child with their IDs, metadata and evidence references preserved.
|
||||
3. Undo once, Save, then `check CASE 0 ENTRY` and `compare ENTRY BASELINE_DIR`. Redo once, Save, then `check CASE 1 ENTRY` and `compare ENTRY STAGE1_DIR`.
|
||||
4. Right-click Parent work → Create child work again; Save. Run `check CASE 2 ENTRY STAGE1_DIR`, then `snapshot ENTRY STAGE2_DIR`. The sibling receives a new direct allocation to the same performer; roles remain on the first child. Undo/Save must compare exactly with STAGE1_DIR; Redo/Save with STAGE2_DIR.
|
||||
5. Right-click the upper FIRST child → Create child work; Save. Run `check CASE 3 ENTRY STAGE1_DIR STAGE2_DIR`, then `snapshot ENTRY STAGE3_DIR`. Original responsibilities transfer to the grandchild. The sibling retains its identity/allocation and moves below the expanded subtree. Undo/Save must compare with STAGE2_DIR; Redo/Save with STAGE3_DIR.
|
||||
6. Close/reopen the saved project in Studio, inspect nesting and responsibility properties, Save, then repeat stage3 check and `compare ENTRY STAGE3_DIR`. Record screenshots and terminal results with the tested native executable/source hashes.
|
||||
|
||||
Each command above is an argument list to the compiled helper. Snapshot directories must be new. Stage2 requires the ORIGINAL accepted stage1 snapshot; stage3 requires the ORIGINAL accepted stage1 and stage2 snapshots. The oracle revalidates earlier snapshots and pins prior child, placement, sibling and allocation IDs. Do not replace those snapshots with newly captured Undo/Redo results. Redo/reopen comparisons also use original first-commit snapshots.
|
||||
|
||||
## Validation scope and admitted evidence
|
||||
|
||||
The oracle compares the complete Project, including placements, routes, metadata and references, and exact reachable SourceBundle bytes. It admits only fresh UUIDv4 identities from predicted typed structural roles. Fixed fixture coordinates are independently predicted without desktop creation/reflow helpers: first child108,188; sibling108,298; grandchild132,252; displaced sibling108,394. It shares the core parser, validator, alias convention and source patcher; it is not an independent parser. It does not inventory unrelated/unreachable physical files. Preserve a separate complete directory inventory when making physical-disk claims.
|
||||
|
||||
On 2026-09-11 root compiled exact contract bytes below using direct rustc with `-D warnings` (exit0). Oracle self-check, fresh fixture generation, and OA/SA stage0 checks all completed exit0. Root executable SHA256: C772BF4A6477BB540A838B20E60CF59C60DDA51B6D2FD2CB3AFEE57F151A9C96; linked core rlib SHA256: D282FEE7FF3B4FDD159EA85B12430262C8DA00E064BD290CCED380B6BA2335B5. Local original logs: `.local/child-work-native/compile-01/`. Independent source review found no material blocker. These are oracle/fixture admission results; **native creation, Undo/Redo and reopen acceptance remain pending** at promotion. Self-check fixed points are not native proof or a general layout evaluator.
|
||||
|
||||
## Exact promoted bytes
|
||||
|
||||
All five promoted files were copied byte-for-byte from the admitted private contract and generated run-01 fixtures, then SHA256-compared to their originals. The rationale files intentionally retain CRLF.
|
||||
|
||||
| File | SHA256 |
|
||||
| --- | --- |
|
||||
| ../../child-work-native-contract.rs | E5522CDF3591C07DE509B69E90B442F7C2F188B8C43C35A7C666C9ABF3387BE0 |
|
||||
| oa/project.arcadia | 68762402F53529AA54A2E906670DA118CD8F0EF1ADB5CB3962FDD92E84A819D0 |
|
||||
| oa/rationale.arcadia | F7B894B4045246C4A87F1F08AC813D45BBAEA3CD740FCC7E86532174FDB8A74E |
|
||||
| sa/project.arcadia | 3A50F2FA68A08C107D905C57D598071B9BB1F20F473157E1DD82DEE3DDA20F82 |
|
||||
| sa/rationale.arcadia | F7B894B4045246C4A87F1F08AC813D45BBAEA3CD740FCC7E86532174FDB8A74E |
|
||||
@@ -0,0 +1,127 @@
|
||||
arcadia 7;
|
||||
project child_work_native "Issue4 Oa child work" id "c1140000-0000-4000-8000-000000000001" {
|
||||
include "rationale.arcadia";
|
||||
description "";
|
||||
|
||||
oa_entity seed_10 "Performer" id "c1140000-0000-4000-8000-00000000000a" {
|
||||
description "Preserve original Performer";
|
||||
parent none;
|
||||
}
|
||||
|
||||
oa_activity seed_11 "Parent work" id "c1140000-0000-4000-8000-00000000000b" {
|
||||
description "Preserve original Parent work";
|
||||
parent none;
|
||||
}
|
||||
|
||||
oa_role role_12 "Responsibility role 12" id "c1140000-0000-4000-8000-00000000000c" {
|
||||
description "Preserve role";
|
||||
parent none;
|
||||
}
|
||||
|
||||
oa_role role_13 "Responsibility role 13" id "c1140000-0000-4000-8000-00000000000d" {
|
||||
description "Preserve role";
|
||||
parent none;
|
||||
}
|
||||
|
||||
allocation original_allocation "Original responsibility" id "c1140000-0000-4000-8000-000000000014" {
|
||||
description "Preserve allocation engineering rationale 雨";
|
||||
source @seed_10;
|
||||
target @seed_11;
|
||||
}
|
||||
|
||||
role_assignment responsibility_22 "Role link 22" id "c1140000-0000-4000-8000-000000000016" {
|
||||
description "Retain role link metadata 22";
|
||||
source @role_12;
|
||||
target @seed_11;
|
||||
}
|
||||
|
||||
role_assignment responsibility_23 "Role link 23" id "c1140000-0000-4000-8000-000000000017" {
|
||||
description "Retain role link metadata 23";
|
||||
source @role_13;
|
||||
target @seed_11;
|
||||
}
|
||||
|
||||
role_realization responsibility_32 "Role link 32" id "c1140000-0000-4000-8000-000000000020" {
|
||||
description "Retain role link metadata 32";
|
||||
source @seed_10;
|
||||
target @role_12;
|
||||
}
|
||||
|
||||
role_realization responsibility_33 "Role link 33" id "c1140000-0000-4000-8000-000000000021" {
|
||||
description "Retain role link metadata 33";
|
||||
source @seed_10;
|
||||
target @role_13;
|
||||
}
|
||||
|
||||
diagram allocation_view "Oa allocated work" id "c1140000-0000-4000-8000-000000000002" {
|
||||
description "Native child-work fixture";
|
||||
layer Oa;
|
||||
projection Allocation;
|
||||
routes [];
|
||||
view_options {
|
||||
coverage "All";
|
||||
exchange_labels "Name";
|
||||
hidden_edges [];
|
||||
participant_categories "All";
|
||||
relation_kinds "All";
|
||||
work_categories "All";
|
||||
work_contexts "All";
|
||||
};
|
||||
}
|
||||
|
||||
node seed_view_40 id "c1140000-0000-4000-8000-000000000028" {
|
||||
collapsed false;
|
||||
diagram @allocation_view;
|
||||
element @seed_10;
|
||||
position {
|
||||
x 60.0;
|
||||
y 60.0;
|
||||
};
|
||||
size {
|
||||
height 94.0;
|
||||
width 224.0;
|
||||
};
|
||||
}
|
||||
|
||||
node seed_view_41 id "c1140000-0000-4000-8000-000000000029" {
|
||||
collapsed true;
|
||||
diagram @allocation_view;
|
||||
element @seed_11;
|
||||
position {
|
||||
x 84.0;
|
||||
y 124.0;
|
||||
};
|
||||
size {
|
||||
height 94.0;
|
||||
width 224.0;
|
||||
};
|
||||
}
|
||||
|
||||
artifact evidence_0 "Responsibility evidence 0" id "c1140000-0000-4000-8000-000000000032" {
|
||||
description "Keep owner identity and evidence metadata";
|
||||
fragment "assignment";
|
||||
owner @original_allocation;
|
||||
relation References;
|
||||
revision "review-7";
|
||||
uri "https://example.invalid/evidence/0";
|
||||
}
|
||||
|
||||
artifact evidence_1 "Responsibility evidence 1" id "c1140000-0000-4000-8000-000000000033" {
|
||||
description "Keep owner identity and evidence metadata";
|
||||
fragment "assignment";
|
||||
owner @responsibility_22;
|
||||
relation References;
|
||||
revision "review-7";
|
||||
uri "https://example.invalid/evidence/1";
|
||||
}
|
||||
|
||||
artifact evidence_2 "Responsibility evidence 2" id "c1140000-0000-4000-8000-000000000034" {
|
||||
description "Keep owner identity and evidence metadata";
|
||||
fragment "assignment";
|
||||
owner @responsibility_23;
|
||||
relation References;
|
||||
revision "review-7";
|
||||
uri "https://example.invalid/evidence/2";
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
// Preserve included note bytes: responsibility 雨.
|
||||
@@ -0,0 +1,75 @@
|
||||
arcadia 7;
|
||||
project child_work_native "Issue4 Sa child work" id "c1140000-0000-4000-8000-000000000001" {
|
||||
include "rationale.arcadia";
|
||||
description "";
|
||||
|
||||
sa_system seed_10 "Performer" id "c1140000-0000-4000-8000-00000000000a" {
|
||||
description "Preserve original Performer";
|
||||
parent none;
|
||||
}
|
||||
|
||||
sa_function seed_11 "Parent work" id "c1140000-0000-4000-8000-00000000000b" {
|
||||
description "Preserve original Parent work";
|
||||
parent none;
|
||||
}
|
||||
|
||||
allocation original_allocation "Original responsibility" id "c1140000-0000-4000-8000-000000000014" {
|
||||
description "Preserve allocation engineering rationale 雨";
|
||||
source @seed_10;
|
||||
target @seed_11;
|
||||
}
|
||||
|
||||
diagram allocation_view "Sa allocated work" id "c1140000-0000-4000-8000-000000000002" {
|
||||
description "Native child-work fixture";
|
||||
layer Sa;
|
||||
projection Allocation;
|
||||
routes [];
|
||||
view_options {
|
||||
coverage "All";
|
||||
exchange_labels "Name";
|
||||
hidden_edges [];
|
||||
participant_categories "All";
|
||||
relation_kinds "All";
|
||||
work_categories "All";
|
||||
work_contexts "All";
|
||||
};
|
||||
}
|
||||
|
||||
node seed_view_40 id "c1140000-0000-4000-8000-000000000028" {
|
||||
collapsed false;
|
||||
diagram @allocation_view;
|
||||
element @seed_10;
|
||||
position {
|
||||
x 60.0;
|
||||
y 60.0;
|
||||
};
|
||||
size {
|
||||
height 94.0;
|
||||
width 224.0;
|
||||
};
|
||||
}
|
||||
|
||||
node seed_view_41 id "c1140000-0000-4000-8000-000000000029" {
|
||||
collapsed true;
|
||||
diagram @allocation_view;
|
||||
element @seed_11;
|
||||
position {
|
||||
x 84.0;
|
||||
y 124.0;
|
||||
};
|
||||
size {
|
||||
height 94.0;
|
||||
width 224.0;
|
||||
};
|
||||
}
|
||||
|
||||
artifact evidence_0 "Responsibility evidence 0" id "c1140000-0000-4000-8000-000000000032" {
|
||||
description "Keep owner identity and evidence metadata";
|
||||
fragment "assignment";
|
||||
owner @original_allocation;
|
||||
relation References;
|
||||
revision "review-7";
|
||||
uri "https://example.invalid/evidence/0";
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
// Preserve included note bytes: responsibility 雨.
|
||||
Reference in New Issue
Block a user