Files
ARCADIA-Studio/harness/fixtures/release1-native/communication-means/README.md
T

221 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.