Verify native behavior creation recovery and source authoring contracts

This commit is contained in:
2026-09-11 04:21:56 -07:00
parent 4bb4aaf3dc
commit 2ec72d4241
199 changed files with 19752 additions and 85 deletions
+25 -9
View File
@@ -3,7 +3,8 @@
Independent checker: `harness/behavior-creation-contract.rs`. The contract was
prepared before reading any created output on 2026-09-11. Its direct-rustc build,
self-check and unchanged-baseline comparison pass; native creation acceptance
is not implied.
is not implied. Use the corrected **v2** checker: the initial version published
in `4bb4aaf` incorrectly rejected files safely retained on disk after Undo.
Use a whole-directory copy of the preserved input:
`.local/native-qa/palette-20260910-v3/checkpoint-transition-reopen/project.arcadia`.
@@ -32,8 +33,8 @@ Build only within a coordinated direct-rustc writer window. This imports
```powershell
. .local/toolchain/env.ps1
rustc --edition 2024 -D warnings --crate-name behavior_creation_contract harness/behavior-creation-contract.rs --extern oa_core=.local/target-gnullvm/debug/deps/liboa_core-3e81c616fea1d901.rlib -L dependency=.local/target-gnullvm/debug/deps -C linker=clang.exe -o .local/behavior-creation-oracle-20260911/behavior-creation-contract.exe
$oracle = '.local/behavior-creation-oracle-20260911/behavior-creation-contract.exe'
rustc --edition 2024 -D warnings --crate-name behavior_creation_contract harness/behavior-creation-contract.rs --extern oa_core=.local/target-gnullvm/debug/deps/liboa_core-3e81c616fea1d901.rlib -L dependency=.local/target-gnullvm/debug/deps -C linker=clang.exe -o .local/behavior-creation-oracle-20260911/behavior-creation-contract-v2.exe
$oracle = '.local/behavior-creation-oracle-20260911/behavior-creation-contract-v2.exe'
$base = '.local/native-qa/palette-20260910-v3/checkpoint-transition-reopen/project.arcadia'
& $oracle self-check $base
& $oracle check baseline $base $base $base
@@ -42,13 +43,15 @@ $base = '.local/native-qa/palette-20260910-v3/checkpoint-transition-reopen/proje
& $oracle check machine $base PATH_TO_MACHINE_ENTRY PATH_TO_MACHINE_ENTRY
```
After each creation, Undo once and Save into a fresh checkpoint; `same` must
compare that checkpoint with the preceding accepted stage (the initial baseline
for Process). Redo once and Save into another fresh checkpoint. For Redo and
After each creation, Undo once and Save into a fresh checkpoint; `same` compares
it with the preceding accepted stage (the initial baseline for Process). Supply
the first committed creation checkpoint as the explicit `UNDO_FROM` argument:
the safe saver preserves newly detached files instead of deleting them. Redo
once and Save into another fresh checkpoint. For Redo and
reopen, pass the **first committed checkpoint** as the final role argument:
```powershell
& $oracle same PREVIOUS_ACCEPTED_ENTRY UNDO_ENTRY
& $oracle same PREVIOUS_ACCEPTED_ENTRY UNDO_ENTRY FIRST_COMMITTED_ENTRY
& $oracle check machine $base REDO_ENTRY FIRST_MACHINE_ENTRY
& $oracle same FIRST_MACHINE_ENTRY REOPEN_ENTRY
```
@@ -58,16 +61,29 @@ UUIDs across history; using a redo file as its own role carrier would not prove
identity retention. A cancellation has no predicted addition: compare its
checkpoint with the accepted pre-cancellation checkpoint using `same`.
For Undo, the complete reachable Project and SourceBundle must still equal the
previous accepted stage. The complete disk `.arcadia` file map must equal the
exact `UNDO_FROM` file map with those expected reachable files overlaid. Thus
only known retained paths with exact previously committed bytes are accepted;
unknown files, changed or missing retained files, or changed reachable bytes
fail. The supplied first-commit checkpoint must itself contain exactly its
reachable files. Ordinary creation, cancellation and reopen checks retain that
strict file-set rule; there is no arbitrary detached-file exemption.
The checker borrows only unique fresh UUIDv4 values with exact literal
kind/layer/name, view projection/name, or diagram/element placement roles.
Descriptions, aliases, parents, viewpoint/context, body defaults and geometry
are independently constructed. It compares complete Project and SourceBundle,
rejects detached extra `.arcadia` files, and uses pinned six-file byte lengths
checks the exact disk-file policy above, and uses pinned six-file byte lengths
and FNV-1a fingerprints to refuse a substituted baseline. SHA-256 provenance
is recorded in `harness/release-behavior-creation-oracle-20260911.md`.
Self-checks use deliberately false metadata/geometry in the role carrier, then
reject changed scenario semantics, unrelated edits, extra objects/files and
source-only comment drift. Native focus, readable labels, minimum/wide layout,
source-only comment drift. V2 additionally accepts an independently constructed
valid Undo retention case and rejects unknown, changed or missing detached
files. The existing immutable transition Undo also passes with four reachable
sources and six exact disk files; real isolated copies with an unknown or
modified detached file fail. Native focus, readable labels, minimum/wide layout,
selection of the new owner/view, and one-step Undo/Redo are separate observations;
saved equality alone cannot establish them.
@@ -0,0 +1,112 @@
# Scenario authoring native contract
Prepared by Codex-956atf /root/release_audit on 2026-09-10. Root compiled the checker with warnings denied, passed its self-check, generated the deterministic baseline and verified the complete model/source on Windows. **Native Studio execution remains pending.** This fixture/oracle prepares B2 clicked-slot authoring and B3 caller return; it does not establish GUI acceptance.
`harness/scenario-authoring-contract.rs` generates deterministic OA and SA versions of the same small scenario tree. Each has Activity/Function choices, a Ready state, explicit lifelines, two nested ALT fragments, and fixed root/operand insertion anchors. A caller contains two distinct uses of B verification; B uses C detail. Each use explicitly maps both referenced lifelines to distinct local lifelines representing the same work. No native action/state/reuse/fragment role exists in the baseline.
The checked-in `base` directory is the verified fixture. Preserve it and copy the whole directory for native work. To reproduce generation, use a fresh output directory after compiling and self-checking the checker.
## Compile and generate
Use the current matching `oa_core` and `serde_json` rlibs from root's accepted Cargo output. Do not build another Cargo tree or select an arbitrary stale rlib. With root's configured Rust environment and clang linker, substitute the exact recorded paths below:
```powershell
. .local/toolchain/env.ps1
$scenarioCore = 'ABSOLUTE_PATH_TO_CURRENT_liboa_core-HASH.rlib'
$scenarioJson = 'ABSOLUTE_PATH_TO_MATCHING_libserde_json-HASH.rlib'
$scenarioDeps = [IO.Path]::GetDirectoryName($scenarioCore)
$scenarioLinker = 'ABSOLUTE_PATH_TO_TOOLCHAIN_clang.exe'
New-Item -ItemType Directory -Force -Path .local/native-qa | Out-Null
rustc --edition 2024 -D warnings harness/scenario-authoring-contract.rs --extern "oa_core=$scenarioCore" --extern "serde_json=$scenarioJson" -L "dependency=$scenarioDeps" -C "linker=$scenarioLinker" -o .local/native-qa/scenario-authoring-contract.exe
.local/native-qa/scenario-authoring-contract.exe self-check
.local/native-qa/scenario-authoring-contract.exe generate .local/native-qa/scenario-generated
.local/native-qa/scenario-authoring-contract.exe check baseline .local/native-qa/scenario-generated/project.arcadia
```
The compiler target must match those rlibs; include root's explicit `--target` if its toolchain setup requires one. Record the exact command, compiler/rlib identities, checker hash and result. Generation refuses any existing output directory. It writes `project.arcadia`, an included Unicode/CRLF `rationale.arcadia`, and `expected-baseline.json`. The JSON is a reference artifact, not an additional source document. The root validation record below supplies the exact first-run identities.
Copy the **whole** generated base into separate fresh OA and SA native working directories. Preserve the base. Each layer's four checkpoints start from that same baseline; `sa-action` does not include the OA creations. Preserve the whole working directory after each declared Save/Undo/Redo checkpoint. Do not modify fixture sources or adjust expected fields to match observed output.
## Fixed locations and choices
The UUID namespace is `5ceaa100-0000-4000-8000-000000000000` plus a deterministic integer. Stable aliases make the intended records easy to confirm in the inspector/source. All labels below have `OA ` or `SA ` prepended.
| Role | OA alias / UUID suffix | SA alias / UUID suffix |
| --- | --- | --- |
| A caller | `scenario_oa_30` / `000000000082` | `scenario_sa_30` / `0000000000e6` |
| B verification | `scenario_oa_31` / `000000000083` | `scenario_sa_31` / `0000000000e7` |
| C detail | `scenario_oa_32` / `000000000084` | `scenario_sa_32` / `0000000000e8` |
| Inner chosen operand | `scenario_oa_55` / `00000000009b` | `scenario_sa_55` / `0000000000ff` |
| Inner anchor | `scenario_oa_57` / `00000000009d` | `scenario_sa_57` / `000000000101` |
| Root entry / Root exit | `scenario_oa_50` / `scenario_oa_62` | `scenario_sa_50` / `scenario_sa_62` |
| First use of B / Second use of B | `scenario_oa_60` / `scenario_oa_61` | `scenario_sa_60` / `scenario_sa_61` |
| B use of C | `scenario_oa_64` | `scenario_sa_64` |
The target operand is **Outer ALT → Outer chosen operand → Inner ALT → Inner chosen operand**. The other inner operand and outer fallback are deliberate nearby decoys. Every sibling's records and order must remain unchanged.
## B3 navigation before editing
Open `project.arcadia`, select **OA A caller**, and open **Behavior**. At normal size and at 1100 × 700, record the actual diagram visibility, selected occurrence, selected tool, canvas scroll and outer page scroll. Native screenshots and observations must establish these UI properties; the source checker cannot observe them.
1. Select **OA Second use of B**, then **Open definition**. In **OA B verification**, select **OA B use of C** and open its definition. **Back to caller** must return first to the exact B use, then to the exact **Second use of B** in A, retaining the caller's tool and canvas/page offsets subject to viewport clamping. The first use is a distinct occurrence, not an interchangeable return address.
2. Repeat through **OA First use of B**. Also exercise the detailed-list **Open OA B verification →** action for one of those uses; it must retain that initiating occurrence. After Back, ordinary scrolling must continue naturally rather than snapping repeatedly to the restored offset.
3. Save without edits and run `check baseline ENTRY`. There must be no new model Undo entry from navigation. Repeat the two-use return once in **SA A caller**. No new model or source checkpoint is needed: both layers still equal baseline.
For one blocked navigation case, arm Add action, click a valid slot and type `unfinished native action` without creating it. Attempt Open/Back only if those controls are reachable in that pending state. The draft must remain visible/recoverable or the navigation control must be unavailable. Cancel, Save, and check baseline. Record the actual control availability; do not count an unperformed attempt as a pass.
## B2 four creations per layer
Run the same four steps on the separate OA and SA copies. Replace `XX` below with the literal `OA` or `SA`, and lowercase `xx` in checker modes. Select **XX A caller → Behavior**. The compact selector's currently authored labels are **Add action**, **Observe state**, **Reuse scenario**, and **Add fragment**. Choose the tool and click the prescribed visible insertion slot; do not substitute a Tools append action or repair the destination afterward through the inspector.
Before pressing Create, record the form's destination/before-slot label and selected lifeline. This observation proves which native gesture was performed. Full model/source equality then checks the resulting semantics independently.
| Step / checkpoint | Prescribed click and literal form values | Expected insertion |
| --- | --- | --- |
| 1. `xx-action` | **Add action**; click on **XX A inspector** at the root slot before **XX Root entry**. Name `XX native action`; work **XX Inspect ticket**; observed lifeline **XX A inspector**. Create. | New Action is the first A root step, before the original root entry. |
| 2. `xx-state` | **Observe state**; click in **Inner chosen operand** before **XX Inner anchor**, on **XX A inspector**. Name `XX native state`; state **XX Ready**; observed lifeline **XX A inspector**. Create. | The inner chosen operand becomes `[native state, Inner anchor]`. Both enclosing ALT structures retain their original identities/guards. |
| 3. `xx-reuse` | **Reuse scenario**; click in that same inner operand before **XX Inner anchor**. Name `XX native reuse`; definition **XX B verification**. Explicitly bind **XX B inspector → XX A inspector** and **XX B recorder → XX A recorder**. Create. | Inner operand becomes `[native state, native reuse, Inner anchor]`. No scenario/lifeline definition is cloned. |
| 4. `xx-fragment` | **Add fragment**; click the root slot before **XX Root exit**. Name `XX native alternative`; operator **ALT · alternatives**; first guard `ticket.priority > 2`; second guard `ticket.priority <= 2`. Create. | One new root Fragment followed by the original Root exit. Its two new operands are empty and named `XX native alternative · operand 1` and `XX native alternative · operand 2`. Existing occurrences are not wrapped or moved into them. |
Before each Create, retain the previously verified stage's whole-directory snapshot (the generated baseline for step 1). After Create: Save, preserve a new whole-directory snapshot and check the declared checkpoint. Undo once, Save and preserve another copy: check the preceding checkpoint **and require `same PREVIOUS_VERIFIED_ENTRY UNDO_ENTRY`**. Redo once, Save and preserve another copy: check the current checkpoint **and require `same CURRENT_VERIFIED_ENTRY REDO_ENTRY`**. The `same` mode compares every Project identity/field and every SourceBundle byte; rerunning a semantic checkpoint alone permits a new set of fresh UUIDs and cannot prove exact history restoration. Never replace the preserved verified snapshots with their restored copies.
In particular, a fragment's creation and both operands must disappear/reappear in one Undo/Redo step with their original IDs. Reopen the final saved entry, Save and preserve the reopened copy, check `xx-fragment`, and require `same FINAL_VERIFIED_ENTRY REOPENED_ENTRY`. Use the normal Save operation in the working directory; save copies by preserving the whole directory so the included source stays attached.
Example checks for an OA run:
```powershell
.local/native-qa/scenario-authoring-contract.exe check oa-action PATH_TO_SAVED_project.arcadia
.local/native-qa/scenario-authoring-contract.exe check baseline PATH_TO_ACTION_UNDO_project.arcadia
.local/native-qa/scenario-authoring-contract.exe same PATH_TO_VERIFIED_BASELINE_project.arcadia PATH_TO_ACTION_UNDO_project.arcadia
.local/native-qa/scenario-authoring-contract.exe check oa-action PATH_TO_ACTION_REDO_project.arcadia
.local/native-qa/scenario-authoring-contract.exe same PATH_TO_VERIFIED_ACTION_project.arcadia PATH_TO_ACTION_REDO_project.arcadia
.local/native-qa/scenario-authoring-contract.exe check oa-state PATH_TO_SAVED_project.arcadia
.local/native-qa/scenario-authoring-contract.exe check oa-reuse PATH_TO_SAVED_project.arcadia
.local/native-qa/scenario-authoring-contract.exe check oa-fragment PATH_TO_REOPENED_project.arcadia
.local/native-qa/scenario-authoring-contract.exe same PATH_TO_VERIFIED_FRAGMENT_project.arcadia PATH_TO_REOPENED_project.arcadia
```
One cancellation can be inserted before step 1: arm Observe state and click away from a lifeline. The form must require an explicit observed lifeline; it must not silently choose an unrelated lane. Enter an incomplete name, use the form's **Cancel** control, Save, and check baseline. Exercise Escape separately: current behavior cancels the gesture while preserving the pending scenario form/raw draft; it is not form cancellation. Focus, pending-marker visibility, stable canvas origin, Escape delivery, minimum-size reachability and clicked-slot geometry require separate native observations. Do not infer those from a passing file check.
## Independence and limits
The checker uses only unique **Kind::Occurrence + layer + predetermined literal name** roles to discover fresh UUIDv4 IDs. IDs must be distinct and absent from the deterministic baseline. It independently constructs every other field: body, parent, reference targets, binding order and identities, guards, empty operands, pre/postconditions, description, alias and insertion order. It does not read observed fields into the prediction. Any unclaimed object, sibling edit, wrong destination, binding, name/value or source byte causes full equality to fail.
Expected transactions use core typed commands and source writeback, independently of the desktop planners, then compare the whole Project and the complete reachable two-file SourceBundle. The source oracle deliberately shares the core language engine; this fixture validates native GUI-to-model/source parity rather than supplying an independent language implementation. Semantic checkpoint checks plus required exact saved/restored snapshot comparisons prove state and identity restoration only for the captured Undo/Redo/reopen sequence, not arbitrary history internals.
The self-check covers deterministic seeds, all eight OA/SA checkpoint fixed points, carriers with deliberately false parent/body/alias/description, rejected unrelated edits, wrong insertion order/parent/bindings, and a model-neutral change to the retained note. It also constructs two equivalent valid checkpoints with different fresh action IDs: each passes semantic prediction, while exact `same` snapshot comparison rejects their identity difference. It is not a native UI test. Native action/return/scroll/recovery, screenshot and release evidence remain pending.
## Root validation — 2026-09-10
Source `632c8fe` (checker unchanged from `8547b85`), Rust 1.98.1 target `x86_64-pc-windows-gnullvm`, LLVM-MinGW 20260908 clang 23.1.1. The direct `rustc` command above used the already completed core/JSON rlibs from the active cold desktop build, with no second Cargo writer. Compile with `-D warnings`, `self-check`, `generate`, and `check baseline` all exited 0. Generation reported 62 elements and two reachable sources. The initial PowerShell recipe's incompatible `Split-Path -LiteralPath -Parent` was corrected to `IO.Path.GetDirectoryName` before compilation.
| Artifact | SHA256 |
| --- | --- |
| Checker executable `.local/native-qa/scenario-authoring-contract.exe` | `407318D5C7CAE6B237F261A21B0FDA55F6FEF655CB9DFCFA3153A7E372638498` |
| Checker source working bytes | `3BDA3EBC38E99BB658AD3EB9A5889E9C1CC77E8B1F8609079580AE27A4E8E789` |
| `liboa_core-6c8da57367eec642.rlib` | `D7EFB5F3C423FF8AF13637F53CC481502C7F317BF01E9D072F9EFD64CD954C13` |
| `libserde_json-da2c4f333fc47818.rlib` | `485300D4125A69DE7DA5413F832EB4B9CDE547E60F103F3B284E49AEE4194D05` |
| `base/project.arcadia` | `9B1AFBE96B0BF8FA613451B00929492F05A59B9EB2CA74C2C374A8B7BB7CBA9E` |
| `base/rationale.arcadia` | `82DF210F22F6AA336A3E7E00240977D671C7C3923DB7BC58FB29E6D98B67EF49` |
| `base/expected-baseline.json` | `ABD8246C939EBB8A2162EF82E23D0FB322EE1A8B4D0D7C28A34037E42E86E841` |
Logs are `.local/logs/scenario-oracle-{compile,self-check,generate,baseline}.log`. These results validate the independent evaluator and fixture only; the desktop test build was still running and no Studio native pass is transferred from them.
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,674 @@
arcadia 7;
project scenario_authoring "Scenario authoring contract" id "5ceaa100-0000-4000-8000-000000000001" {
include "rationale.arcadia";
description "Native clicked-slot and caller-return contract.";
oa_activity scenario_oa_10 "OA Inspect ticket" id "5ceaa100-0000-4000-8000-00000000006e" {
description "";
parent none;
}
oa_activity scenario_oa_11 "OA Record result" id "5ceaa100-0000-4000-8000-00000000006f" {
description "";
parent none;
}
oa_state_machine scenario_oa_20 "OA Ticket modes" id "5ceaa100-0000-4000-8000-000000000078" {
description "";
parent none;
}
oa_region scenario_oa_21 "OA Ticket region" id "5ceaa100-0000-4000-8000-000000000079" {
description "";
parent @scenario_oa_20;
}
oa_state scenario_oa_22 "OA Ready" id "5ceaa100-0000-4000-8000-00000000007a" {
description "";
do_activity "";
entry "";
exit "";
kind State;
parent @scenario_oa_21;
}
oa_scenario scenario_oa_30 "OA A caller" id "5ceaa100-0000-4000-8000-000000000082" {
context none;
description "";
parent none;
postcondition "";
precondition "";
steps [@scenario_oa_50, @scenario_oa_51, @scenario_oa_60, @scenario_oa_61, @scenario_oa_62];
viewpoint OperationalActivity;
}
oa_scenario scenario_oa_31 "OA B verification" id "5ceaa100-0000-4000-8000-000000000083" {
context none;
description "";
parent none;
postcondition "";
precondition "";
steps [@scenario_oa_63, @scenario_oa_64, @scenario_oa_65];
viewpoint OperationalActivity;
}
oa_scenario scenario_oa_32 "OA C detail" id "5ceaa100-0000-4000-8000-000000000084" {
context none;
description "";
parent none;
postcondition "";
precondition "";
steps [@scenario_oa_66];
viewpoint OperationalActivity;
}
oa_lifeline scenario_oa_40 "OA A inspector" id "5ceaa100-0000-4000-8000-00000000008c" {
description "";
parent @scenario_oa_30;
represented @scenario_oa_10;
}
oa_lifeline scenario_oa_41 "OA A recorder" id "5ceaa100-0000-4000-8000-00000000008d" {
description "";
parent @scenario_oa_30;
represented @scenario_oa_11;
}
oa_lifeline scenario_oa_42 "OA B inspector" id "5ceaa100-0000-4000-8000-00000000008e" {
description "";
parent @scenario_oa_31;
represented @scenario_oa_10;
}
oa_lifeline scenario_oa_43 "OA B recorder" id "5ceaa100-0000-4000-8000-00000000008f" {
description "";
parent @scenario_oa_31;
represented @scenario_oa_11;
}
oa_lifeline scenario_oa_44 "OA C inspector" id "5ceaa100-0000-4000-8000-000000000090" {
description "";
parent @scenario_oa_32;
represented @scenario_oa_10;
}
oa_lifeline scenario_oa_45 "OA C recorder" id "5ceaa100-0000-4000-8000-000000000091" {
description "";
parent @scenario_oa_32;
represented @scenario_oa_11;
}
oa_occurrence scenario_oa_50 "OA Root entry" id "5ceaa100-0000-4000-8000-000000000096" {
body {
Action {
action @scenario_oa_10;
lifeline @scenario_oa_40;
};
};
description "";
parent @scenario_oa_30;
postcondition "";
precondition "";
}
oa_occurrence scenario_oa_51 "OA Outer ALT" id "5ceaa100-0000-4000-8000-000000000097" {
body {
Fragment {
branches [@scenario_oa_52, @scenario_oa_53];
operator Alternative;
};
};
description "";
parent @scenario_oa_30;
postcondition "";
precondition "";
}
oa_occurrence scenario_oa_52 "OA Outer chosen operand" id "5ceaa100-0000-4000-8000-000000000098" {
body {
Branch {
guard "ticket.present";
occurrences [@scenario_oa_54];
};
};
description "";
parent @scenario_oa_51;
postcondition "";
precondition "";
}
oa_occurrence scenario_oa_53 "OA Outer fallback operand" id "5ceaa100-0000-4000-8000-000000000099" {
body {
Branch {
guard "else";
occurrences [@scenario_oa_59];
};
};
description "";
parent @scenario_oa_51;
postcondition "";
precondition "";
}
oa_occurrence scenario_oa_54 "OA Inner ALT" id "5ceaa100-0000-4000-8000-00000000009a" {
body {
Fragment {
branches [@scenario_oa_55, @scenario_oa_56];
operator Alternative;
};
};
description "";
parent @scenario_oa_52;
postcondition "";
precondition "";
}
oa_occurrence scenario_oa_55 "OA Inner chosen operand" id "5ceaa100-0000-4000-8000-00000000009b" {
body {
Branch {
guard "ticket.ready";
occurrences [@scenario_oa_57];
};
};
description "";
parent @scenario_oa_54;
postcondition "";
precondition "";
}
oa_occurrence scenario_oa_56 "OA Inner other operand" id "5ceaa100-0000-4000-8000-00000000009c" {
body {
Branch {
guard "else";
occurrences [@scenario_oa_58];
};
};
description "";
parent @scenario_oa_54;
postcondition "";
precondition "";
}
oa_occurrence scenario_oa_57 "OA Inner anchor" id "5ceaa100-0000-4000-8000-00000000009d" {
body {
Action {
action @scenario_oa_10;
lifeline @scenario_oa_40;
};
};
description "";
parent @scenario_oa_55;
postcondition "";
precondition "";
}
oa_occurrence scenario_oa_58 "OA Inner other anchor" id "5ceaa100-0000-4000-8000-00000000009e" {
body {
Action {
action @scenario_oa_10;
lifeline @scenario_oa_40;
};
};
description "";
parent @scenario_oa_56;
postcondition "";
precondition "";
}
oa_occurrence scenario_oa_59 "OA Fallback anchor" id "5ceaa100-0000-4000-8000-00000000009f" {
body {
Action {
action @scenario_oa_11;
lifeline @scenario_oa_41;
};
};
description "";
parent @scenario_oa_53;
postcondition "";
precondition "";
}
oa_occurrence scenario_oa_60 "OA First use of B" id "5ceaa100-0000-4000-8000-0000000000a0" {
body {
ScenarioUse {
bindings [{
local @scenario_oa_40;
referenced @scenario_oa_42;
}, {
local @scenario_oa_41;
referenced @scenario_oa_43;
}];
scenario @scenario_oa_31;
};
};
description "";
parent @scenario_oa_30;
postcondition "";
precondition "";
}
oa_occurrence scenario_oa_61 "OA Second use of B" id "5ceaa100-0000-4000-8000-0000000000a1" {
body {
ScenarioUse {
bindings [{
local @scenario_oa_40;
referenced @scenario_oa_42;
}, {
local @scenario_oa_41;
referenced @scenario_oa_43;
}];
scenario @scenario_oa_31;
};
};
description "";
parent @scenario_oa_30;
postcondition "";
precondition "";
}
oa_occurrence scenario_oa_62 "OA Root exit" id "5ceaa100-0000-4000-8000-0000000000a2" {
body {
Action {
action @scenario_oa_11;
lifeline @scenario_oa_41;
};
};
description "";
parent @scenario_oa_30;
postcondition "";
precondition "";
}
oa_occurrence scenario_oa_63 "OA B entry" id "5ceaa100-0000-4000-8000-0000000000a3" {
body {
Action {
action @scenario_oa_10;
lifeline @scenario_oa_42;
};
};
description "";
parent @scenario_oa_31;
postcondition "";
precondition "";
}
oa_occurrence scenario_oa_64 "OA B use of C" id "5ceaa100-0000-4000-8000-0000000000a4" {
body {
ScenarioUse {
bindings [{
local @scenario_oa_42;
referenced @scenario_oa_44;
}, {
local @scenario_oa_43;
referenced @scenario_oa_45;
}];
scenario @scenario_oa_32;
};
};
description "";
parent @scenario_oa_31;
postcondition "";
precondition "";
}
oa_occurrence scenario_oa_65 "OA B exit" id "5ceaa100-0000-4000-8000-0000000000a5" {
body {
Action {
action @scenario_oa_11;
lifeline @scenario_oa_43;
};
};
description "";
parent @scenario_oa_31;
postcondition "";
precondition "";
}
oa_occurrence scenario_oa_66 "OA C entry" id "5ceaa100-0000-4000-8000-0000000000a6" {
body {
Action {
action @scenario_oa_10;
lifeline @scenario_oa_44;
};
};
description "";
parent @scenario_oa_32;
postcondition "";
precondition "";
}
sa_function scenario_sa_10 "SA Inspect ticket" id "5ceaa100-0000-4000-8000-0000000000d2" {
description "";
parent none;
}
sa_function scenario_sa_11 "SA Record result" id "5ceaa100-0000-4000-8000-0000000000d3" {
description "";
parent none;
}
sa_state_machine scenario_sa_20 "SA Ticket modes" id "5ceaa100-0000-4000-8000-0000000000dc" {
description "";
parent none;
}
sa_region scenario_sa_21 "SA Ticket region" id "5ceaa100-0000-4000-8000-0000000000dd" {
description "";
parent @scenario_sa_20;
}
sa_state scenario_sa_22 "SA Ready" id "5ceaa100-0000-4000-8000-0000000000de" {
description "";
do_activity "";
entry "";
exit "";
kind State;
parent @scenario_sa_21;
}
sa_scenario scenario_sa_30 "SA A caller" id "5ceaa100-0000-4000-8000-0000000000e6" {
context none;
description "";
parent none;
postcondition "";
precondition "";
steps [@scenario_sa_50, @scenario_sa_51, @scenario_sa_60, @scenario_sa_61, @scenario_sa_62];
viewpoint Functional;
}
sa_scenario scenario_sa_31 "SA B verification" id "5ceaa100-0000-4000-8000-0000000000e7" {
context none;
description "";
parent none;
postcondition "";
precondition "";
steps [@scenario_sa_63, @scenario_sa_64, @scenario_sa_65];
viewpoint Functional;
}
sa_scenario scenario_sa_32 "SA C detail" id "5ceaa100-0000-4000-8000-0000000000e8" {
context none;
description "";
parent none;
postcondition "";
precondition "";
steps [@scenario_sa_66];
viewpoint Functional;
}
sa_lifeline scenario_sa_40 "SA A inspector" id "5ceaa100-0000-4000-8000-0000000000f0" {
description "";
parent @scenario_sa_30;
represented @scenario_sa_10;
}
sa_lifeline scenario_sa_41 "SA A recorder" id "5ceaa100-0000-4000-8000-0000000000f1" {
description "";
parent @scenario_sa_30;
represented @scenario_sa_11;
}
sa_lifeline scenario_sa_42 "SA B inspector" id "5ceaa100-0000-4000-8000-0000000000f2" {
description "";
parent @scenario_sa_31;
represented @scenario_sa_10;
}
sa_lifeline scenario_sa_43 "SA B recorder" id "5ceaa100-0000-4000-8000-0000000000f3" {
description "";
parent @scenario_sa_31;
represented @scenario_sa_11;
}
sa_lifeline scenario_sa_44 "SA C inspector" id "5ceaa100-0000-4000-8000-0000000000f4" {
description "";
parent @scenario_sa_32;
represented @scenario_sa_10;
}
sa_lifeline scenario_sa_45 "SA C recorder" id "5ceaa100-0000-4000-8000-0000000000f5" {
description "";
parent @scenario_sa_32;
represented @scenario_sa_11;
}
sa_occurrence scenario_sa_50 "SA Root entry" id "5ceaa100-0000-4000-8000-0000000000fa" {
body {
Action {
action @scenario_sa_10;
lifeline @scenario_sa_40;
};
};
description "";
parent @scenario_sa_30;
postcondition "";
precondition "";
}
sa_occurrence scenario_sa_51 "SA Outer ALT" id "5ceaa100-0000-4000-8000-0000000000fb" {
body {
Fragment {
branches [@scenario_sa_52, @scenario_sa_53];
operator Alternative;
};
};
description "";
parent @scenario_sa_30;
postcondition "";
precondition "";
}
sa_occurrence scenario_sa_52 "SA Outer chosen operand" id "5ceaa100-0000-4000-8000-0000000000fc" {
body {
Branch {
guard "ticket.present";
occurrences [@scenario_sa_54];
};
};
description "";
parent @scenario_sa_51;
postcondition "";
precondition "";
}
sa_occurrence scenario_sa_53 "SA Outer fallback operand" id "5ceaa100-0000-4000-8000-0000000000fd" {
body {
Branch {
guard "else";
occurrences [@scenario_sa_59];
};
};
description "";
parent @scenario_sa_51;
postcondition "";
precondition "";
}
sa_occurrence scenario_sa_54 "SA Inner ALT" id "5ceaa100-0000-4000-8000-0000000000fe" {
body {
Fragment {
branches [@scenario_sa_55, @scenario_sa_56];
operator Alternative;
};
};
description "";
parent @scenario_sa_52;
postcondition "";
precondition "";
}
sa_occurrence scenario_sa_55 "SA Inner chosen operand" id "5ceaa100-0000-4000-8000-0000000000ff" {
body {
Branch {
guard "ticket.ready";
occurrences [@scenario_sa_57];
};
};
description "";
parent @scenario_sa_54;
postcondition "";
precondition "";
}
sa_occurrence scenario_sa_56 "SA Inner other operand" id "5ceaa100-0000-4000-8000-000000000100" {
body {
Branch {
guard "else";
occurrences [@scenario_sa_58];
};
};
description "";
parent @scenario_sa_54;
postcondition "";
precondition "";
}
sa_occurrence scenario_sa_57 "SA Inner anchor" id "5ceaa100-0000-4000-8000-000000000101" {
body {
Action {
action @scenario_sa_10;
lifeline @scenario_sa_40;
};
};
description "";
parent @scenario_sa_55;
postcondition "";
precondition "";
}
sa_occurrence scenario_sa_58 "SA Inner other anchor" id "5ceaa100-0000-4000-8000-000000000102" {
body {
Action {
action @scenario_sa_10;
lifeline @scenario_sa_40;
};
};
description "";
parent @scenario_sa_56;
postcondition "";
precondition "";
}
sa_occurrence scenario_sa_59 "SA Fallback anchor" id "5ceaa100-0000-4000-8000-000000000103" {
body {
Action {
action @scenario_sa_11;
lifeline @scenario_sa_41;
};
};
description "";
parent @scenario_sa_53;
postcondition "";
precondition "";
}
sa_occurrence scenario_sa_60 "SA First use of B" id "5ceaa100-0000-4000-8000-000000000104" {
body {
ScenarioUse {
bindings [{
local @scenario_sa_40;
referenced @scenario_sa_42;
}, {
local @scenario_sa_41;
referenced @scenario_sa_43;
}];
scenario @scenario_sa_31;
};
};
description "";
parent @scenario_sa_30;
postcondition "";
precondition "";
}
sa_occurrence scenario_sa_61 "SA Second use of B" id "5ceaa100-0000-4000-8000-000000000105" {
body {
ScenarioUse {
bindings [{
local @scenario_sa_40;
referenced @scenario_sa_42;
}, {
local @scenario_sa_41;
referenced @scenario_sa_43;
}];
scenario @scenario_sa_31;
};
};
description "";
parent @scenario_sa_30;
postcondition "";
precondition "";
}
sa_occurrence scenario_sa_62 "SA Root exit" id "5ceaa100-0000-4000-8000-000000000106" {
body {
Action {
action @scenario_sa_11;
lifeline @scenario_sa_41;
};
};
description "";
parent @scenario_sa_30;
postcondition "";
precondition "";
}
sa_occurrence scenario_sa_63 "SA B entry" id "5ceaa100-0000-4000-8000-000000000107" {
body {
Action {
action @scenario_sa_10;
lifeline @scenario_sa_42;
};
};
description "";
parent @scenario_sa_31;
postcondition "";
precondition "";
}
sa_occurrence scenario_sa_64 "SA B use of C" id "5ceaa100-0000-4000-8000-000000000108" {
body {
ScenarioUse {
bindings [{
local @scenario_sa_42;
referenced @scenario_sa_44;
}, {
local @scenario_sa_43;
referenced @scenario_sa_45;
}];
scenario @scenario_sa_32;
};
};
description "";
parent @scenario_sa_31;
postcondition "";
precondition "";
}
sa_occurrence scenario_sa_65 "SA B exit" id "5ceaa100-0000-4000-8000-000000000109" {
body {
Action {
action @scenario_sa_11;
lifeline @scenario_sa_43;
};
};
description "";
parent @scenario_sa_31;
postcondition "";
precondition "";
}
sa_occurrence scenario_sa_66 "SA C entry" id "5ceaa100-0000-4000-8000-00000000010a" {
body {
Action {
action @scenario_sa_10;
lifeline @scenario_sa_44;
};
};
description "";
parent @scenario_sa_32;
postcondition "";
precondition "";
}
}
@@ -0,0 +1,2 @@
// Retain caller/operand evidence: ticket 雨.
// Navigation never edits this note.