221 lines
15 KiB
Markdown
221 lines
15 KiB
Markdown
# Communication means native QA fixtures
|
||
|
||
**Acceptance remains scoped by the native reports.** The actual drawn baseline
|
||
has independently passed the draw+rename oracle below; this does not accept every
|
||
transition variant. These deterministic source-6 fixtures and direct
|
||
core oracles cover participant communication, explicit SA endpoint choices and a
|
||
reverse boundary Call/correlated Reply. They do not simulate native drawing or
|
||
establish readability. Root is the native operator. Work on isolated copies;
|
||
never overwrite the tracked bases with native saves.
|
||
|
||
## Fixtures and expected behavior
|
||
|
||
- `cm-draw.arcadia`: OA **Rescue team** / **Control centre**, independently owned
|
||
activities **Report rescue status** / **Assess rescue status**, two allocations
|
||
and **Rescue status** Interaction. There is **no CommunicationMean**. Open the
|
||
saved **Draw operational communication** Overview: participant rectangles
|
||
`(80,70,250,160)` / `(550,70,250,160)`, work rectangles at y330; horizontal gap
|
||
220. SA **Rescue radio** / **Control radio** already have one Standard/Unset
|
||
component socket each, and explicit participant traces. No interfaces,
|
||
PortAllocations or ExchangeAllocations are invented.
|
||
- `cm-transition-ready.arcadia`: same base plus unoriented **Rescue radio channel**
|
||
from Rescue team to Control centre. This isolates transition QA if drawing is
|
||
investigated separately. Existing traces are **Team radio correspondence** and
|
||
**Control radio correspondence**.
|
||
- `cm-reuse.after-template/entry.arcadia`: both SA sockets explicitly reused;
|
||
no new element, one BoundaryExchange and its Exchange trace added.
|
||
- `cm-create.after-template/entry.arcadia`: source **Existing team socket** reused;
|
||
destination explicitly creates a Standard/Unset port under Control radio.
|
||
Exactly one new element, one BoundaryExchange and its Exchange trace added;
|
||
**Existing control socket** is retained unused. Created name follows the GUI:
|
||
`Rescue radio channel · target port`, empty description.
|
||
- `cm-reverse-scenario.arcadia`: existing mapped unoriented channel/boundary plus
|
||
SA BoundaryInterface scenario **Reverse rescue request**. **Control radio
|
||
lifeline** calls **Team radio lifeline**, opposite the stored boundary endpoints;
|
||
**Reply with rescue report** returns and explicitly correlates to **Request
|
||
rescue report**. All ports are Standard/Unset.
|
||
- `cm-reverse-scenario.after-template/entry.arcadia`: **legacy desktop policy** whole-subtree SA→OA transition
|
||
preserves the existing source scenario/messages, maps the boundary to the
|
||
existing OA mean and participants, creates the five OA scenario/lifeline/
|
||
occurrence counterparts and five traces, and creates **zero OA ports**.
|
||
Call resolves Control centre→Rescue team; Reply resolves Rescue team→Control
|
||
centre and points to the mapped Call identity. Legacy desktop Apply also adds five
|
||
placements to the existing OA diagram. The oracle independently predicts all
|
||
five placements, rather than discarding presentation differences.
|
||
|
||
Template after directories are **complete source bundles**, including generated
|
||
`traceability.arcadia` and other modules. Copy entire directories. Their fresh
|
||
counterpart/trace IDs are deterministic reference IDs, not the UUIDs a native
|
||
transition will allocate. `manifest.json` supplies all stable base identities.
|
||
Each request JSON is a complete core request; `destination_diagram` is None.
|
||
Under the legacy desktop policy used by these original templates, this does not
|
||
disable placement: the GUI selects the first target-layer diagram and places
|
||
changed elements that are not already shown. The corrected behavior-root policy
|
||
uses the separate `reverse-behavior` mode below and preserves every saved view.
|
||
|
||
## Native steps
|
||
|
||
1. Open a copy of `cm-draw.arcadia`, select Operational / **Draw operational
|
||
communication**. Fit, then use working zoom at 1440×900 and 1100×700. Start
|
||
**Communication means**, click Rescue team then Control centre. Confirm the
|
||
endpoint tool excludes Activity targets and creates one participant-level
|
||
relation without OA ports. Rename it **Rescue radio channel**. Confirm the
|
||
channel is **unoriented** (`oriented false`), with no items. Save this complete before-transition
|
||
project in a new trial directory; preserve its entire source bundle for Undo.
|
||
The Interaction and its existing allocations must remain unchanged.
|
||
2. Select the mean and open transition to System. **Keep the initial Required
|
||
references scope while explicitly selecting** Rescue team→Rescue radio and
|
||
Control centre→Control radio in their participant pickers. Seeing an existing
|
||
trace candidate is not the same as authoring its mapping. The original
|
||
instructions switched to Selected only too early, hiding both participant
|
||
rows and their existing port choices. This was an instruction error.
|
||
Once both mappings are authored, switch **Include → Selected only**; mapping
|
||
and endpoint drafts survive the scope change. This preserves the selected-only
|
||
request's exact boundary: participant names/baselines are not updated. If
|
||
target Name review is shown while Required references is selected, Keep target
|
||
is consistent; it need not appear after switching. Before both communication
|
||
endpoints are chosen, Apply must remain blocked.
|
||
3. In **System communication endpoints**, source uses **Existing team socket**.
|
||
Target uses **Create Standard port · bidirectional**. Verify the new port is
|
||
under Control radio and no existing socket disappears. Do not change other
|
||
port metadata. Selected-only forward creation adds no standalone node placement:
|
||
the exchange is the plan change and the component port belongs to its owner.
|
||
One Apply then Save As must match the `check create` oracle below. One Undo/Save
|
||
must equal the full captured before bundle; one Redo/Save must equal the after
|
||
bundle exactly, retaining generated UUIDs.
|
||
4. In a separate clean copy, repeat with both **Existing team socket** and
|
||
**Existing control socket**. Run `check reuse`. There must be no new port.
|
||
These are alternative trials, not successive edits to one counterpart.
|
||
5. **Legacy binary reproduction:** open a copy of `cm-reverse-scenario.arcadia`. In System Behavior select
|
||
**Reverse rescue request**. Inspect both named lifelines, reverse Call and
|
||
correlated Reply. Transition the **scenario** to Operational with **Whole
|
||
subtree**; map the boundary to the existing Rescue radio channel and both
|
||
participants to their existing OA counterparts. Keep target Names for differing
|
||
participants. The legacy GUI automatically places new target elements in its first
|
||
OA diagram; no placement opt-out is exposed. One Apply/Save must pass
|
||
`check reverse`; inspect operational lifelines, mapped Reply-to identity,
|
||
both message directions and absence of OA ports. Repeat exact Undo/Redo saves.
|
||
|
||
If a UI choice produces a different result, preserve the full trial bundle and
|
||
record the exact choice. Do not modify the expected contract to make it pass.
|
||
Exchange allocation authoring, Flow-port directional refusal, crash recovery and
|
||
other communication transition variants are separate gates unless exercised.
|
||
|
||
## Generator and exact oracle checker
|
||
|
||
Compile outside Cargo/shared target, after the owner confirms these libraries
|
||
are stable. The matching serde_json fingerprint matters; another feature graph
|
||
with the same crate version will fail Rust trait identity checks.
|
||
|
||
```powershell
|
||
. .local/toolchain/env.ps1
|
||
rustc --edition 2024 -C linker=clang.exe --extern oa_core=.local/target-gnullvm/debug/deps/liboa_core-6c8da57367eec642.rlib --extern serde_json=.local/target-gnullvm/debug/deps/libserde_json-da2c4f333fc47818.rlib -L dependency=.local/target-gnullvm/debug/deps harness/fixtures/release1-native/communication-means/generate-communication-means.rs -o .local/native-fixtures/generate-communication-means.exe
|
||
.local/native-fixtures/generate-communication-means.exe generate .local/native-fixtures/cm-fresh
|
||
.local/native-fixtures/generate-communication-means.exe check create BEFORE_ENTRY.arcadia AFTER_ENTRY.arcadia .local/native-fixtures/cm-native-oracle
|
||
```
|
||
|
||
Use `reuse` or `reverse` instead of `create` for the other cases. The checker loads
|
||
real complete source bundles. It constructs the independent expected core request
|
||
from the preserved before model, with the specified choices above. Actual output
|
||
supplies **only** the created port UUID (create trial) and the new target/trace UUIDs
|
||
matched by exact source identity. New placement UUIDs are matched only by exact
|
||
destination diagram and mapped element identity. Typed reference visitors plus identity-field
|
||
rekeying perform those substitutions; no names, aliases, metadata, history,
|
||
orientations, bindings or reply fields are copied from actual output. Existing
|
||
identities cannot be normalized away. Placement order/geometry is independently
|
||
predicted from the plan's changes and prior diagram: starting with four existing
|
||
OA nodes, positions are `(340,210)`, `(620,210)`, `(60,360)`, `(340,360)`,
|
||
`(620,360)`, each size224×94, unfolded with no port anchors. Existing placements
|
||
remain unchanged. Names/aliases follow the same core placement primitive, with
|
||
no observed native metadata copied into the expected result. The complete resulting Project must equal
|
||
actual, then every reachable source module must equal the production updater's
|
||
output byte-for-byte. Only the entry *filename* is aligned for Save As; contents
|
||
and all included paths remain exact. Successful checking writes expected JSON,
|
||
the complete expected bundle and native request into the supplied output folder.
|
||
|
||
Direct-rustc validation passed generation, complete JSON/source round trips and
|
||
all three checker modes against their template bundles. Forward modes substitute
|
||
two generated target/trace UUIDs and no placement IDs; reverse substitutes ten
|
||
target/trace and five placement UUIDs. All six initial source/JSON fixture files
|
||
remain byte-for-byte unchanged by this correction. Regenerating every output in
|
||
a fresh directory was byte-exact. Temporary counterfactuals with changed placement
|
||
x coordinate, width, alias or swapped element assignments were each rejected by
|
||
the full-model oracle; an added source newline was separately rejected by exact
|
||
bundle comparison. The earlier changed-name after bundle was also rejected.
|
||
Ignored trial evidence is under `.local/native-fixtures/cm-placement-falsifiers/`.
|
||
These are core/tool checks, not native passes.
|
||
Core test contracts reused: `communication_transition_requires_explicit_ports_and_preserves_participant_mapping`,
|
||
`communication_reverse_transition_projects_owners_without_oa_ports`, and
|
||
`reverse_boundary_scenario_transition_keeps_call_orientation_and_reply_identity`.
|
||
|
||
## Actual native drawing baseline oracle
|
||
|
||
`check draw BEFORE_ENTRY AFTER_ENTRY OUTPUT_DIRECTORY` constructs an independent
|
||
`CreateRelation` using the GUI's initial engineering name/alias rule, then an
|
||
`EditRelation` changing only the name to **Rescue radio channel**. The production
|
||
source updater runs after each command. Actual output supplies only the one new
|
||
relation UUID; the checker compares the complete Project and every reachable
|
||
source byte, aligning only the entry filename for Save As.
|
||
|
||
Actual `.local/native-qa/cm-create-before/entry.arcadia` passed against tracked
|
||
`cm-draw.arcadia`. The new UUID is `3e576659-3455-4fb5-811e-5f4a326948f4`; expected
|
||
alias is `communication_means_rescue_team_control_centre`, empty description/items,
|
||
`oriented false`, endpoints cm10→cm11. The complete native entry and independent
|
||
expected entry both hash to
|
||
`40363373B2443714F38D5825F8FAF53183CF004962059E0B611D01DB8E7F7F7E`.
|
||
Log: `.local/native-fixtures/cm-native-draw-check.log`; full expected model/source
|
||
and serialized commands: `.local/native-fixtures/cm-native-draw-oracle/`.
|
||
Changed orientation and alias were independently rejected by full-model equality;
|
||
added source whitespace was rejected by exact-source comparison. The native files
|
||
and existing tracked fixture/oracle models were read-only during this verification.
|
||
|
||
```powershell
|
||
. .local/toolchain/env.ps1
|
||
.local/native-fixtures/generate-communication-means.exe check draw harness/fixtures/release1-native/communication-means/cm-draw.arcadia .local/native-qa/cm-create-before/entry.arcadia .local/native-fixtures/cm-native-draw-oracle
|
||
```
|
||
|
||
## Behavior navigation policy: separate reverse oracle
|
||
|
||
The original `check reverse` and `cm-reverse-scenario.after-template` remain the
|
||
**legacy automatic-placement oracle**: ten target/trace UUIDs plus five placement
|
||
UUIDs. Root verified that policy natively, including exact Save/Undo/Redo. It is
|
||
retained to explain the earlier binary's accepted result, not silently revised.
|
||
|
||
For a binary containing the behavior-transition navigation correction, repeat the
|
||
same reverse scenario review from the unchanged `cm-reverse-scenario.arcadia`
|
||
baseline. After Apply, Behavior should show the explicit OA counterpart of
|
||
**Reverse rescue request**, with the Call and correlated Reply. It must not switch
|
||
to an unrelated architecture view or add placements there. All saved diagrams,
|
||
including geometry, routing and metadata, must remain exactly equal to baseline.
|
||
Save, Undo/save and Redo/save remain one complete transition operation.
|
||
|
||
Use the distinct checker (replace `NEW_NATIVE_AFTER_ENTRY` with the saved entry):
|
||
|
||
```powershell
|
||
. .local/toolchain/env.ps1
|
||
.local/native-fixtures/generate-communication-means.exe check reverse-behavior harness/fixtures/release1-native/communication-means/cm-reverse-scenario.arcadia NEW_NATIVE_AFTER_ENTRY .local/native-fixtures/cm-native-reverse-behavior-oracle
|
||
```
|
||
|
||
`cm-reverse-behavior.after-template` is the new complete expected bundle. Its
|
||
generation mode takes the original source bundle and uses the production source
|
||
updater; it does not rewrite the legacy fixture or templates:
|
||
|
||
```powershell
|
||
.local/native-fixtures/generate-communication-means.exe generate-reverse-behavior harness/fixtures/release1-native/communication-means/cm-reverse-scenario.arcadia NEW_OUTPUT_DIRECTORY
|
||
```
|
||
|
||
The new policy calls the shared core planner/application with the explicit
|
||
scenario root and no destination diagram, independently asserts unchanged
|
||
diagrams, and preserves existing reverse Call/Reply/binding/no-OA-port assertions.
|
||
Only ten generated target/trace UUIDs are normalized; no placement identity or
|
||
property is copied from native output. Full Project and complete source-byte
|
||
comparisons still apply. This mode covers this explicit scenario fixture, not
|
||
arbitrary behavior root types or explicit destination requests.
|
||
|
||
Direct-rustc checks passed the new template and the unchanged legacy template.
|
||
The new checker rejected the legacy placements; the legacy checker rejected
|
||
their omission; the new checker also rejected an added source newline. Regeneration
|
||
was byte-exact. Negative logs are in
|
||
`.local/native-fixtures/cm-reverse-behavior-falsifiers/`. These are fixture-tool
|
||
checks; native acceptance of the corrected navigation policy remains pending.
|