Capture full-scene native editing and probe label candidate feasibility
@@ -0,0 +1,4 @@
|
||||
native-reading/** -text whitespace=-blank-at-eol,-blank-at-eof,cr-at-eol
|
||||
*.json -text whitespace=cr-at-eol
|
||||
issue38-design-*.md -text whitespace=cr-at-eol
|
||||
launch-reading*.py -text whitespace=cr-at-eol
|
||||
@@ -0,0 +1,90 @@
|
||||
# Full-scene reading and local editing experiment
|
||||
|
||||
This is evidence for [issue 38](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/issues/38),
|
||||
not a production readability fix or full diagram acceptance. The complete
|
||||
eight-card mixed view is a documented reconstruction, not the user's recovered
|
||||
view. Its original semantic inventory and probe source are in the
|
||||
[September 29 experiment](../diagram-readability-20260929/README.md).
|
||||
|
||||
Native desktop source is `6e7c4ddaf0775198384a8c4882809ea8e14b2976`, executable
|
||||
SHA256 `d55ecad4b0f75c0c9c26625e5441bef9c9360890b65bc13236c6ebfaf03d631e`.
|
||||
Its unchanged routing/core source is the released `715036e` foundation. Geometry
|
||||
queries use probe source `f754ad85d3674a709d10054e6fe23079f977c547`, executable
|
||||
SHA256 `d94f86b2f4af594b27960cfa169fd681adb9b3a5eae2928dd72c541bc2db1c57`.
|
||||
Launch receipts record the exact runtime, system-only child PATH and copied inputs.
|
||||
|
||||
## Observations and conservation
|
||||
|
||||
[Initial reading](native-reading/review.md) records endpoint/path uncertainty.
|
||||
Opening simpler OA/SA views incidentally exposed answers, so it is not pristine
|
||||
blind accuracy evidence. [Assisted inspection](native-reading/assisted/review.md)
|
||||
identifies all three named relations and both distinct port mappings through the
|
||||
actual UI. The conversation label caused a wrong first stroke selection of an
|
||||
ordinary Allocation. Shared-stroke clicks retain the already selected mapping;
|
||||
with no selection they choose one stable mapping. There is no visible chooser or
|
||||
cycling. Both mappings remain reachable through Connections and learned segments;
|
||||
this is ambiguous discovery, not global inaccessibility.
|
||||
|
||||
[Manual editing](native-reading/manual/review.md) predeclares a conversation-label
|
||||
move, then exercises label Undo/Redo and bend add/move/remove with exact restoration.
|
||||
The first native chooser attempt displayed the requested filename but exported to
|
||||
`project.json`; it is preserved as a discrepancy. A second attempt using actual
|
||||
focused typing and Return exports the requested `manual-label.json` with identical
|
||||
bytes. This supports the input-method explanation without proving the first
|
||||
failure's exact cause. JSON export deliberately retains source save state.
|
||||
|
||||
[Independent full-model and geometry review](native-reading/manual/independent-oracle-review.md)
|
||||
confirms the sole stored delta: one label-only route record for `sa_contact`, with
|
||||
empty waypoints and no attachment overrides. All semantic records, ports, six
|
||||
diagrams' other data, 35 placements and original routes remain identical. All 12
|
||||
computed paths and 11 other computed labels are also identical. The displacement
|
||||
is consistent with the recorded mouse gesture and rounded Fit 52%; exact zoom
|
||||
was not independently captured. The review explicitly corrects a transcribed UUID
|
||||
while retaining the original declared record and named intent.
|
||||
|
||||
[Fresh native reopen](native-reading/reopen/review.md) verifies the label's
|
||||
persistence and selection in the complete saved view. Both desktop processes
|
||||
exit 0 with empty logs; pristine input and both exported JSON files retain their
|
||||
pinned bytes. Eight cards are visibly present, while exact relation conservation
|
||||
comes from the model/geometry oracle, not counting coincident strokes visually.
|
||||
Menu Escape cancellation was exercised; mid-drag cancellation remains unverified
|
||||
because the available native tool exposes atomic completed drags.
|
||||
|
||||
## Next experiment and rejection criteria
|
||||
|
||||
[Candidate comparison](issue38-design-candidates.md) evaluates ownership-aware
|
||||
automatic placement, selective unselected association cues and selection-only
|
||||
cues. The [fresh critic](issue38-design-critic.md) finds that the current candidate
|
||||
set has no collision-free placement in this witness, based on an explicitly
|
||||
unexecuted double-precision reconstruction. Confirm that finding in Rust before
|
||||
rejecting the bounded automatic-placement approach. Manual repair intersects both
|
||||
own and foreign strokes and is not a fresh reading success or a validated distance
|
||||
metric. A short boundary-to-anchor cue remains an experiment with explicit noise,
|
||||
shared-anchor, export, cache and first-association rejection gates.
|
||||
|
||||
No production routing or rendering change is accepted here. Direct new-exchange
|
||||
drawing, full shared-corridor readability, broad accessibility/DPI and complete
|
||||
OA/SA acceptance remain outstanding. Authoritative scope and ownership are in
|
||||
Gitea, rather than an additional local live-task ledger.
|
||||
|
||||
## Reproduce the bounded checks
|
||||
|
||||
The [inventory](evidence-files.json) pins the captured files before this README
|
||||
and attributes were authored. Scoped attributes preserve all native snapshot bytes.
|
||||
Copy `native-reading` into a fresh scratch directory before rerunning its Python
|
||||
oracles, which write reports; do not overwrite historical evidence. These helpers
|
||||
are verification glue, not application code. Run `check-manual-geometry.py` on
|
||||
the retained before/after geometry and inspect its precise assertions and limits.
|
||||
|
||||
With the identified probe source and Rust/toolchain environment, reproduce both
|
||||
geometry queries from the repository root, using fresh output filenames:
|
||||
|
||||
```powershell
|
||||
cargo run --locked -p oa-core --example diagram_readability_probe -- probe harness/experiments/diagram-readability-20261001/native-reading/working/eight-card.json examples/release1/expected-diagnostics.json 00000000-0038-4000-8000-000000000001 600 450 1 BEFORE.json
|
||||
cargo run --locked -p oa-core --example diagram_readability_probe -- probe harness/experiments/diagram-readability-20261001/native-reading/working/manual-label.json examples/release1/expected-diagnostics.json 00000000-0038-4000-8000-000000000001 600 450 1 AFTER.json
|
||||
```
|
||||
|
||||
The captured launchers contain original absolute paths; adapt them to a fresh
|
||||
copied working folder and the exact released binaries. Native reports give the
|
||||
actual pointer, keyboard, selection and chooser sequence. Tool/recording elapsed
|
||||
times are not measured human task times.
|
||||
@@ -0,0 +1,23 @@
|
||||
from pathlib import Path
|
||||
import hashlib,json,subprocess,sys
|
||||
root=Path(subprocess.check_output(['git','rev-parse','--show-toplevel'],text=True).strip())
|
||||
packet=root/sys.argv[1]
|
||||
entries=json.loads((packet/'evidence-files.json').read_text(encoding='utf-8'))
|
||||
names=list(entries)
|
||||
prefix=packet.relative_to(root).as_posix()
|
||||
requests=[':'+prefix+'/'+name for name in names]
|
||||
assert all('\n' not in name for name in requests)
|
||||
stream=subprocess.check_output(['git','cat-file','--batch'],input=('\n'.join(requests)+'\n').encode('utf-8'),cwd=root)
|
||||
offset=0
|
||||
for name in names:
|
||||
end=stream.index(b'\n',offset)
|
||||
header=stream[offset:end].decode('ascii').split()
|
||||
assert len(header)==3 and header[1]=='blob',(name,header)
|
||||
size=int(header[2]);offset=end+1
|
||||
indexed=stream[offset:offset+size];offset+=size
|
||||
assert stream[offset:offset+1]==b'\n';offset+=1
|
||||
data=(packet/name).read_bytes()
|
||||
assert {'bytes':len(data),'sha256':hashlib.sha256(data).hexdigest()}==entries[name],name
|
||||
assert indexed==data,'Indexed snapshot bytes differ: '+name
|
||||
assert offset==len(stream)
|
||||
print(json.dumps({'status':'PASS','captured_files':len(names),'all_indexed_bytes_identical':True},indent=2))
|
||||
@@ -0,0 +1,298 @@
|
||||
{
|
||||
"issue38-design-candidates.md": {
|
||||
"bytes": 9149,
|
||||
"sha256": "9b2f69e2ccab90940bd293d707562745f77f34c2158d9d4c93811f86fc477e37"
|
||||
},
|
||||
"issue38-design-critic.md": {
|
||||
"bytes": 11440,
|
||||
"sha256": "83af5f48985b95f9e573896164e1a01621e2cf21fcfb865f3a53f4b6454e8271"
|
||||
},
|
||||
"launch-reading-reopen.py": {
|
||||
"bytes": 2160,
|
||||
"sha256": "da6292e5183560d75b1aa8dc61de9782bd6d1eb557d4ee141d5ad352f3b0bc74"
|
||||
},
|
||||
"launch-reading.py": {
|
||||
"bytes": 2199,
|
||||
"sha256": "e67c4da095e16d6302a1ea378ac1e60a2567311150b02a11604768e037dc5ed0"
|
||||
},
|
||||
"native-reading/check-manual-geometry.py": {
|
||||
"bytes": 2967,
|
||||
"sha256": "aaf75f040ecb7179787386a28ec279fa06b5975caefc49deb88fb94cd0a34915"
|
||||
},
|
||||
"native-reading/check-manual-label.py": {
|
||||
"bytes": 1412,
|
||||
"sha256": "4bae942d211cc033267024229f8c151d329b04a1ba094abcd6d9f65f4250820e"
|
||||
},
|
||||
"native-reading/finished.json": {
|
||||
"bytes": 886,
|
||||
"sha256": "20ce9c8623978a6d486f42db85a32bc65262b5a64dbf3bffdbd1ef032508631f"
|
||||
},
|
||||
"native-reading/fit-52.png": {
|
||||
"bytes": 151267,
|
||||
"sha256": "6ab503b18cc5425f49f20197cbcee47893cdb47e632506123d50241d8dda07df"
|
||||
},
|
||||
"native-reading/review.md": {
|
||||
"bytes": 6223,
|
||||
"sha256": "0f12f2b06278d9f82b088a5c459ce2aed6de6b1de6ffb6297558f51c1864c70d"
|
||||
},
|
||||
"native-reading/started.json": {
|
||||
"bytes": 742,
|
||||
"sha256": "3c8cab17424dc8b4ab178a6eaa3bc6a5e0e58a8122644b578750047c60fcd095"
|
||||
},
|
||||
"native-reading/stderr.log": {
|
||||
"bytes": 0,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"native-reading/stdout.log": {
|
||||
"bytes": 0,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"native-reading/zoom-62.png": {
|
||||
"bytes": 151470,
|
||||
"sha256": "67b8e0968fdcc2dbb0c25e1a2427b5952a770a000a2980678265027a83306d1a"
|
||||
},
|
||||
"native-reading/assisted/01-request-top.png": {
|
||||
"bytes": 154004,
|
||||
"sha256": "0bce2c90c1e27d140a5bbaa3bfae073e8b588c92b82a667dbef12c3b919899dc"
|
||||
},
|
||||
"native-reading/assisted/02-request-endpoints.png": {
|
||||
"bytes": 157675,
|
||||
"sha256": "a6776b0e4231fb752a1d0758f61b1f2cfae870664fd70fd9b11b358787c1154d"
|
||||
},
|
||||
"native-reading/assisted/03-report-top.png": {
|
||||
"bytes": 153822,
|
||||
"sha256": "5898fb753b78a073b789de2a149173785c2e2514ada27cfc4a9c53921e130f86"
|
||||
},
|
||||
"native-reading/assisted/04-report-endpoints.png": {
|
||||
"bytes": 157567,
|
||||
"sha256": "cb8f995af2032bed50bc6ac89bd40f70b9762948d9c792950a182f898f33a1b0"
|
||||
},
|
||||
"native-reading/assisted/05-conversation-top.png": {
|
||||
"bytes": 153696,
|
||||
"sha256": "fc2e08720a555de644deeaaa128d56397ab2ac4356f75a3c39cda642763bc0ee"
|
||||
},
|
||||
"native-reading/assisted/06-conversation-endpoints.png": {
|
||||
"bytes": 156742,
|
||||
"sha256": "f2867bad5dc2bcdd695369bb6a3c0a94602272e920aeaefc2615451e267c0173"
|
||||
},
|
||||
"native-reading/assisted/07-coincident-stroke-first.png": {
|
||||
"bytes": 152420,
|
||||
"sha256": "921b9c24a9058bc51e1faa9b38214507178c084d390550ceb9d77441685bcdeb"
|
||||
},
|
||||
"native-reading/assisted/08-allocation-connections.png": {
|
||||
"bytes": 142680,
|
||||
"sha256": "d0fb2b3e3152288cde7929ff0b96141595dda08e35a60fa9c8253967cde9827a"
|
||||
},
|
||||
"native-reading/assisted/09-actor-connections.png": {
|
||||
"bytes": 146153,
|
||||
"sha256": "f8df96c231764d8a862e9aaf12c522538667256a53300a797190052b60df08cd"
|
||||
},
|
||||
"native-reading/assisted/10-provider-two-mappings.png": {
|
||||
"bytes": 158635,
|
||||
"sha256": "3a58eaee6a1153551f66ed3e80400e49ecb2e930899c0caae371c77f70a5a689"
|
||||
},
|
||||
"native-reading/assisted/11-report-mapping-selected.png": {
|
||||
"bytes": 137880,
|
||||
"sha256": "1afece8094958e7b11d6cf4807c8f6d1dcd0656ba14972fad5a2507fc39b513c"
|
||||
},
|
||||
"native-reading/assisted/12-report-mapping-identity.png": {
|
||||
"bytes": 150985,
|
||||
"sha256": "e84477ea580cdf8b0c7b612d1bcf8d5582a8a3f187a66b107bee68deb4520d61"
|
||||
},
|
||||
"native-reading/assisted/13-provider-owner.png": {
|
||||
"bytes": 159447,
|
||||
"sha256": "7b823d7bbe9b9f4a7976b8b251b91899e8a2cba0c844b5bf3a502711825ae158"
|
||||
},
|
||||
"native-reading/assisted/14-request-mapping-selected.png": {
|
||||
"bytes": 137688,
|
||||
"sha256": "649c7c966efd7d5e4de960cb3ccfd04fc68eb409ae353e840f6389f554399b83"
|
||||
},
|
||||
"native-reading/assisted/15-request-mapping-identity.png": {
|
||||
"bytes": 150827,
|
||||
"sha256": "f97ac6d30244c16325174a552f31b2939a1dc9c5197c0336f93449e28bf25c07"
|
||||
},
|
||||
"native-reading/assisted/16-cleared-shared-stroke-request.png": {
|
||||
"bytes": 152484,
|
||||
"sha256": "8529c7961aaf4a1d73e5c6f069da9242f8877874ad5670f6ab29107878d91cdb"
|
||||
},
|
||||
"native-reading/assisted/17-lower-stroke-report.png": {
|
||||
"bytes": 152539,
|
||||
"sha256": "2723f8b2548d1d75789a2df7eab0d2759b42dbb6917da6efe141e93ac47102b7"
|
||||
},
|
||||
"native-reading/assisted/18-request-port-owner.png": {
|
||||
"bytes": 157447,
|
||||
"sha256": "3a1efcb8f0b1f77eed3964aad61e95bcdc72d636dcbe9256ede9c4c3c3ef0bda"
|
||||
},
|
||||
"native-reading/assisted/19-report-port-owner.png": {
|
||||
"bytes": 157881,
|
||||
"sha256": "be64ffa1f4ce15210e7f30f291c274fddfc2c56868961823da78e543695d4265"
|
||||
},
|
||||
"native-reading/assisted/20-client-port-owner.png": {
|
||||
"bytes": 158832,
|
||||
"sha256": "d83fc535129eb785ad3dc734a0967e0f844c626f3546f47e0d94ffa29a41ec0e"
|
||||
},
|
||||
"native-reading/assisted/21-request-output-owner.png": {
|
||||
"bytes": 156935,
|
||||
"sha256": "5a9d3bb9efdb8be8325681a687147597a36638aeb506f7abbfe9d8c0f5cd258b"
|
||||
},
|
||||
"native-reading/assisted/22-report-input-owner.png": {
|
||||
"bytes": 157438,
|
||||
"sha256": "3757eadc50f5420fb381de8a2aea2fcb3afc266560c0f0489adce00f9c583397"
|
||||
},
|
||||
"native-reading/assisted/review.md": {
|
||||
"bytes": 9198,
|
||||
"sha256": "ff9a9b2697f15466a12b8150dfd4cd01b24478e5177b9c8d076c6818bd15f7c2"
|
||||
},
|
||||
"native-reading/manual/01-baseline.png": {
|
||||
"bytes": 161792,
|
||||
"sha256": "0f0ad2653d8f579aa38b82775185b82a3433e7a701d7bbdd95dab4db8fb92b95"
|
||||
},
|
||||
"native-reading/manual/02-route-help.png": {
|
||||
"bytes": 242646,
|
||||
"sha256": "2be64e14da0a38c56773b8061fd6316644a9a22f8f73296adc8fde0b64979da0"
|
||||
},
|
||||
"native-reading/manual/03-selected-baseline.png": {
|
||||
"bytes": 152416,
|
||||
"sha256": "a2da288302d4cec09e0974bb91106aaa533b5828a8e06e48c59274b8be5cecea"
|
||||
},
|
||||
"native-reading/manual/04-label-moved.png": {
|
||||
"bytes": 149724,
|
||||
"sha256": "73e498a7dba460ea35f3cd75b67a9117ec921cb510e9c762721a250becb00855"
|
||||
},
|
||||
"native-reading/manual/05-label-undo.png": {
|
||||
"bytes": 148036,
|
||||
"sha256": "b63c1d2106b99ba8d0ccdb3e03dd0840745bcc8bb8f1360549c62f5c1e55d43e"
|
||||
},
|
||||
"native-reading/manual/06-label-redo.png": {
|
||||
"bytes": 148332,
|
||||
"sha256": "03470add72449ce69fc88cc508f2aea5730cbfaa01e6f31edc049b775cfc2b47"
|
||||
},
|
||||
"native-reading/manual/07-route-menu.png": {
|
||||
"bytes": 156885,
|
||||
"sha256": "03c2f87db01874fabe95f0fe3b3d7a293600d2028dd5c0a06b7f1761ea28bcc9"
|
||||
},
|
||||
"native-reading/manual/08-bend-added.png": {
|
||||
"bytes": 148594,
|
||||
"sha256": "b828af8ce0cf82fc6c98dc9088313b3cd50625333f7d165ffe8216e40c5a7d69"
|
||||
},
|
||||
"native-reading/manual/09-bend-moved.png": {
|
||||
"bytes": 149961,
|
||||
"sha256": "49259d46eb81fcbcf2fd5a5a29026756aa84ed94e5893079f5cf876c1fd48ea1"
|
||||
},
|
||||
"native-reading/manual/10-bend-menu.png": {
|
||||
"bytes": 160558,
|
||||
"sha256": "efe7cf4f4db22f3b31e04c6db24f087f38712633bd4c91ebbc53d98b04d4377e"
|
||||
},
|
||||
"native-reading/manual/11-bend-removed.png": {
|
||||
"bytes": 148487,
|
||||
"sha256": "37f49c1b738a8215ebcb8110057c7db6f8c5976b0b40a95fd9a943232c7abb23"
|
||||
},
|
||||
"native-reading/manual/12-remove-undone.png": {
|
||||
"bytes": 147422,
|
||||
"sha256": "f6f56811911f3a3286d59d886249c852c25511c3c1e9f3bdcd776058f546944f"
|
||||
},
|
||||
"native-reading/manual/13-move-undone.png": {
|
||||
"bytes": 147165,
|
||||
"sha256": "78fafe6aacfdf383427c2e5f9a9fd27adf54201b7bc7e7aff2993ffcdf5b3e82"
|
||||
},
|
||||
"native-reading/manual/14-route-restored-label-kept.png": {
|
||||
"bytes": 147092,
|
||||
"sha256": "7b8814dd0061f1b844379205615fe039c5fb7814f35b9d0c96490849a31b78ea"
|
||||
},
|
||||
"native-reading/manual/15-menu-cancelled.png": {
|
||||
"bytes": 146989,
|
||||
"sha256": "4dcbbe0bdefb4b4a18e5a0e0d1762be45b064764314c96d63947997aaea4c390"
|
||||
},
|
||||
"native-reading/manual/16-save-formats.png": {
|
||||
"bytes": 61644,
|
||||
"sha256": "29810a2cf9e097a7cdd7733b8fba0623d43ee3a1ed4dc94ef7fb0e98f1e11612"
|
||||
},
|
||||
"native-reading/manual/17-save-json-path.png": {
|
||||
"bytes": 58079,
|
||||
"sha256": "abc813aabe25def65e138e3e6b96de171f68ba10c2065fef9575f99b9e003b16"
|
||||
},
|
||||
"native-reading/manual/18-export-unexpected-path.png": {
|
||||
"bytes": 151214,
|
||||
"sha256": "86a877d8d0b2d8189425450e48ea65a6481d5694c6347260bb3c48308321c0b9"
|
||||
},
|
||||
"native-reading/manual/19-typed-filename.png": {
|
||||
"bytes": 60453,
|
||||
"sha256": "1139b1ae391a2d0c4b46cb7e43d6b769714f81b546b894bbc2298d61d0a1edd7"
|
||||
},
|
||||
"native-reading/manual/20-correct-export-path.png": {
|
||||
"bytes": 151746,
|
||||
"sha256": "d947e11040a3a4b01746632e4de2ce6107f876db78eacf29321f4cec516054e1"
|
||||
},
|
||||
"native-reading/manual/21-close-prompt.png": {
|
||||
"bytes": 141053,
|
||||
"sha256": "90a5a67be0089bf451a87c84c772141e83354f4b8d9a42e0a2704ea13680a010"
|
||||
},
|
||||
"native-reading/manual/full-diff.json": {
|
||||
"bytes": 569,
|
||||
"sha256": "a471a21fbc1cd7b214dece0274ff91456e643813b8376dd69bf5aed491dd8b7d"
|
||||
},
|
||||
"native-reading/manual/geometry-after.json": {
|
||||
"bytes": 361826,
|
||||
"sha256": "453b8bdbd1c347987c39437ecd532193cb51a787c5dc19125bcacb01e8661592"
|
||||
},
|
||||
"native-reading/manual/geometry-before.json": {
|
||||
"bytes": 360890,
|
||||
"sha256": "497605352c2a746ab1908324016b9bb8b1540e34433449c91135418e7d0e88d8"
|
||||
},
|
||||
"native-reading/manual/geometry-comparison.json": {
|
||||
"bytes": 2260,
|
||||
"sha256": "3cb6c06f2c8ad2ea8bc7c79088b6f77358c8efed899b7d0c09ba15667c6c6fd0"
|
||||
},
|
||||
"native-reading/manual/independent-oracle-review.md": {
|
||||
"bytes": 8656,
|
||||
"sha256": "9b5bd1ce279d711ec83b311d00ad241b3df12ab19318a69e62b8f524c96217dd"
|
||||
},
|
||||
"native-reading/manual/review.md": {
|
||||
"bytes": 10356,
|
||||
"sha256": "30040642465c70edac3febd94c3f0b84954e46e4b8b4a161b5d702845e27a7d4"
|
||||
},
|
||||
"native-reading/manual/second-export-check.json": {
|
||||
"bytes": 192,
|
||||
"sha256": "eadafec0102a9a79689d0667fc578cd0ef91e239673a9ed03eafa0c6f1f6891c"
|
||||
},
|
||||
"native-reading/reopen/01-fit.jpg": {
|
||||
"bytes": 150997,
|
||||
"sha256": "2e1cadb2e27b505183caef34e87d201920530442761dad02e9435dc8d538df5b"
|
||||
},
|
||||
"native-reading/reopen/02-selected.jpg": {
|
||||
"bytes": 153708,
|
||||
"sha256": "50faf5df191b404187a0c3f422ef7c99c6aa8284acbe3d07cf9efc983c410d75"
|
||||
},
|
||||
"native-reading/reopen/finished.json": {
|
||||
"bytes": 864,
|
||||
"sha256": "ec7fe5a4acc2dca7eb0ba2a7c16ecd83374ace32a5a0022bf912ba8000ff8e6a"
|
||||
},
|
||||
"native-reading/reopen/review.md": {
|
||||
"bytes": 3707,
|
||||
"sha256": "5cd02784205bc77cde4405e2f5cea7db4408b719ae3cfaa3ae26236fdbca1903"
|
||||
},
|
||||
"native-reading/reopen/started.json": {
|
||||
"bytes": 721,
|
||||
"sha256": "3cd876d30b1235302bdafa8b36cdc2af0beb0c95ed80842e7876eb28274935c4"
|
||||
},
|
||||
"native-reading/reopen/stderr.log": {
|
||||
"bytes": 0,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"native-reading/reopen/stdout.log": {
|
||||
"bytes": 0,
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
||||
},
|
||||
"native-reading/working/eight-card.json": {
|
||||
"bytes": 138661,
|
||||
"sha256": "9db1015369f450d5810c96a01fddb8a009d57f6aafbda5182703f15ded23d9c8"
|
||||
},
|
||||
"native-reading/working/manual-label.json": {
|
||||
"bytes": 138933,
|
||||
"sha256": "39572f8ab176f7b8ac8933a308dcf7b127aa15e3d4f627ef604325a5275812f2"
|
||||
},
|
||||
"native-reading/working/project.json": {
|
||||
"bytes": 138933,
|
||||
"sha256": "39572f8ab176f7b8ac8933a308dcf7b127aa15e3d4f627ef604325a5275812f2"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,113 @@
|
||||
# Issue 38: unselected label association candidates
|
||||
|
||||
Bounded design proposal, not an accepted implementation. No production changes,
|
||||
grouping, filtering, semantic collapse, or new selection behavior are proposed
|
||||
here. Parent owns synthesis after native evidence. The eight-card arrangement is
|
||||
a representative reconstruction, not the user's recovered view.
|
||||
|
||||
## Evidence and causal hypothesis
|
||||
|
||||
The independent [reading report](native-reading/review.md) recorded uncertainty
|
||||
about the unselected Technician service conversation label. The prior opening
|
||||
views exposed simpler answers, so this is not pristine blind endpoint accuracy.
|
||||
The [assisted report](native-reading/assisted/review.md) nevertheless records an
|
||||
actual wrong first stroke selection: ordinary Allocation to Repair instead of the
|
||||
conversation near its label. Both unlabeled port mappings were then individually
|
||||
reachable through Connections and learned canvas segments. Thus accessible
|
||||
identities do not settle the separate unselected-reading problem.
|
||||
|
||||
The [manual report](native-reading/manual/review.md) demonstrates label dragging
|
||||
and Undo/Redo, and temporary bend editing. Parent's
|
||||
[complete geometry comparison](native-reading/manual/geometry-comparison.json)
|
||||
reports only the target label metadata changed; the Project otherwise and all
|
||||
twelve computed paths remained exact. This demonstrates an existing repair
|
||||
mechanism, not that the repaired placement has passed fresh reading evaluation.
|
||||
|
||||
Inspected implementation:
|
||||
|
||||
- `crates/oa-core/src/routing.rs:612–660` settles paths before labels, incorporates
|
||||
association-end bounds, and retains other cached labels during previews.
|
||||
- `make_label` at 1363 preserves authored label fraction/offset exactly. Automatic
|
||||
candidates use at most 32 fractions and 8 offsets, with an 8192-comparison budget.
|
||||
The initial fraction is .5 and initial offset is (0,-18). It prefers the first
|
||||
zero-collision result and earlier candidates on equal scores.
|
||||
- `label_collisions` at 1483 scores a lexicographic tuple of node overlap count,
|
||||
earlier-label overlap count, and inflated-label/stroke crossing count. It has
|
||||
no ownership-association or foreign-path proximity term. A collision-free
|
||||
candidate is not necessarily associated perceptually with the correct route;
|
||||
bounded search also does not promise a collision-free candidate exists or wins.
|
||||
- `diagram.rs:1303–1370` renders active paths thicker and teal and colors active
|
||||
label text; ordinary labels get white backing. There is no label-to-anchor
|
||||
leader in this rendering block. Label geometry supplies both anchor and center.
|
||||
SVG labels are separately emitted near 2033, so any visual policy needs matching
|
||||
export consideration rather than a canvas-only silent discrepancy.
|
||||
|
||||
Baseline conversation anchor is (1162,274.5), center (1296.5,274.5), label width 233.
|
||||
Its center-to-anchor displacement is 134.5, but its nearest rectangle edge is only
|
||||
18 units from the own vertical route. Therefore **center displacement alone is a
|
||||
bad ambiguity metric**: it mostly measures half the long label's width. A candidate
|
||||
must consider the whole label box, own route, other routes, and visible scale.
|
||||
The independent native wrong association is stronger evidence than a distance
|
||||
threshold picked to fit this one image.
|
||||
|
||||
## Materially different candidates
|
||||
|
||||
| Candidate | Minimal experiment | Benefit and risk |
|
||||
| --- | --- | --- |
|
||||
| A. Automatic placement objective | Keep paths and authored labels exact; evaluate bounded automatic candidates for association with their own route in addition to existing overlap criteria. Initially reuse the current candidate set and budget. Compare an ownership-aware tie-break against a rule rejecting candidates through/closer to unrelated routes when a comparably clear own-route candidate exists. | No extra diagram ink; addresses the cause before selection. Risks: no good candidate in existing set, merely shifting ambiguity, instability under edits/UUID ordering, and conflating long-label width with displacement. Current flattened stroke inputs lack edge identity; ownership-aware scoring needs a deliberate small interface change, not a guessed nearest segment. |
|
||||
| B. Selective unselected association leader | Draw a nonsemantic leader from an ambiguous/displaced label boundary to its existing route anchor, only for labels meeting a declared geometric ambiguity condition. No arrowhead, no endpoint/node connection, no selectable semantic edge, and no stored route edit. | Preserves both authored and automatic label positions and shows association before selection. Risks: more crossings and noise, leaders mistaken for relationships, ambiguous landing on a shared run, screen-space flicker near thresholds, and canvas/SVG divergence. Limit condition must use box/route geometry and ambiguity, not center distance alone. A leader crossing another label/card is a failure, not an acceptable automatic side effect. |
|
||||
| C. Selection-only leader | Add the same association cue only while its label/edge is selected. | Lowest persistent noise; useful during inspection and label repair. It cannot fix the demonstrated first unselected association, because the user must already find the right label/edge. Treat as a complementary repair aid, not acceptance of #38's reading outcome. |
|
||||
|
||||
Candidate A must not weaken the node-overlap priority merely to improve a distance
|
||||
score. Test collision-preserving tie-break first; if it cannot change the failed
|
||||
placement, report that limitation before proposing different priorities or a
|
||||
larger candidate set. Candidate B must visibly differ from semantic paths beyond
|
||||
color (for example a restrained dotted connector without arrows), remain legible
|
||||
at Fit, and avoid port/arrowhead/junction-like endpoint marks. This is a design
|
||||
hypothesis requiring visual testing, not a prescribed final style.
|
||||
|
||||
## Evaluators before iteration
|
||||
|
||||
1. Freeze the full twelve-edge scene, source/build, camera and 52% Fit baseline.
|
||||
Use fresh readers or an unrelated-label variant to remove remembered answers.
|
||||
Before selection/Inspector, ask which path carries the conversation and which
|
||||
participant ports it joins. Record first chosen stroke, confidence, wrong
|
||||
turns, time and zoom/pan. Score text legibility separately from association.
|
||||
2. Repeat on Request/Report (positive controls), the long coincident port corridor,
|
||||
both shorter/longer labels, an intentionally displaced authored label, and a
|
||||
clear close label. A is expected not to move the authored control. B should
|
||||
reveal its association without decorating every ordinary close label.
|
||||
3. Measure per-label own/foreign rectangle-to-path clearance, occlusions, leader
|
||||
intersections if present, and Fit bounds. Do not substitute one weighted score
|
||||
for observed reading. At a shared anchor, a leader that still fails to reveal
|
||||
which distinct route continues is an explicit negative result.
|
||||
4. Require unchanged semantic objects/ports, placements, all authored metadata,
|
||||
and computed paths for pure label-placement/cue trials. Preserve Undo/Redo and
|
||||
save/reopen; derived cues add no history. Label dragging still commits once.
|
||||
Record automatic label settlement after commit rather than promising preview
|
||||
equality. Test UUID reorder and translation variants for order artifacts.
|
||||
5. Bound added work and compare actual scene/preview latency against baseline;
|
||||
avoid rescanning all route pairs every pointer move. Test Fit and working zoom,
|
||||
monochrome/low-color discrimination, and leader visibility against white
|
||||
backing. Count additional visible marks and ask whether users mistake a leader
|
||||
for a relation. Reject improvements requiring hidden edges or missing endpoints.
|
||||
|
||||
## Recommendation and revisit condition
|
||||
|
||||
First prototype **A as a bounded experiment**, because the automatic label is the
|
||||
failure source and manual relocation already demonstrates a geometry-preserving
|
||||
repair. Prefer evidence that a nearby candidate makes the correct association
|
||||
clear without extra strokes. This is not authorization to implement or change
|
||||
the router. Keep B as a materially different comparison, particularly for authored
|
||||
labels A must preserve. Revisit toward B if A cannot improve unselected reading
|
||||
without overlap, excessive search, unstable positions, or regressions elsewhere.
|
||||
Reject C as the sole fix even if assisted lookup becomes easier. Selection
|
||||
disambiguation remains a separate complementary outcome.
|
||||
|
||||
Primary comparison: Sirius explicitly documents an attachment link between an
|
||||
edge and its labels, including different behavior for selected edge versus
|
||||
selected label: [official diagram guide](https://eclipse.dev/sirius/doc/user/diagrams/Diagrams.html).
|
||||
Capella documents local label alignment and layout tools in its
|
||||
[official layout guide](https://github.com/eclipse-capella/capella/blob/master/doc/plugins/org.polarsys.capella.tipsandtricks.doc/html/Tips%20and%20tricks/8_Other%20layout%20facilities/8_Other%20layout%20facilities.mediawiki).
|
||||
These support association and local repair as established workflows; they do not
|
||||
establish that always-visible leaders reduce this scene's cognitive load.
|
||||
@@ -0,0 +1,63 @@
|
||||
# Independent critique: issue 38 label association
|
||||
|
||||
Local-only review at source `971b9721c34e574025144935291944c871ccca16`. Read-only source/geometry/native-report inspection; no compilation, native interaction, production edits, or Gitea actions. Root owns synthesis. The fixture is representative, not the original user view.
|
||||
|
||||
## Decision
|
||||
|
||||
Do not proceed directly from the candidate note to production A. Its proposed first experiment—an ownership-aware tie-break with the existing candidate set and collision priorities—has a concrete feasibility problem in this fixture. Existing candidate geometry cannot give the conversation label a better nearest-rectangle ownership score without changing another premise. First reproduce the bounded enumeration below in the established probe; if confirmed, record A-with-existing-candidates as rejected for this witness. A different candidate generator/objective requires an explicit new experiment, not quiet scope expansion.
|
||||
|
||||
B remains worth a tiny controlled visual comparison because its baseline anchor is on a unique segment and the required leader is short. It is not yet preferred as a solution: it leaves the misleading foreign stroke passing through the label, and a short dotted leader at Fit may be too weak to overcome that cue. C cannot meet the unselected-reading gate.
|
||||
|
||||
## Independently checked geometry
|
||||
|
||||
Sources: `crates/oa-core/src/routing.rs` (Rect, record_segments, route_diagram_impl, make_label, label_collisions); `crates/oa-desktop/src/diagram.rs` (scene cache and drawing); `.local/native-reading/manual/geometry-before.json`, `geometry-comparison.json`; initial/assisted/manual reports and archived `fit-52.png`.
|
||||
|
||||
The conversation is `63009b5f-539e-5914-b630-ec6b7fefb4d5`. Use geometry identity: an earlier native transcription in the assisted report has a different final UUID group. That reporting error does not change the visual evidence.
|
||||
|
||||
- Conversation baseline box: x=1180..1413, y=262.5..286.5; own vertical path x=1162, y=89.5..316.5. Own box/path distance is 18.
|
||||
- Ordinary allocation has a vertical path x=1312.5, y=179..325. It **passes through the conversation box**. Foreign distance is zero. This is stronger than merely being nearby, and the old stroke-collision scorer already detects it.
|
||||
- Manual box after drag: x=1086.845..1319.845, y=204.278..228.278. It intersects BOTH the own vertical stroke and the same foreign allocation. Thus both nearest-box distances become zero. Manual repair proves geometry-preserving editing, but its reported apparent improvement neither validates a nearest-box score nor proves fresh reading success. The foreign stroke now reaches near the label's right edge instead of near its center; box distance discards precisely that distinction.
|
||||
- The source uses a width estimate of seven world units per character plus sixteen, while native text is separately rendered at font size 13. Bounds measure backing/hit geometry, not exact glyph contours. Never present their clearance as a measured human perception threshold.
|
||||
|
||||
### Read-only existing-candidate enumeration
|
||||
|
||||
A JavaScript arithmetic reconstruction over the saved geometry enumerated the exact fraction/offset construction (double precision, no production execution): fractions .5, each path segment midpoint, .05 through .95, ordered by distance from .5 then numeric fraction and deduplicated; 23 fractions times eight offsets = 184 candidates. All eight projected cards have no visual parent, so obstacle rectangles are full card bounds inflated by 12. The 12 routes produce 37 distinct undirected segment geometries after the existing exact-segment deduplication. Earlier labels for the conversation are empty; there are no association end labels in this fixture.
|
||||
|
||||
Checked all candidates, intentionally without budget truncation to give A the strongest possible feasibility case. Candidate/node overlap and inflated-by-three candidate/stroke intersection follow the source's strict orthogonal intersection inequalities; nearest segment/box distances are independently calculated.
|
||||
|
||||
Result: no candidate has zero node overlaps and zero stroke intersections. The minimum for node-clear candidates is one intersected stroke. Exactly these six candidates achieve it:
|
||||
|
||||
| Fraction | Offset | Center y | Own distance | Foreign distance |
|
||||
| --- | --- | ---: | ---: | ---: |
|
||||
| .5 | (134.5, 0) | 274.5 | 18 | 0 |
|
||||
| .45 | (134.5, 0) | 294.8 | 18 | 0 |
|
||||
| .55 | (134.5, 0) | 254.2 | 18 | 0 |
|
||||
| .6 | (134.5, 0) | 233.9 | 18 | 0 |
|
||||
| .65 | (134.5, 0) | 213.6 | 18 | 0 |
|
||||
| segment midpoint, about .676108 | (134.5, 0) | 203 | 18 | 0 |
|
||||
|
||||
Every center x is 1296.5. Every candidate intersects that ordinary allocation. An ownership tie-break can at most change height among these candidates, not resolve the bad owner overlap. Since this enumeration uses double arithmetic and a source reconstruction, it is a falsifiable feasibility finding to confirm with the Rust probe, not a claim of production test execution. The candidates are well away from geometric boundary conditions, making rounding an unlikely reversal.
|
||||
|
||||
## What defeats each proposal
|
||||
|
||||
**A: candidate feasibility and objective semantics.** Collision preservation is not just a protection against regression here: it restricts the winning set to six still-misleading placements. Adding a weighted distance or trying more of the same search cannot fix the absent placement. If a later experiment permits a label backing to cover its own stroke while avoiding foreign strokes, that is a different objective and should be stated and compared explicitly. Do not quietly weaken node/other-label priorities. A global optimization framework, spatial index, or generalized routing API is unnecessary before demonstrating one useful local rule.
|
||||
|
||||
**A: ownership is not one ID per existing Segment.** `record_segments` merges exactly coincident segments and keeps a count; partially overlapping strokes remain separate geometries. Assigning a single owner to the merged segment will falsely treat a shared own/foreign stroke as unique. For the experiment, retain edge-tagged polylines separately from existing route-cost Segment storage; compute ambiguity across distinct semantic edges. Avoid changing routing segment accounting to support label scoring. A long shared run can have own distance zero and foreign distance zero everywhere, so proximity cannot prove identity.
|
||||
|
||||
**A: removing zero-score early exit changes actual cost.** Current scoring exits as soon as (0,0,0) appears, and early-prunes worse candidates. A tie-break that requires finding the best association among all zero-collision candidates loses that exit. If distance work is not charged against the comparison budget, keeping the old 8192 variable does not keep the computational contract. Charge or separately cap all candidate/segment work and expose exhaustion in the experimental report. Never accept an incompletely scored candidate as a better one.
|
||||
|
||||
**A: stable UUID order is repeatability, not invariance.** Both path order and earlier-label precedence depend on UUID. Relabeling UUIDs and recomputing the whole diagram changes paths as well as labels, confounding a label-only evaluation. Run two controls: frozen-path scoring with permuted label order/IDs, and a complete reroute with consistent UUID remapping. Reordering array storage with identical IDs should remain exact. Count all automatically moved labels, even if their stored metadata and paths are unchanged.
|
||||
|
||||
**B: this fixture has a useful but weak testable leader.** Shortest boundary-to-anchor segment is (1180,274.5) to (1162,274.5), length 18, about 9.3 screen pixels at the measured Fit. It reaches a unique own vertical segment without an intervening card/path. That makes it a favorable local leader witness. However, the foreign allocation still passes through the label farther right. A few dots at Fit may disappear or read as another short relationship/branch. A center-to-anchor leader would unnecessarily cross the label backing and should not be used. Any cue must be drawn in an ordering that survives white label backing and later edge strokes; the current loop interleaves individual paths and labels rather than painting all text in one last pass. Match export.
|
||||
|
||||
**B: shared landing and zoom threshold.** A leader to a shared run names no unique route; endpoint markers would add misleading semantics. Reject such a case rather than counting an attachment as success. A threshold based on screen pixels may flicker on zoom and accidentally make camera changes require rescoring all geometry; derive geometry with the scene, keep camera policy simple, and test threshold boundaries. Blanket unselected leaders for every label are not justified.
|
||||
|
||||
**C: circular first-use dependency.** The correct label is already selectable and selection already reveals the full path. Another selected cue may help editing but does not fix the first unselected inference. Accept only as an independently scoped editing aid.
|
||||
|
||||
## Smallest falsifiable next experiments
|
||||
|
||||
1. **Confirm feasibility before implementation.** Extend the existing experimental probe/report, not production routing, to list the current candidates, full old collision tuple, owner-tagged intersection list, own/foreign distance, and actual comparisons consumed. Reproduce the six-candidate result, including baseline. Reject A's existing-set collision-preserving form if it cannot produce a candidate whose owning path is perceptually distinguishable from the allocation. Pure distance improvement is insufficient; a changed height alone is not an automatic pass.
|
||||
2. **Native visual comparison with fixed geometry.** Compare baseline against B's one short boundary leader, plus the already-saved manual label state as an empirical control. The manual state is not a promised good answer. Use a fresh reader or unrelated-label variant; directly open the mixed view; no Inspector before answers. Ask for first chosen path and participant ports, then Request/Report and the two port mappings. Observe both ordinary Fit and working zoom. Record first wrong turn, confidence, tracing time, extra pan/zoom, and whether any cue is mistaken for a semantic relation. Reject a candidate if the original wrong association persists, another relation worsens, cue meaning needs an explanation before it can be used, or complete-scene simultaneous reading is lost. One reader can falsify a design; one success cannot establish broad usability.
|
||||
3. **Only if geometry changes become promising, test settlement and latency.** Preserve full Project and all paths; quantify every derived-label movement after an unrelated edit/Undo, label drag/commit, bend drag/commit, and save/reopen. Cache ordinary hover/selection work: the existing scene cache already avoids rerouting unchanged geometry; route previews freeze other labels, while node/port changes and commit can rebuild. Measure the actual affected rebuild/gesture paths, not a hypothetical reroute on every hover. Compare repeated baseline/candidate timings on both this scene and an existing dense control; reject missed interaction budgets or visible label jumping introduced by the candidate. Establish the latency ceiling from the project's existing performance work, not a newly invented threshold.
|
||||
|
||||
These experiments should precede any release claim. Passing a conversation-label test leaves the other full-view route-branch/shared-corridor reading failures open.
|
||||
@@ -0,0 +1,21 @@
|
||||
# Label candidate confirmation: initial scope
|
||||
|
||||
Bounded issue 38 experiment, delegated by root. Modify only `crates/oa-core/examples/diagram_readability_probe.rs`; parent is sole compiler and integration owner. No production router/renderer changes, GUI, Gitea, commit, or build/test execution by this agent.
|
||||
|
||||
Add read-only `label-candidates INPUT EXPECTED_DIAGNOSTICS DIAGRAM_UUID EDGE_UUID NEW_OUTPUT_JSON` with create-new output. Reconstruct current candidate geometry and full f32 collision scores for flat nodes and simple label context; reject unsupported nested nodes, association-end labels, and earlier nonempty labels. Preserve Project and source bytes. Enumerate an unbudgeted exhaustive superset; do not claim to simulate the production comparison budget or winner.
|
||||
|
||||
Expected falsification witness: 23 fractions times 8 offsets; no node-clear/stroke-clear candidate; six optimum (0,0,1) candidates, all intersecting ordinary `sa_repair_allocation`, own/foreign box clearances 18/0. One fixture test will assert the independently declared expected table with f32 tolerance. Parent will compile and verify actual output before treating findings as confirmed.
|
||||
|
||||
## Implementation ready for parent verification
|
||||
|
||||
Implemented the bounded command in the existing probe and added one representative-fixture falsification test. The report includes each candidate's f32 geometry, full collision tuple, owner-preserving semantic stroke intersections, and uninflated own/foreign box clearances. The command rejects unsupported geometry/label contexts and uses existing diagnostics admission and create-new writing. Existing generate/probe commands and tests remain in place.
|
||||
|
||||
Static review and `git diff --check` completed; no build, formatter, or tests run by this agent. Parent should format the touched Rust file, run the probe's six tests, and execute the new command against the immutable representative input with release1 diagnostics. Expected values are predeclared in the new test; actual Rust output is not yet confirmed.
|
||||
|
||||
Suggested invocation arguments (after the parent's normal build setup):
|
||||
|
||||
```text
|
||||
label-candidates .local/native-reading/working/eight-card.json examples/release1/expected-diagnostics.json 00000000-0038-4000-8000-000000000001 63009b5f-539e-5914-b630-ec6b7fefb4d5 NEW_OUTPUT_JSON
|
||||
```
|
||||
|
||||
Source reviewed by author; parent independently owns code/result review. This is not a fresh second critic's implementation review.
|
||||
@@ -0,0 +1,23 @@
|
||||
from pathlib import Path
|
||||
import datetime,hashlib,json,os,subprocess
|
||||
root=Path('C:/ar-diagram-01a0d717');reading=root/'.local/native-reading'
|
||||
run=reading/'reopen';run.mkdir(exist_ok=False)
|
||||
work=reading/'working'
|
||||
sha=lambda p:hashlib.sha256(p.read_bytes()).hexdigest()
|
||||
baseline={p.name:sha(p) for p in work.glob('*.json')}
|
||||
assert baseline['manual-label.json']==baseline['project.json']=='39572f8ab176f7b8ac8933a308dcf7b127aa15e3d4f627ef604325a5275812f2'
|
||||
assert baseline['eight-card.json']=='9db1015369f450d5810c96a01fddb8a009d57f6aafbda5182703f15ded23d9c8'
|
||||
bundle=Path('C:/ar-compact-01a0d717/.local/package39/extracted/ArcadiaStudio-0.2.0-preview.compact-help.20261001-x86_64-pc-windows-gnullvm')
|
||||
exe=bundle/'arcadia-studio.exe'
|
||||
assert sha(exe)=='d55ecad4b0f75c0c9c26625e5441bef9c9360890b65bc13236c6ebfaf03d631e'
|
||||
env=os.environ.copy();system=os.environ['SystemRoot'];env['PATH']=str(Path(system)/'System32')+';'+system
|
||||
for k in list(env):
|
||||
if k.startswith(('CARGO_','RUST','LLVM','WGPU','ARCADIA_')):del env[k]
|
||||
receipt={'source':'6e7c4ddaf0775198384a8c4882809ea8e14b2976','start':datetime.datetime.now(datetime.timezone.utc).isoformat(),'binary_sha256':sha(exe),'runtime_sha256':sha(bundle/'libunwind.dll'),'input_files':baseline,'cwd':str(work),'path':env['PATH']}
|
||||
with (run/'stdout.log').open('xb') as out,(run/'stderr.log').open('xb') as err:
|
||||
child=subprocess.Popen([str(exe)],cwd=work,env=env,stdout=out,stderr=err,creationflags=subprocess.CREATE_NO_WINDOW)
|
||||
receipt['pid']=child.pid;(run/'started.json').write_text(json.dumps(receipt,indent=2)+'\n',encoding='utf-8');print(json.dumps(receipt,indent=2),flush=True)
|
||||
code=child.wait()
|
||||
receipt.update({'exit_code':code,'finished':datetime.datetime.now(datetime.timezone.utc).isoformat(),'stdout_bytes':(run/'stdout.log').stat().st_size,'stderr_bytes':(run/'stderr.log').stat().st_size,'inputs_unchanged':{p.name:sha(p) for p in work.glob('*.json')}==baseline})
|
||||
(run/'finished.json').write_text(json.dumps(receipt,indent=2)+'\n',encoding='utf-8');print(json.dumps(receipt,indent=2),flush=True)
|
||||
assert code==0 and receipt['stdout_bytes']==receipt['stderr_bytes']==0 and receipt['inputs_unchanged']
|
||||
@@ -0,0 +1,23 @@
|
||||
from pathlib import Path
|
||||
import datetime,hashlib,json,os,shutil,subprocess
|
||||
root=Path('C:/ar-diagram-01a0d717')
|
||||
run=root/'.local/native-reading';run.mkdir(exist_ok=False)
|
||||
work=run/'working';work.mkdir()
|
||||
fixture=root/'.local/issue38-probe-run01/eight-card-representative.json'
|
||||
shutil.copyfile(fixture,work/'eight-card.json')
|
||||
baseline=hashlib.sha256(fixture.read_bytes()).hexdigest()
|
||||
bundle=Path('C:/ar-compact-01a0d717/.local/package39/extracted/ArcadiaStudio-0.2.0-preview.compact-help.20261001-x86_64-pc-windows-gnullvm')
|
||||
exe=bundle/'arcadia-studio.exe'
|
||||
sha=lambda p:hashlib.sha256(p.read_bytes()).hexdigest()
|
||||
assert sha(exe)=='d55ecad4b0f75c0c9c26625e5441bef9c9360890b65bc13236c6ebfaf03d631e'
|
||||
env=os.environ.copy();system=os.environ['SystemRoot'];env['PATH']=str(Path(system)/'System32')+';'+system
|
||||
for k in list(env):
|
||||
if k.startswith(('CARGO_','RUST','LLVM','WGPU','ARCADIA_')):del env[k]
|
||||
receipt={'source':'6e7c4ddaf0775198384a8c4882809ea8e14b2976','routing_core_source':'715036e132677dd2bc2fb37ed316d93dc9987aec','fixture_probe_source':'f754ad85d3674a709d10054e6fe23079f977c547','start':datetime.datetime.now(datetime.timezone.utc).isoformat(),'binary_sha256':sha(exe),'runtime_sha256':sha(bundle/'libunwind.dll'),'fixture_sha256':baseline,'fixture':str(work/'eight-card.json'),'cwd':str(work),'path':env['PATH']}
|
||||
with (run/'stdout.log').open('xb') as out,(run/'stderr.log').open('xb') as err:
|
||||
child=subprocess.Popen([str(exe)],cwd=work,env=env,stdout=out,stderr=err,creationflags=subprocess.CREATE_NO_WINDOW)
|
||||
receipt['pid']=child.pid;(run/'started.json').write_text(json.dumps(receipt,indent=2)+'\n',encoding='utf-8');print(json.dumps(receipt,indent=2),flush=True)
|
||||
code=child.wait()
|
||||
receipt.update({'exit_code':code,'finished':datetime.datetime.now(datetime.timezone.utc).isoformat(),'stdout_bytes':(run/'stdout.log').stat().st_size,'stderr_bytes':(run/'stderr.log').stat().st_size,'fixture_unchanged':sha(work/'eight-card.json')==baseline})
|
||||
(run/'finished.json').write_text(json.dumps(receipt,indent=2)+'\n',encoding='utf-8');print(json.dumps(receipt,indent=2),flush=True)
|
||||
assert code==0 and receipt['stdout_bytes']==receipt['stderr_bytes']==0 and receipt['fixture_unchanged']
|
||||
|
After Width: | Height: | Size: 150 KiB |
|
After Width: | Height: | Size: 154 KiB |
|
After Width: | Height: | Size: 150 KiB |
|
After Width: | Height: | Size: 154 KiB |
|
After Width: | Height: | Size: 150 KiB |
|
After Width: | Height: | Size: 153 KiB |
|
After Width: | Height: | Size: 149 KiB |
|
After Width: | Height: | Size: 139 KiB |
|
After Width: | Height: | Size: 143 KiB |
|
After Width: | Height: | Size: 155 KiB |
|
After Width: | Height: | Size: 135 KiB |
|
After Width: | Height: | Size: 147 KiB |
|
After Width: | Height: | Size: 156 KiB |
|
After Width: | Height: | Size: 134 KiB |
|
After Width: | Height: | Size: 147 KiB |
|
After Width: | Height: | Size: 149 KiB |
|
After Width: | Height: | Size: 149 KiB |
|
After Width: | Height: | Size: 154 KiB |
|
After Width: | Height: | Size: 154 KiB |
|
After Width: | Height: | Size: 155 KiB |
|
After Width: | Height: | Size: 153 KiB |
|
After Width: | Height: | Size: 154 KiB |
@@ -0,0 +1,58 @@
|
||||
# Issue 38 assisted native diagram review
|
||||
|
||||
Continuation of ../review.md on the same app/fixture. Parent-supplied executable and fixture identities and the opening-view cue caveat in that report remain applicable. The earlier phase is not pristine blind accuracy evidence. This assisted phase intentionally uses visible Inspector and Connections data; no source, JSON, geometry, answer key or semantic oracle was read.
|
||||
|
||||
Normal launch window, complete representative mixed view, Traceability projection, Fit 52% throughout. Approximately 220.7 seconds from first assisted observation to final Escape, including observation, UI navigation, and progress messages; recording the report excluded. No pan/zoom, model edit, Apply changes, Save, filtering, hiding, projection change, placement, route edit, label edit, port attachment edit, or property edit occurred. Selection and Inspector scroll only. App left open, 0 selected, Fit52%; navigator expanded naturally while following ports.
|
||||
|
||||
## Relations selected by visible labels
|
||||
|
||||
All three requested label clicks succeeded immediately. Inspector titles and stable aliases established relation kind and identity. Scrolling the Inspector exposed port endpoint fields and UUIDs. UUIDs below are manual transcriptions of visible fields, with screenshots as evidence.
|
||||
|
||||
| Relation | Kind / alias / UUID | Semantic endpoints and visible owners |
|
||||
| --- | --- | --- |
|
||||
| Request field repair | Functional exchange; sa_repair_request; 93474111-f23e-56c1-b61b-b7c2396b91bd | Source Assess pressure alarm, @sa_assess, via Request field repair output @sa_repair_request_out; target Repair valve in the field via Request field repair input @sa_repair_request_in |
|
||||
| Report repair result | Functional exchange; sa_repair_report; 684eadc3-e670-5779-a60f-bbc9a5bfb062 | Source Repair valve in the field via Report repair result output @sa_repair_report_out; target Confirm safe pressure @sa_confirm via Report repair result input @sa_repair_report_in |
|
||||
| Technician service conversation | Boundary exchange; sa_contact; 63009b5f-539e-5914-b630-ec6b7febf4d5 | Source field Repair service client @sa_control_port, owned by Pressure coordination service; target field Repair service provider @sa_technician_port, owned by Field technician. Directed exchange checkbox unchecked, so participants are unordered semantically. |
|
||||
|
||||
All three show Valve repair @sa_repair_operation in Items. A shared item does not make these relations equivalent. The conversation uses boundary ports; the other exchanges use functional ports and function endpoints.
|
||||
|
||||
Request full-path highlighting resolves the otherwise difficult bend near Assess pressure alarm and approach to the upper Repair port. Report highlighting resolves the apparent branch toward Reset valve remotely: its selected path continues to Confirm safe pressure, while the reset branch remains gray.
|
||||
|
||||
Conversation selection materially clarifies label association: the selected green route travels from the system's right square marker left of the label to an upward segment, ending at the actor's left square marker. The label remains far to the right, next to a different actor-to-function allocation stroke. The label selects the intended conversation, but its visual placement suggests the wrong nearby route when unselected. See 05 and 06.
|
||||
|
||||
Owner evidence was inspected separately using port markers and visible Parent/semantic-parent fields and tooltips, not inferred solely from shared card locations. See 13, 18 through 22.
|
||||
|
||||
## Two distinct port mappings
|
||||
|
||||
| Mapping | Alias / UUID | Semantic port endpoints |
|
||||
| --- | --- | --- |
|
||||
| Port allocation: Report repair result output | sa_port_report_out; e53b7a40-e8a3-5b3f-826d-c2b5c164a84a | Repair service provider @sa_technician_port -> Report repair result output @sa_repair_report_out |
|
||||
| Port allocation: Request field repair input | sa_port_request_in; 09eaa992-4cdf-5ea3-b748-f10fd74b8cba | Repair service provider @sa_technician_port -> Request field repair input @sa_repair_request_in |
|
||||
|
||||
Both are Port allocation relations. Their source port is owned by Field technician; their distinct target ports are owned by Repair valve in the field. They share displayed owner cards and an upper route corridor, but they have distinct port endpoints, aliases, UUIDs, and lower approach geometry. See 10 through 19.
|
||||
|
||||
### Actual attempts and wrong turns
|
||||
|
||||
1. First guessed actor-to-function stroke at (933,520), followed by another click at that point and (904,572), selected Allocation: Repair valve in the field, alias sa_repair_allocation, UUID 725f2e1b-aa2c-5615-9b1f-28da178168fa. Inspector showed Source Field technician @sa_technician and Target Repair valve in the field. This is the ordinary card allocation, not either port mapping. The wrong turn followed the visually obvious line near the misplaced conversation label. Repeated clicks did not cycle alternatives.
|
||||
2. Connections on that allocation showed REFERENCES to Field technician and Repair valve in the field. Clicking Field technician opened its Connections page. The actor's OUTGOING RELATIONSHIPS showed the ordinary allocation only; its CONTAINS section exposed Repair service provider. Thus owner-level Connections did not directly expose these port-level mappings, but a discoverable contained-port traversal did.
|
||||
3. Clicking Repair service provider showed OWNED BY Field technician, OUTGOING RELATIONSHIPS containing interface provision plus two separately named Port allocation entries, and incoming Technician service conversation. Relation row titles selected the actual relations; the distinct Open target actions instead navigate to a referenced endpoint. See 10.
|
||||
4. Clicked Port allocation: Report repair result output title, then Properties. Its entire selected path followed the actor's left square, then left and down in the tall corridor to the lower Repair port. Captured exact identity and semantic source/target fields.
|
||||
5. Clicked the now-known shared upper stroke at (806,502) twice. Report mapping selection remained; there was no visible picker or cycle. This alone does not prove a fixed preference because a mapping was already selected.
|
||||
6. Clicked provider square marker (865,451), then Connections, then Port allocation: Request field repair input title, then Properties. Request mapping was separately reachable, with a different UUID and upper Repair input endpoint.
|
||||
7. Clicking shared stroke (806,502) with request selected retained request. A blank canvas click did not clear selection in this test. Escape did clear selection. Clicking (806,502) from 0 selected selected the request mapping. Therefore the observed behavior is selection-dependent retention / no cycling, with request chosen from the cleared state in this run, not a proven universal report-first rule. The earlier progress phrase saying the shared stroke repeatedly selects report was provisional and is superseded by these observations.
|
||||
8. Clicking the lower corridor segment (806,627), below the request-port branch, selected the report mapping directly. Hence both mappings were reachable on canvas after their routes had been learned through Connections, and both were independently reachable through semantic relation entries. The low zoom and adjacent vertical paths make discovery considerably harder than access once the locations are known.
|
||||
9. Selected request input, report output, service client, request output, and report input port markers to verify visible parent ownership and aliases. Ended with Escape, 0 selected.
|
||||
|
||||
## Outcome and limitations
|
||||
|
||||
Assisted relation reading succeeds through label selection, full-path highlighting, and Inspector fields. The unselected conversation label association remains misleading. Highlighting separates the report route from apparent branches and lets a reader verify ports rather than infer semantics from cards.
|
||||
|
||||
Distinct coincident mappings are accessible through port Connections and carefully chosen segments. Repeated clicking on their shared corridor does not expose an explicit alternative list or cycle in this run. Reaching the two by semantic navigation required going through the actor's contained port; this is possible but adds several steps and requires understanding the card/port distinction. Full names and stable aliases are often clipped inside narrow dropdowns, while the Connections row body and port tooltip supply useful full names.
|
||||
|
||||
This phase does not claim route editing, label persistence, model serialization, or equivalence under edits; those belong to a separately declared edit/oracle phase. No model edits were attempted.
|
||||
|
||||
## Screenshots
|
||||
|
||||
01-02 request label selection and fields; 03-04 report selection and fields; 05-06 conversation selection, displaced highlight, endpoints and unchecked direction; 07-08 initial ordinary-allocation wrong turn; 09 actor Connections; 10 provider Connections with both mappings; 11-12 report mapping; 13 provider ownership; 14-15 request mapping; 16 cleared-state shared-stroke selection of request; 17 direct lower-stroke selection of report; 18-22 port owner/alias verification.
|
||||
|
||||
All PNGs are archived native Computer Use captures, with no synthetic rendering or image transformation.
|
||||
@@ -0,0 +1,38 @@
|
||||
from pathlib import Path
|
||||
import copy,hashlib,json,math
|
||||
root=Path(__file__).resolve().parent
|
||||
manual=root/'manual'
|
||||
a=json.loads((manual/'geometry-before.json').read_text(encoding='utf-8'))
|
||||
b=json.loads((manual/'geometry-after.json').read_text(encoding='utf-8'))
|
||||
diagram='00000000-0038-4000-8000-000000000001'
|
||||
edge='63009b5f-539e-5914-b630-ec6b7fefb4d5'
|
||||
original=a['project'];saved=b['project']
|
||||
assert original['diagrams'][diagram]['routes']==[]
|
||||
routes=saved['diagrams'][diagram]['routes']
|
||||
assert len(routes)==1 and set(routes[0])=={'edge','waypoints','label'}
|
||||
route=routes[0]
|
||||
assert route['edge']==edge and route['waypoints']==[]
|
||||
assert route['label']['fraction']==0.5
|
||||
assert set(route['label'])=={'fraction','offset'} and set(route['label']['offset'])=={'x','y'}
|
||||
assert all(math.isfinite(v) for v in route['label']['offset'].values())
|
||||
restored=copy.deepcopy(saved)
|
||||
restored['diagrams'][diagram]['routes']=[]
|
||||
assert restored==original, 'Unexpected other stored changes'
|
||||
assert a['projected_view']==b['projected_view'] and a['projected_semantic_inventory']==b['projected_semantic_inventory']
|
||||
ea={e['id']:e for e in a['routed_edges']};eb={e['id']:e for e in b['routed_edges']}
|
||||
assert ea.keys()==eb.keys()
|
||||
changed_labels=[]
|
||||
for k in ea:
|
||||
for field in ['points','projected','semantic','effective_pins','pin_fractions','custom_suspended','route_warnings']:
|
||||
assert ea[k][field]==eb[k][field], (k,field)
|
||||
if ea[k]['label']!=eb[k]['label']:changed_labels.append({'edge':k,'before':ea[k]['label'],'after':eb[k]['label']})
|
||||
old=ea[edge]['label'];new=eb[edge]['label']
|
||||
assert old['fraction']==new['fraction']==0.5 and old['anchor']==new['anchor']
|
||||
delta={key:new['center'][key]-old['center'][key] for key in ['x','y']}
|
||||
screen={'x':-48.,'y':-30.}
|
||||
inferred_zoom={key:screen[key]/delta[key] for key in ['x','y']}
|
||||
assert all(0.515<=z<0.525 for z in inferred_zoom.values()), inferred_zoom
|
||||
assert abs(inferred_zoom['x']-inferred_zoom['y'])<0.00001
|
||||
result={'status':'PASS','scope':'Complete stored Project and all 12 computed paths are conserved except the declared label metadata. Rendered labels are separately compared below.','stored_allowed_delta':route,'computed_labels_changed':changed_labels,'all_computed_paths_identical':True,'gesture':{'start_screen':[924,547],'end_screen':[876,517],'world_delta':delta,'inferred_zoom':inferred_zoom,'rounded_fit_zoom_percent':52,'method':'The predeclared screen displacement and observed center displacement must imply one zoom in the rounding interval for the visible Fit52%; no exact independent zoom was captured.'},'geometry_pins':{p.name:hashlib.sha256(p.read_bytes()).hexdigest() for p in [manual/'geometry-before.json',manual/'geometry-after.json']}}
|
||||
(manual/'geometry-comparison.json').write_text(json.dumps(result,indent=2)+'\n',encoding='utf-8')
|
||||
print(json.dumps({'status':result['status'],'changed_computed_labels':[x['edge'] for x in changed_labels],'all_paths_identical':True,'gesture':result['gesture']},indent=2))
|
||||
@@ -0,0 +1,25 @@
|
||||
from pathlib import Path
|
||||
import hashlib,json
|
||||
root=Path(__file__).resolve().parent
|
||||
before=root/'working/eight-card.json'
|
||||
after=root/'working/project.json'
|
||||
a=json.loads(before.read_text(encoding='utf-8'))
|
||||
b=json.loads(after.read_text(encoding='utf-8'))
|
||||
differences=[]
|
||||
def compare(left,right,path=''):
|
||||
if type(left)!=type(right):
|
||||
differences.append({'path':path,'before':left,'after':right});return
|
||||
if isinstance(left,dict):
|
||||
for key in sorted(left.keys()|right.keys()):
|
||||
if key not in left or key not in right:
|
||||
differences.append({'path':path+'/'+key,'before':left.get(key),'after':right.get(key),'kind':'key change'})
|
||||
else: compare(left[key],right[key],path+'/'+key)
|
||||
elif isinstance(left,list):
|
||||
if len(left)!=len(right):
|
||||
differences.append({'path':path,'kind':'length change','before':len(left),'after':len(right)})
|
||||
for i,(x,y) in enumerate(zip(left,right)): compare(x,y,path+'/'+str(i))
|
||||
elif left!=right: differences.append({'path':path,'before':left,'after':right})
|
||||
compare(a,b)
|
||||
result={'before':{'path':str(before),'sha256':hashlib.sha256(before.read_bytes()).hexdigest()},'after':{'path':str(after),'sha256':hashlib.sha256(after.read_bytes()).hexdigest()},'differences':differences}
|
||||
(root/'manual/full-diff.json').write_text(json.dumps(result,indent=2)+'\n',encoding='utf-8')
|
||||
print(json.dumps(result,indent=2))
|
||||
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"source": "6e7c4ddaf0775198384a8c4882809ea8e14b2976",
|
||||
"routing_core_source": "715036e132677dd2bc2fb37ed316d93dc9987aec",
|
||||
"fixture_probe_source": "f754ad85d3674a709d10054e6fe23079f977c547",
|
||||
"start": "2026-10-02T01:06:58.733162+00:00",
|
||||
"binary_sha256": "d55ecad4b0f75c0c9c26625e5441bef9c9360890b65bc13236c6ebfaf03d631e",
|
||||
"runtime_sha256": "f45604a12e8bcd839fd86f667c1be1cc7c4f9da2b3c69ff381ac708f0e1ae7d4",
|
||||
"fixture_sha256": "9db1015369f450d5810c96a01fddb8a009d57f6aafbda5182703f15ded23d9c8",
|
||||
"fixture": "C:\\ar-diagram-01a0d717\\.local\\native-reading\\working\\eight-card.json",
|
||||
"cwd": "C:\\ar-diagram-01a0d717\\.local\\native-reading\\working",
|
||||
"path": "C:\\Windows\\System32;C:\\Windows",
|
||||
"pid": 5612,
|
||||
"exit_code": 0,
|
||||
"finished": "2026-10-02T01:30:11.251047+00:00",
|
||||
"stdout_bytes": 0,
|
||||
"stderr_bytes": 0,
|
||||
"fixture_unchanged": true
|
||||
}
|
||||
|
After Width: | Height: | Size: 148 KiB |
|
After Width: | Height: | Size: 158 KiB |
|
After Width: | Height: | Size: 237 KiB |
|
After Width: | Height: | Size: 149 KiB |
|
After Width: | Height: | Size: 146 KiB |
|
After Width: | Height: | Size: 145 KiB |
|
After Width: | Height: | Size: 145 KiB |
|
After Width: | Height: | Size: 153 KiB |
|
After Width: | Height: | Size: 145 KiB |
|
After Width: | Height: | Size: 146 KiB |
|
After Width: | Height: | Size: 157 KiB |
|
After Width: | Height: | Size: 145 KiB |
|
After Width: | Height: | Size: 144 KiB |
|
After Width: | Height: | Size: 144 KiB |
|
After Width: | Height: | Size: 144 KiB |
|
After Width: | Height: | Size: 144 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 57 KiB |
|
After Width: | Height: | Size: 148 KiB |
|
After Width: | Height: | Size: 59 KiB |
|
After Width: | Height: | Size: 148 KiB |
|
After Width: | Height: | Size: 138 KiB |
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"before": {
|
||||
"path": "C:\\ar-diagram-01a0d717\\.local\\native-reading\\working\\eight-card.json",
|
||||
"sha256": "9db1015369f450d5810c96a01fddb8a009d57f6aafbda5182703f15ded23d9c8"
|
||||
},
|
||||
"after": {
|
||||
"path": "C:\\ar-diagram-01a0d717\\.local\\native-reading\\working\\project.json",
|
||||
"sha256": "39572f8ab176f7b8ac8933a308dcf7b127aa15e3d4f627ef604325a5275812f2"
|
||||
},
|
||||
"differences": [
|
||||
{
|
||||
"path": "/diagrams/00000000-0038-4000-8000-000000000001/routes",
|
||||
"kind": "length change",
|
||||
"before": 0,
|
||||
"after": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
{
|
||||
"status": "PASS",
|
||||
"scope": "Complete stored Project and all 12 computed paths are conserved except the declared label metadata. Rendered labels are separately compared below.",
|
||||
"stored_allowed_delta": {
|
||||
"edge": "63009b5f-539e-5914-b630-ec6b7fefb4d5",
|
||||
"label": {
|
||||
"fraction": 0.5,
|
||||
"offset": {
|
||||
"x": 41.3453369140625,
|
||||
"y": -58.221649169921875
|
||||
}
|
||||
},
|
||||
"waypoints": []
|
||||
},
|
||||
"computed_labels_changed": [
|
||||
{
|
||||
"edge": "63009b5f-539e-5914-b630-ec6b7fefb4d5",
|
||||
"before": {
|
||||
"anchor": {
|
||||
"x": 1162.0,
|
||||
"y": 274.5
|
||||
},
|
||||
"center": {
|
||||
"x": 1296.5,
|
||||
"y": 274.5
|
||||
},
|
||||
"fraction": 0.5,
|
||||
"position": {
|
||||
"x": 1180.0,
|
||||
"y": 262.5
|
||||
},
|
||||
"size": {
|
||||
"height": 24.0,
|
||||
"width": 233.0
|
||||
},
|
||||
"text": "Technician service conversation"
|
||||
},
|
||||
"after": {
|
||||
"anchor": {
|
||||
"x": 1162.0,
|
||||
"y": 274.5
|
||||
},
|
||||
"center": {
|
||||
"x": 1203.3453369140625,
|
||||
"y": 216.27835083007812
|
||||
},
|
||||
"fraction": 0.5,
|
||||
"position": {
|
||||
"x": 1086.8453369140625,
|
||||
"y": 204.27835083007812
|
||||
},
|
||||
"size": {
|
||||
"height": 24.0,
|
||||
"width": 233.0
|
||||
},
|
||||
"text": "Technician service conversation"
|
||||
}
|
||||
}
|
||||
],
|
||||
"all_computed_paths_identical": true,
|
||||
"gesture": {
|
||||
"start_screen": [
|
||||
924,
|
||||
547
|
||||
],
|
||||
"end_screen": [
|
||||
876,
|
||||
517
|
||||
],
|
||||
"world_delta": {
|
||||
"x": -93.1546630859375,
|
||||
"y": -58.221649169921875
|
||||
},
|
||||
"inferred_zoom": {
|
||||
"x": 0.5152721120972635,
|
||||
"y": 0.515272247140303
|
||||
},
|
||||
"rounded_fit_zoom_percent": 52,
|
||||
"method": "The predeclared screen displacement and observed center displacement must imply one zoom in the rounding interval for the visible Fit52%; no exact independent zoom was captured."
|
||||
},
|
||||
"geometry_pins": {
|
||||
"geometry-before.json": "497605352c2a746ab1908324016b9bb8b1540e34433449c91135418e7d0e88d8",
|
||||
"geometry-after.json": "453b8bdbd1c347987c39437ecd532193cb51a787c5dc19125bcacb01e8661592"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
# Independent #38 label-only serialization oracle review
|
||||
|
||||
Bounded pass for the serialized edit and baseline preservation. No semantic, placement, port, route-pin, other-diagram, or other stored-label change was found. Exact gesture-to-rendered-geometry acceptance remains a separate parent check; export chooser-path acceptance and source Save acceptance are not established.
|
||||
|
||||
## Inputs and method
|
||||
|
||||
Read the initial, assisted and manual native reports, including the predeclared label-only intent. Independently read and compared both entire parsed Projects, verified hashes, inspected the appended route record, and checked schema, route-edit and routing mechanics. Did not invoke GUI, compiler, server, production mutations or model writes. This report is the only new file.
|
||||
|
||||
- Baseline `working/eight-card.json`: SHA256 `9db1015369f450d5810c96a01fddb8a009d57f6aafbda5182703f15ded23d9c8`, still exactly the supplied pristine bytes.
|
||||
- Actual GUI JSON export `working/project.json`: SHA256 `39572f8ab176f7b8ac8933a308dcf7b127aa15e3d4f627ef604325a5275812f2`.
|
||||
- Requested `working/manual-label.json` does not exist.
|
||||
|
||||
The parent comparator reports only an array length difference because its recursion zips list elements; it does not itself print newly appended contents. This independent review explicitly inspected the complete added record and compared the complete remainder, closing that limitation for these two exact files. No expected Project was copied wholesale from the saved output.
|
||||
|
||||
## Identity correction, preserving the original record
|
||||
|
||||
The assisted and predeclared manual reports transcribe UUID `63009b5f-539e-5914-b630-ec6b7febf4d5`. The actual baseline UUID is **`63009b5f-539e-5914-b630-ec6b7fefb4d5`**. This is an explicit correction of a manual transcription, not a silently changed oracle or intended target.
|
||||
|
||||
The independently declared semantic identity is unambiguous: alias `sa_contact`, name `Technician service conversation`, unoriented BoundaryExchange, Repair service client (`sa_control_port`) on Pressure coordination service to Repair service provider (`sa_technician_port`) on Field technician. The added record references precisely that existing relation. Names, aliases, endpoints, direction, item, owners and identity are all unchanged.
|
||||
|
||||
## Exact persisted delta
|
||||
|
||||
Only diagram `00000000-0038-4000-8000-000000000001`, `Issue 38 representative eight-card mixed view`, gains one route record (previously zero):
|
||||
|
||||
```json
|
||||
{"edge":"63009b5f-539e-5914-b630-ec6b7fefb4d5","waypoints":[],"label":{"fraction":0.5,"offset":{"x":41.345337,"y":-58.22165}}}
|
||||
```
|
||||
|
||||
There are no source or target attachments in the serialized record. Removing exactly this explicitly inspected new record makes the entire saved Project equal to the entire pristine Project. All six diagrams, their original authored routes, all 35 node placements (including port-anchor data), all semantic elements/relations/ports/endpoints, and all other project fields are conserved. The representative diagram still has its original eight placements. No bend from the temporary add/move/remove exercise remains in the stored result.
|
||||
|
||||
## Schema and mechanics
|
||||
|
||||
`model.rs` defines EdgeRoute as presentation for an existing relation in one diagram; computed endpoints and automatic elbows are not persisted. EdgeLabel stores the arc-length fraction and diagram-space offset. The added label fraction and offsets are finite and within the validator's applicable bounds. Empty waypoints and omitted optional attachments are the same route-geometry inputs used when no authored route exists.
|
||||
|
||||
`diagram.rs` captures the displayed label's effective fraction and offset before starting a label gesture. `route_edit.rs` then changes only that offset by pointer displacement. `session.rs` inserts the route record because the diagram previously had none. This explains the representation metadata required for the intended independent label move; it does not introduce a new exchange or modify semantic direction/port ownership. The inspected production files have no diff between extracted desktop source `6e7c4dda` and the current review checkout.
|
||||
|
||||
The numeric offset above is observed output, not an independently calculated mouse-to-world expected value. Parent must verify that relationship from baseline geometry and the recorded gesture before claiming exact gesture placement.
|
||||
|
||||
## Remaining interpretation boundaries
|
||||
|
||||
- Complete Project comparison proves conservation of stored state. Automatic routing/label results are derived. Routing places labels after paths and lets later automatic labels avoid earlier label bounds; a committed moved label can therefore cause another automatic label to settle differently without any additional stored delta. Verify complete rendered paths and label positions separately if claiming every other label stayed geometrically fixed.
|
||||
- The initial reading phase had incidental exposure to simpler named views. Reuse its explicit cue caveat: it is not pristine blind endpoint-accuracy evidence.
|
||||
- Native evidence demonstrates label drag/Undo/Redo and temporary bend operations, not mid-drag cancellation. Menu Escape cancellation does not substitute for that missing check.
|
||||
- The dialog displayed the requested manual-label path but exported to project.json. The set_value commit hypothesis remains unproven; no correct-path chooser acceptance or application defect attribution follows from this oracle.
|
||||
- JSON is an export and intentionally retains the source's unsaved state. Successful serialization here is not source Save As success, source baseline relocation, clean-document state, or a fresh-process reopen test.
|
||||
|
||||
## Geometry increment: independent reconciliation
|
||||
|
||||
This later review supersedes the earlier pending computed-geometry statement for these exact captured inputs. It does not remove the historical caveats or accept the separate export-path/reopen/source-save workflow.
|
||||
|
||||
Reviewed `geometry-before.json`, `geometry-after.json`, `geometry-comparison.json`, `check-manual-geometry.py`, and the probe output-generation code. Independently verified both captured geometry hashes: before `497605352c2a746ab1908324016b9bb8b1540e34433449c91135418e7d0e88d8`; after `453b8bdbd1c347987c39437ecd532193cb51a787c5dc19125bcacb01e8661592`. The existing probe executable hashes to the parent-pinned `d94f86b2f4af594b27960cfa169fd681adb9b3a5eae2928dd72c541bc2db1c57`. Its build/source provenance remains the recorded f754 probe evidence; this review did not rebuild or rerun it.
|
||||
|
||||
The embedded before/after Projects equal the independently checked baseline/export inputs after their defined f32 numeric decoding, including the expected expanded decimal offset. Full projected view, semantic inventory, validation diagnostics and overall routed bounds are identical. There are exactly 12 unique routed edges in each capture. Every field of each of the other 11 routed-edge records is identical. The target edge differs only in `authored_route` and `label`; all 12 computed point sequences, pins, fractions, endpoints, semantic records and warnings remain identical. Only the target computed label moves; its text, size, fraction 0.5 and anchor (1162, 274.5) are unchanged. Thus the earlier risk of other automatic labels settling differently does not occur in these captured inputs.
|
||||
|
||||
The center moves from (1296.5, 274.5) to (1203.3453369140625, 216.27835083007812), delta (-93.1546630859375, -58.221649169921875). The predeclared native gesture moves (-48, -30) screen pixels. Independent division yields x zoom 0.5152721120972635 and y zoom 0.515272247140303, agreeing within float precision and both within [0.515, 0.525), the interval for displayed rounded Fit 52%. This establishes consistency with one shared zoom and the recorded drag, not an independently captured exact zoom or absolute screen-to-world transform. No exact-zoom claim is accepted.
|
||||
|
||||
Helper review limitation: it records all changed labels but does not assert that the target is the only changed label, and its dictionary construction does not explicitly reject duplicate routed IDs. Its hard-coded twelve-path prose is also not a count assertion. The independent checks above explicitly require 12 unique IDs and complete equality of all 11 other edge records, so the present result is accepted; the helper alone would be weaker as a reusable future pass/fail evaluator.
|
||||
|
||||
No GUI, compilation, new probe execution, source edit or input mutation was performed. The actual project.json input retains its earlier pinned identity; second-export UI activity and any future output remain outside this increment.
|
||||
@@ -0,0 +1,71 @@
|
||||
# Issue 38 native manual repair review
|
||||
|
||||
## Predeclared intent and oracle (before edits)
|
||||
|
||||
Same native PID 5612, parent-identified extracted desktop source 6e7c4dda and complete Issue 38 representative eight-card mixed view. See ../review.md for source/fixture identities and prior cue-exposure caveat. No source, model JSON, geometry, or semantic answer keys will be read or modified programmatically by this reviewer.
|
||||
|
||||
Intended delivered change: move ONLY the Technician service conversation label on the selected representative diagram so it is visually close to its own highlighted boundary-exchange route. Preserve every semantic object/relation/port/endpoint/name/UUID, all other views and records, all node placements and port attachments, all route geometry, and every other label.
|
||||
|
||||
Parent oracle: compare the full exported Project against the immutable baseline eight-card.json. The only accepted persisted delta is the representative view label-position override for Technician service conversation (sa_contact, manually observed UUID 63009b5f-539e-5914-b630-ec6b7febf4d5). Representation-specific metadata directly required to encode that label position may change only if explicitly identified and reviewed; no unanticipated broader change is accepted silently.
|
||||
|
||||
Interaction experiment: discover native label movement controls; move that label; exercise Undo and Redo. Separately exercise bend add/move/remove/cancel using visible UI, restore exact route geometry through Undo, and retain only the intended label shift. Do not draw any new exchange in this phase.
|
||||
|
||||
Persistence intent: preserve baseline eight-card.json by using Save As to fresh C:/ar-diagram-01a0d717/.local/native-reading/working/manual-label.json if the observed UI supports JSON output. Stop and report any unexpected edit or persistence state. Parent verifies actual serialization independently; this reviewer does not infer success solely from filename or screenshot.
|
||||
|
||||
Starting expectation: normal client approximately1440x900, Fit52%, complete Traceability view, zero selected, no semantic/model edits from prior phases. Final desired state: saved label-only result, app left open for parent oracle, no normal closure yet.
|
||||
|
||||
## Observed manual sequence
|
||||
|
||||
Approximately245 seconds from initial manual observation through evidence archiving, excluding this report. Full view remained Fit52% and normal client size. Screenshots01-18 capture the sequence. No new exchange was drawn.
|
||||
|
||||
1. Clicked Help beside view controls. Eight downward scrolls were needed to reach Route connections around the model. This section explicitly documents independent label drag; select connection and drag a segment to add bend; right-click Add bend here / Remove bend; Insert/Delete bend shortcuts; Escape cancellation; Undo per completed drag. The long, untabbed help made targeted discovery slower than the subsequent edit.
|
||||
2. Closed help with Escape. Clicked the conversation label at(924,547), confirmed selected Boundary exchange sa_contact and highlighted system-to-actor route.
|
||||
3. Dragged label from(924,547) to(876,517), a48-pixel left,30-pixel upward shift. Label now sits across/beside the conversation vertical segment, visibly closer to its own route and separated from the ordinary actor-to-function allocation stroke. No card or port moved visually. Generic status said Connection route updated; Undo restores the previous route. App became unsaved(*).
|
||||
4. Ctrl+Z restored original label placement and cleared unsaved indicator. Ctrl+Shift+Z restored the intended moved label and unsaved indicator. Captures04-06.
|
||||
5. Separately right-clicked the selected conversation stroke at(855,542). Context menu identified Technician service conversation. Chose Add bend here. A circular bend appeared at(855,542).
|
||||
6. Dragged that circle from(855,542) to(833,542). Route changed as expected. The displayed label also shifted with changed route geometry despite the previous manual label move; this is recorded behavior, not silently treated as fixed absolute placement. Capture09.
|
||||
7. Right-clicked moved circle and chose Remove bend. Then Ctrl+Z restored the removed bend; another Ctrl+Z restored the prior bend position; third Ctrl+Z undid bend addition. Visually the original route and intended moved label were restored exactly, with no circle. Captures11-14. Full-project equality still requires parent oracle.
|
||||
8. Opened route context menu again, then Escape dismissed it without committing. This verifies menu/action cancellation only. True cancellation during an active pointer drag was NOT verified: documented Computer Use sky API exposes only atomic complete drag, without pointer-down/hold/up controls. No concurrent input or unsupported API workaround was attempted.
|
||||
|
||||
## Save As discrepancy and stop
|
||||
|
||||
Pointer Save As opened a native chooser. Default Arcadia source (*.arcadia); dropdown also offered Model JSON (*.json). Chose Model JSON; default filename became project.json, folder C:/ar-diagram-01a0d717/.local/native-reading/working. No existing project.json was visible; eight-card.json was present.
|
||||
|
||||
Used native accessibility set_value on observed File name edit index35 with literal C:\ar-diagram-01a0d717\.local\native-reading\working\manual-label.json. Refreshed screenshot17 visibly shows that full path and Model JSON type. Then clicked native Save at(946,602).
|
||||
|
||||
Unexpected result: dialog closed, and application status says JSON exported to C:\ar-diagram-01a0d717\.local\native-reading\working\project.json. Source files and their save state are retained. Application remains unsaved(*), consistent with export semantics. Requested manual-label.json differs from reported project.json. This reviewer has NOT read filesystem/model output to determine which path exists or compared contents. A potential cause is native set_value updating displayed edit text without committing the chooser filename; this is a hypothesis, not an established application defect.
|
||||
|
||||
Stopped immediately on this unexpected persistence state, notified parent, and made no retries or further UI actions. App remains open with conversation selected, label moved, route visually restored, unsaved state retained. Baseline eight-card.json was never intentionally selected as an output. Parent owns file/path verification and full Project comparison before further work.
|
||||
|
||||
## Current acceptance
|
||||
|
||||
- Independent label drag, Undo and Redo: visually demonstrated.
|
||||
- Temporary bend add, move and remove: visually demonstrated; three Undo actions restored label-only visual state.
|
||||
- Context cancellation: demonstrated. Mid-drag cancellation: unverified due tool API limitation.
|
||||
- Exact label-only serialized delta: pending parent oracle.
|
||||
- Requested export filename: discrepant; stop condition triggered.
|
||||
- Original source/other records unchanged: intended and no UI mutation targeting them; pending full-project oracle rather than claimed from screenshots.
|
||||
|
||||
## Parent oracle checkpoint and explicit identity correction
|
||||
|
||||
Parent reports working/project.json exists, manual-label.json absent, and pristine eight-card.json SHA remains exact. Full Project comparison reportedly shows only the representative diagram routes changing from0 to1; semantic objects and other records exact. Route has empty waypoints, label fraction0.5 and offset41.345337/-58.22165. This is parent-provided oracle evidence; reviewer has not read the JSON.
|
||||
|
||||
Explicit correction to predeclared UUID: the intent used manually transcribed 63009b5f-539e-5914-b630-ec6b7febf4d5. Parent verified actual sa_contact UUID as63009b5f-539e-5914-b630-ec6b7fefb4d5. The earlier literal remains preserved above as a transcription error; intended named relation/alias has not changed.
|
||||
|
||||
Second export is authorized to the originally intended fresh manual-label.json using actual pointer focus and typed text, avoiding set_value. Do not overwrite project.json or baseline. Pause after export for parent byte/model check before normal closure. No further model edits.
|
||||
|
||||
## Second export observed
|
||||
|
||||
Recovered the unchanged native app after node session bindings had reset, using documented initialization, list_apps and unique returned window525590. No launch/kill occurred.
|
||||
|
||||
Save As again defaulted to Arcadia source, so selected Model JSON explicitly. Existing eight-card.json and first project.json were visible. Pointer-focused filename edit. Structured accessibility focused_element incorrectly continued to report Search Box while the screenshot visibly showed filename focus. Ctrl+A through Control_L alias did not show selected text after refresh; a second standard Ctrl+a resulted in empty filename. Typed the full fresh C:\ar-diagram-01a0d717\.local\native-reading\working\manual-label.json with sky.type_text and observed correct path in filename field. Pressed Return to commit.
|
||||
|
||||
Dialog closed without an overwrite prompt. Status explicitly reported JSON exported to C:\ar-diagram-01a0d717\.local\native-reading\working\manual-label.json. Source files and their save state are retained. Dirty indicator remained, as expected for an imported draft after export. See19-20. No model edits during this second attempt. Stopped for parent file/model comparison before normal close/discard.
|
||||
|
||||
Parent additionally reports derived geometry check: all12 computed paths identical; only sa_contact computed label moves. Mouse displacement48left/30up matches zoom0.515272, rounded Fit52%. Independent critic validation remains parent's responsibility.
|
||||
|
||||
## Verified export and normal-close handoff
|
||||
|
||||
Parent reports byte check PASS: manual-label.json exactly equals first project.json, SHA prefix39572f8a, and baseline unchanged. Independent stored and computed oracle reportedly passes all12 paths,11 other edge records, diagnostics and bounds unchanged. Only intended conversation label moves. This reviewer preserves both files; no file operations were used on them.
|
||||
|
||||
Issued Alt+F4 to current window525590. Keep your changes dialog appeared; clicked Discard changes at(463,515), as authorized after successful export verification. On subsequent window enumeration old525590 was absent and a new Untitled mission window853344 appeared at the same executable path. Reviewer did not interact with new window; notified parent to correlate process watcher/fresh launch before reopen review. Capture21 preserves the close prompt. No save to baseline occurred.
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"status": "PASS",
|
||||
"requested_export_bytes_identical_to_first": true,
|
||||
"sha256": "39572f8ab176f7b8ac8933a308dcf7b127aa15e3d4f627ef604325a5275812f2",
|
||||
"pristine_unchanged": true
|
||||
}
|
||||
|
After Width: | Height: | Size: 148 KiB |
|
After Width: | Height: | Size: 150 KiB |
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"source": "6e7c4ddaf0775198384a8c4882809ea8e14b2976",
|
||||
"start": "2026-10-02T01:30:17.723189+00:00",
|
||||
"binary_sha256": "d55ecad4b0f75c0c9c26625e5441bef9c9360890b65bc13236c6ebfaf03d631e",
|
||||
"runtime_sha256": "f45604a12e8bcd839fd86f667c1be1cc7c4f9da2b3c69ff381ac708f0e1ae7d4",
|
||||
"input_files": {
|
||||
"eight-card.json": "9db1015369f450d5810c96a01fddb8a009d57f6aafbda5182703f15ded23d9c8",
|
||||
"manual-label.json": "39572f8ab176f7b8ac8933a308dcf7b127aa15e3d4f627ef604325a5275812f2",
|
||||
"project.json": "39572f8ab176f7b8ac8933a308dcf7b127aa15e3d4f627ef604325a5275812f2"
|
||||
},
|
||||
"cwd": "C:\\ar-diagram-01a0d717\\.local\\native-reading\\working",
|
||||
"path": "C:\\Windows\\System32;C:\\Windows",
|
||||
"pid": 5104,
|
||||
"exit_code": 0,
|
||||
"finished": "2026-10-02T01:33:34.336134+00:00",
|
||||
"stdout_bytes": 0,
|
||||
"stderr_bytes": 0,
|
||||
"inputs_unchanged": true
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
# Read-only reopen verification
|
||||
|
||||
2026-10-01. Reviewer: diagram_reading. Parent launched fresh PID 5104, watcher session 21943, same reviewed 6e7c4dda source / d55ecad4 executable / f456 runtime. Native window 853344. Parent supplied these identities; this reviewer did not inspect source or model JSON.
|
||||
|
||||
Intent: reopen the exported label-only model through the native UI and verify that the corrected Technician service conversation label placement persists in the complete saved representative view. No model edits, export, Save, filtering, placement, or route changes were permitted.
|
||||
|
||||
## Actions and observations
|
||||
|
||||
1. Pointer Open from Home. The native Open dialog started in the working folder with an empty filename field and visible caret. Typed the exact path C:\ar-diagram-01a0d717\.local\native-reading\working\manual-label.json, then Return. No accessibility set_value was used. Status explicitly reported importing this exact file.
|
||||
2. Import opened the OA default view. Selected System, opened the saved-view dropdown, and chose Issue 38 representative eight-card mixed view. Its content remained OA to SA traceability. Clicked Fit: 52%, no pan or additional zoom. Normal window capture measured 1442 x 932 including window chrome.
|
||||
3. At Fit, all eight cards were fully visible: Assess an alarm procedure, Field technician, Assess pressure alarm, Pressure coordination service, Repair valve in the field, Reset valve remotely, Confirm safe pressure, and Assess an alarm capability. The route bundle looked intact and the two functional exchange labels remained visible. Coincident strokes mean this observation cannot establish an independent visual count of 12 relations. The exact 12-relation integrity conclusion belongs to the parent's stored/computed model oracle.
|
||||
4. The Technician service conversation label persisted around screen (876,517), about 48 px left and 30 px above its original position. It is visibly closer to its vertical route beside Field technician. Screenshot 01-fit.jpg records the unselected complete view.
|
||||
5. Single click at (876,517) selected Boundary exchange, Technician service conversation, stable alias sa_contact. Highlight followed the same route from Pressure coordination service toward Field technician. Screenshot 02-selected.jpg records the selection. Selection was observational; no property was applied.
|
||||
6. Alt+F4 closed normally without a Keep changes prompt. An immediate enumeration still briefly listed the closing window; the next state call returned foreground window did not report a process id, and a subsequent native window enumeration showed no Arcadia window. No discard action was needed on this read-only imported session. Parent owns process exit/log and all three file-hash checks.
|
||||
|
||||
Elapsed from fresh Home observation to Fit: 132 seconds; through native closure confirmation: 164 seconds. This includes tool/recording overhead and context recovery, not a timed human usability benchmark. No chooser wrong turn, pan, zoom correction, or editing recovery occurred in this phase.
|
||||
|
||||
## Limits and conclusion
|
||||
|
||||
The label-only correction persisted through actual native JSON export and fresh reopening. Eight-card visibility and label selection were directly observed. This is a persistence/reopen check, not a new blind reading accuracy trial: earlier OA/SA opening-view cues, assisted semantic inspection, and manual repair already exposed the model. The original unaided-reading caveat remains valid. No claim that manual label repair resolves coincident-route selection or all small-diagram usability limitations is made.
|
||||
|
||||
Evidence: 01-fit.jpg and 02-selected.jpg in this directory. GUI released to parent for issue 46 after normal closure.
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"source": "6e7c4ddaf0775198384a8c4882809ea8e14b2976",
|
||||
"start": "2026-10-02T01:30:17.723189+00:00",
|
||||
"binary_sha256": "d55ecad4b0f75c0c9c26625e5441bef9c9360890b65bc13236c6ebfaf03d631e",
|
||||
"runtime_sha256": "f45604a12e8bcd839fd86f667c1be1cc7c4f9da2b3c69ff381ac708f0e1ae7d4",
|
||||
"input_files": {
|
||||
"eight-card.json": "9db1015369f450d5810c96a01fddb8a009d57f6aafbda5182703f15ded23d9c8",
|
||||
"manual-label.json": "39572f8ab176f7b8ac8933a308dcf7b127aa15e3d4f627ef604325a5275812f2",
|
||||
"project.json": "39572f8ab176f7b8ac8933a308dcf7b127aa15e3d4f627ef604325a5275812f2"
|
||||
},
|
||||
"cwd": "C:\\ar-diagram-01a0d717\\.local\\native-reading\\working",
|
||||
"path": "C:\\Windows\\System32;C:\\Windows",
|
||||
"pid": 5104
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
# Issue 38 native diagram reading review
|
||||
|
||||
Reviewer: independent diagram_reading agent. Date: 2026-10-02 UTC (2026-10-01 local).
|
||||
|
||||
## Identity and scope
|
||||
|
||||
Parent-supplied source identity: extracted desktop source 6e7c4dda; executable SHA-256 d55ecad4b0f75c0c9c26625e5441bef9c9360890b65bc13236c6ebfaf03d631e; parent states routing/core identical to released 715, fixture generated at f754. These identities were supplied, not independently read by this reviewer.
|
||||
|
||||
Observed executable: C:/ar-compact-01a0d717/.local/package39/extracted/ArcadiaStudio-0.2.0-preview.compact-help.20261001-x86_64-pc-windows-gnullvm/arcadia-studio.exe; window id 525590.
|
||||
|
||||
Copied fixture opened with the pointer Open flow: C:/ar-diagram-01a0d717/.local/native-reading/working/eight-card.json. Parent-supplied SHA-256: 9db1015369f450d5810c96a01fddb8a009d57f6aafbda5182703f15ded23d9c8.
|
||||
|
||||
Read no source, fixture contents, geometry files, semantic answer keys, parent research, Inspector selection, or other model lookup. No model edits or save. Built-in project properties were already visible and remained unselected throughout.
|
||||
|
||||
## Validity caveat
|
||||
|
||||
The fixture initially opened the default OA responsibility and repair traffic view. Clicking System displayed the simple SA service boundary and functions view before the representative saved view could be chosen. Both briefly exposed the same named connections in a simpler layout. This was incidental UI exposure, but it can cue endpoint answers. Therefore these results are NOT pristine blind endpoint-accuracy evidence for the eight-card diagram. A future truly blind run should open directly into the representative view or use unrelated labels/participants.
|
||||
|
||||
## Procedure and effort
|
||||
|
||||
The normal window was left at its launch size: screenshot outer bounds 1442 by 931, approximately 1440 by 900 client. Selected System, then saved view Issue 38 representative eight-card mixed view. View content remained OA to SA traceability; no filtering or projection changes.
|
||||
|
||||
Clicked Fit before reading; displayed 52%. Eight cards fit on the canvas. Start: 2026-10-02T01:09:25.174Z. One pointer '+' zoom step to 62%, then returned to Fit at 2026-10-02T01:09:50.120Z. Approximately 25 seconds of diagram-reading phase, excluding setup, reporting, and tools used to record evidence. No pan; no selection; no Inspector lookup.
|
||||
|
||||
Setup friction was tool/file-dialog related: forward-slash path in the Windows chooser was rejected as invalid; changing to native backslashes loaded successfully. An accessibility click on chooser Open did not appear to activate it; a refreshed pointer click did. These are not diagram findings.
|
||||
|
||||
## Recorded endpoint answers before assisted lookup
|
||||
|
||||
- Request field repair: Assess pressure alarm to Repair valve in the field. Medium confidence in the exact path; stronger confidence in direction from triangular markers. The request label was found in the center horizontal corridor; following it required tracing back through a bend near Assess pressure alarm and the tall, nearly coincident vertical lines next to Repair valve in the field.
|
||||
- Report repair result: Repair valve in the field to Confirm safe pressure. Medium confidence. The horizontal line under the report label appears to join the vertical line which also goes toward Reset valve remotely. That apparent branch made Reset valve remotely a plausible wrong turn before tracing to Confirm safe pressure at the bottom. The lower triangle at Repair and triangle at Confirm support the answer, but the route overlaps other links.
|
||||
- Technician service conversation, unoriented participants: Pressure coordination service and Field technician. Low to medium confidence. Their square markers appear connected by the line from the right side of the system, across and then up to the left side of Field technician. However, the Technician service conversation label sits nearest the separate vertical Field technician-to-Repair path and its bend/arrow above Repair valve in the field. A reader could reasonably associate the label with that line instead.
|
||||
|
||||
## Cognitive and visual findings
|
||||
|
||||
At 52% Fit, card names are readable with concentration, but edge labels are very small. All eight cards are visible and no label was visibly clipped in this view. Request and report labels are horizontally separated from the route endpoints; endpoint tracing is harder than locating the words.
|
||||
|
||||
The center and right-side route corridor contains near-coincident vertical lines, crossings without clear crossing/junction distinction, and segments which look shared. The Report repair result path seems to branch toward Reset valve remotely; the request path can be confused with the line descending from Assess an alarm procedure. These are visual path-association uncertainties, not verified semantic errors.
|
||||
|
||||
Conversation label placement creates the strongest association problem: the nearby actor-to-function allocation line appears to own the label, while the suspected actual square-ended route lies elsewhere. This leaves an uncertainty even after identifying the likely participants.
|
||||
|
||||
One zoom step to 62% modestly improved label text but clipped the right side of Field technician, Repair valve in the field, and Assess an alarm, plus the bottom of Confirm safe pressure. Zoom did not resolve route overlaps and sacrificed simultaneous endpoint visibility. Returned to Fit rather than pan, because full-route context mattered more.
|
||||
|
||||
The canvas is bounded by a persistent left navigator and right properties pane, plus a tall toolbar region. In this ordinary window, the usable diagram region is roughly 826 by 534 pixels. This makes eight-card mixed-view reading depend on small text or additional navigation.
|
||||
|
||||
## Evidence and handoff
|
||||
|
||||
- fit-52.png: complete eight-card Fit baseline, before selection.
|
||||
- zoom-62.png: one zoom step, endpoints clipped by viewport.
|
||||
|
||||
These are archived copies of screenshots captured through the approved Computer Use API, not synthetic renders. No image processing or reinspection was used.
|
||||
|
||||
Unaided phase ended and answers were sent to parent before assisted inspection. App left open on the representative complete view at 52% Fit, 0 selected. Parent owns assisted phase and exit/log capture.
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"source": "6e7c4ddaf0775198384a8c4882809ea8e14b2976",
|
||||
"routing_core_source": "715036e132677dd2bc2fb37ed316d93dc9987aec",
|
||||
"fixture_probe_source": "f754ad85d3674a709d10054e6fe23079f977c547",
|
||||
"start": "2026-10-02T01:06:58.733162+00:00",
|
||||
"binary_sha256": "d55ecad4b0f75c0c9c26625e5441bef9c9360890b65bc13236c6ebfaf03d631e",
|
||||
"runtime_sha256": "f45604a12e8bcd839fd86f667c1be1cc7c4f9da2b3c69ff381ac708f0e1ae7d4",
|
||||
"fixture_sha256": "9db1015369f450d5810c96a01fddb8a009d57f6aafbda5182703f15ded23d9c8",
|
||||
"fixture": "C:\\ar-diagram-01a0d717\\.local\\native-reading\\working\\eight-card.json",
|
||||
"cwd": "C:\\ar-diagram-01a0d717\\.local\\native-reading\\working",
|
||||
"path": "C:\\Windows\\System32;C:\\Windows",
|
||||
"pid": 5612
|
||||
}
|
||||
|
After Width: | Height: | Size: 148 KiB |