15 KiB
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
- 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. - 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.
- 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 createoracle below. One Undo/Save must equal the full captured before bundle; one Redo/Save must equal the after bundle exactly, retaining generated UUIDs. - 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. - 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 passcheck 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.
. .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.
. .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):
. .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:
.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.