Repository navigation
fix(figc4.6): Set Version 2.0 before Establish Data Link on the FRMR fallback (#45) - #108
Merged
Merged
Conversation
…fallback (#45) The Awaiting V2.2 Connection "FRMR received" column (t14) drew "Establish Data Link" before "Set Version 2.0". Establish Data Link (figc4.7) branches on the modulo and sends SABME while modulo 128 is still in effect, so the v2.0 fallback re-sent the SABME the pre-v2.2 peer had just rejected with FRMR: no progress against a v2.0 peer, and a modulo split against a v2.2 peer (see #45). - DataLink_AwaitingV22Connection.graphml: the two boxes swap places on the column (geometry of n66 and n68 exchanged, edges e69..e72 re-pointed), so the arm now reads SRT/T1V, Set Version 2.0, Set Layer 3 Initiated, Establish Data Link, then state 1. Node ids, labels and shape classes are unchanged (Establish Data Link stays a Subroutine call); the column remains a straight top-down stack with no bend points, so nothing else on the page moved. - awaiting_v22_connection.sdl.yaml regenerated by the Packet.Sdl.Transcribe walker: only t14_frmr_received's path order changes; 25 transitions / 8 decisions as before and no id changes, so the citations sidecar needs no re-keying. - awaiting_v22_connection.g.mmd regenerated by Packet.Sdl.CodeGen; the totality/determinism lint stays clean (8051 feasible valuations, 0 holes, 0 overlaps). - DataLink_AwaitingV22Connection.svg regenerated with tools/render/render_all.py. Refs #45. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014qyx5dT8rmRTb8szT4SpEQ
…hanges table - awaiting_v22_connection.citations.yaml: t14_frmr_received annotated with an ERRATUM (#45) note (what changed, why per §4.3.3.2, §6.3.2 and §6.5, and the ax25sdl evidence: the golden trace frmr-fallback-downgrades-to-sabm and the docs/explorer.md #45 calibration row), plus the direwolf frmr_frame references (the state_5 arm at 5044/5046 and the state_3/4 arm at 5028/5030, both of which force v2.0 before establish_data_link). - doc/ax.25.2.3-draft.md: row appended to the "Changes from Version 2.2" table. No prose states the action order (§4.3.3.2, §6.3.2, §6.5 and the C4.6 captions were checked), so no section text changes. Refs #45. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014qyx5dT8rmRTb8szT4SpEQ
SVG figure changes (
|
| what | change | |
|---|---|---|
| + | edge | Establish Data Link → 1 Awaiting Connection |
| + | edge | SRT <- Initial Default → Set Version 2.0 |
| + | edge | Set Layer 3 Initiated → Establish Data Link |
| + | edge | Set Version 2.0 → Set Layer 3 Initiated |
| − | edge | Establish Data Link → Set Layer 3 Initiated |
| − | edge | SRT <- Initial Default → Establish Data Link |
| − | edge | Set Layer 3 Initiated → Set Version 2.0 |
Interactive viewers — swipe, onion-skin, blink, and a clickable change list that zooms to each change — are attached to this run as the svg-figure-diff artifact: download, unzip, open the HTML.
Locally: python3 tools/svgdiff/svg_diff.py main HEAD --all --merge-base
This was referenced Sep 10, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #45. Figure fix and its citation/prose bookkeeping in two independently revertable commits, following the #81 (#40) precedent.
What changed and why
On figc4.6 (Awaiting V2.2 Connection) the "FRMR received" column (
t14_frmr_received) drew "Establish Data Link" before "Set Version 2.0". Establish Data Link (figc4.7) branches on the modulo and sends SABME while modulo 128 is still in effect, so the v2.0 fallback re-sent the very SABME the pre-v2.2 peer had just rejected with FRMR (§4.3.3.2): no progress against a v2.0 peer, and a modulo split against a v2.2 peer (the responder adopts 128 from the SABME while this station drops to 8).The two boxes swap places on the column, so the arm now reads:
SRT := Initial Default / T1V := 2 * SRT, Set Version 2.0, Set Layer 3 Initiated, Establish Data Link, then state 1 (Awaiting Connection). The re-establishment therefore goes out as a v2.0 SABM, which is what §6.3.2 ("a version 2.0 connection is made" once a pre-2.2 peer answers with FRMR) and §6.5 (reset "after receipt of a FRMR frame from a TNC using an older version of the protocol") intend, and what direwolf already does as an erratum.Per file:
sdl/DataLink_AwaitingV22Connection.graphml(commit 1): geometry of n66 (Establish Data Link,Subroutine call) and n68 (Set Version 2.0,Processing description) exchanged and edges e69..e72 re-pointed. Node ids, labels and d5 shape classes are unchanged; the column stays a straight top-down stack with no bend points, nothing else on the page moved, and a page-wide bounding-box check finds no overlaps.yaml/awaiting_v22_connection.sdl.yaml: regenerated byPacket.Sdl.Transcribe(ax25sdl main181328b; the CI-pinnedff5bc7dproduces byte-identical output). 25 transitions / 8 decisions as before; only t14's path order changes and no id changes, so the sidecar needed no re-keying.mmd/awaiting_v22_connection.g.mmd: regenerated byPacket.Sdl.CodeGen; the totality/determinism lint stays clean (120 arms, 13 subroutines, 8051 feasible valuations, 0 holes, 0 overlaps).svg/DataLink_AwaitingV22Connection.svg: regenerated bytools/render/render_all.py.yaml/awaiting_v22_connection.citations.yaml(commit 2): t14 annotated with an ERRATUM (figc4.6 t14 (FRMR fallback): 'Establish Data Link' precedes 'Set Version 2.0' — the v2.0 fallback re-establishes with SABME, not SABM #45) note and the §4.3.3.2 / §6.3.2 / §6.5 and direwolf references.doc/ax.25.2.3-draft.md(commit 2): row appended to "Changes from Version 2.2". No prose states the action order (§4.3.3.2, §6.3.2, §6.5 and the C4.6 captions were checked), so no section text changes. The embedded figc4.6 image files in the draft are not regenerated, the same deferral as fix(figc4.4 + figc4.5 + §4.4.2/§6.4.4): discard out-of-window duplicate I frames — X.25 2.4.6.4(a) guard, bound = negotiated k (#40) #81.svgdiff (
python3 tools/svgdiff/svg_diff.py main fix/45-frmr-fallback-order --all --merge-base --format markdown)spec-sdl/v2.2-errata/data-link/svg/DataLink_AwaitingV22Connection.svgnodes 80→80, edges 84→84, labels 23→23
Establish Data Link → 1 Awaiting ConnectionSRT <- Initial Default → Set Version 2.0Set Layer 3 Initiated → Establish Data LinkSet Version 2.0 → Set Layer 3 InitiatedEstablish Data Link → Set Layer 3 InitiatedSRT <- Initial Default → Establish Data LinkSet Layer 3 Initiated → Set Version 2.0The fourth removed edge,
Set Version 2.0 → 1 Awaiting Connection, is missing from the list only because the SABM column carries an edge with the same signature and the tool de-duplicates by signature; a multiset diff of the graphml shows exactly four edges removed and four added, and the edge count is unchanged. The raw SVG diff is ten lines: the two boxes' transforms and their label positions.Evidence
traces/frmr-fallback-downgrades-to-sabm.trace.yaml: expectst14_frmr_receivedto emit SABM P=1 withversion_2_2: false; markedexpected_failureagainst the pre-fix figure.docs/explorer.md, figc4.6 t14 (FRMR fallback): 'Establish Data Link' precedes 'Set Version 2.0' — the v2.0 fallback re-establishes with SABME, not SABM #45 calibration row:awaiting-v22seed,v20-frmrstub peer, timer-free progress on; the pre-fix figure emits SABME again and the link only comes up through figc4.2's T1 retry (4 steps).src/ax25_link.cfrmr_frameata231971: the state_5 arm runsset_version_2_0(5044, "Erratum: Need to force v2.0. This is not in flow chart.") beforeestablish_data_link(5046); the state_3/state_4 arm does the same at 5028/5030 ("FRMR can only be sent by v2.0").ax25sdl follow-up: remove the expected_failure marker from traces/frmr-fallback-downgrades-to-sabm.trace.yaml and turn the #45 explorer calibration row clean (keep it firing on a pre-fix fixture)
Notes for review
🤖 Generated with Claude Code
https://claude.ai/code/session_014qyx5dT8rmRTb8szT4SpEQ