ax25sdl 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +105 -0
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -57,3 +57,108 @@ binding predicates and action verbs to behaviour (the TS equivalent of
57
57
  AGWPE-over-WebSocket, etc.). That work is intentionally out of scope
58
58
  for the Tier 1c codegen; the goal here is to prove the codegen IR
59
59
  survives a third backend.
60
+
61
+ ## Not yet transcribed
62
+
63
+ The AX.25 v2.2 SDL chapter is figc4.1 through figc4.7. Each YAML
64
+ transcription's `coverage:` field declares whether it's `complete` or
65
+ `partial`. Current status:
66
+
67
+ | Figure | State / Page | Status |
68
+ | ------ | ------------------------------------- | -------------------------------------------------------------- |
69
+ | figc4.1 | Disconnected | ✅ complete |
70
+ | figc4.2 | AwaitingConnection (v2.0) | ✅ complete |
71
+ | figc4.3 | AwaitingRelease | ✅ complete |
72
+ | figc4.4 | Connected | ✅ complete |
73
+ | figc4.5 | TimerRecovery | ❌ **not transcribed** — see "TimerRecovery" below |
74
+ | figc4.6 | AwaitingConnection (v2.2) | ✅ complete |
75
+ | figc4.7 | Subroutines | ⚠️ partial — see "Subroutine status" below |
76
+
77
+ ### TimerRecovery state (figc4.5)
78
+
79
+ `DataLinkConnected` t38 (T1 expiry) and t39 (T3 expiry) both transition
80
+ to a `TimerRecovery` state that has no transcribed page in
81
+ `spec-sdl/data-link/`. The C# and TS runtimes register `TimerRecovery`
82
+ with an empty transition map so the state-target lint passes (see the
83
+ `StateTargetAllowList` entry in `tools/Packet.Sdl.CodeGen/Program.cs`),
84
+ but any session that enters TimerRecovery currently has no exit path —
85
+ it'll silently stall until a peer-initiated DISC or a `TimerRecovery`
86
+ isn't transcribed.
87
+
88
+ Real consequence: long-running connected sessions where the peer goes
89
+ quiet for > T3 (default 30s in the runtime) will time out and re-poll
90
+ via the unmodelled state. Short-lived sessions never reach it.
91
+
92
+ ### Subroutine status (figc4.7)
93
+
94
+ 13 subroutines are declared in `spec-sdl/data-link/subroutines.sdl.yaml`.
95
+ The C# `DefaultSubroutineRegistry` and the TS `SubroutineRegistry` ship
96
+ the following coverage:
97
+
98
+ | Subroutine | Status |
99
+ | -------------------------------- | --------------------------------------------------- |
100
+ | `Establish_Data_Link` | ✅ inlined into the dispatcher |
101
+ | `Establish_Extended_Data_Link` | ✅ inlined |
102
+ | `Clear_Exception_Conditions` | ✅ inlined |
103
+ | `Check_I_Frame_Acknowledged` | ✅ inlined |
104
+ | `Select_T1_Value` | ❌ no-op stub (dynamic T1V; figure transcribed) |
105
+ | `Transmit_Enquiry` | ❌ no-op stub |
106
+ | `Invoke_Retransmission` | ❌ no-op stub |
107
+ | `N_r_Error_Recovery` | ❌ no-op stub |
108
+ | `Enquiry_Response` | ❌ no-op stub |
109
+ | `Check_Need_For_Response` | ❌ no-op stub |
110
+ | `UI_Check` | ❌ no-op stub |
111
+ | `Set_Version_2_0` | ❌ no-op stub |
112
+ | `Set_Version_2_2` | ❌ no-op stub |
113
+
114
+ The figc4.7 YAML transcriptions are **complete** — every subroutine's
115
+ decision tree, predicate, and action chain is encoded. What's missing
116
+ is the runtime *walker* that consumes those bodies. The dispatcher
117
+ treats a `kind: subroutine` action as a name lookup against a registry;
118
+ nine of the thirteen names map to a no-op that logs a debug message
119
+ instead of executing the SDL-declared body.
120
+
121
+ Real consequence: REJ / SREJ recovery, T1V smoothing, frame
122
+ retransmission on T1 timeout, and v2.2 mode negotiation all degrade to
123
+ "do nothing" at runtime. SABM / UA / DISC / I-frame / RR happy-path
124
+ flows are unaffected.
125
+
126
+ ### Other v2.2 spec gaps
127
+
128
+ These are spec features that have no SDL transitions in the canonical
129
+ figures — they live in spec prose only — and are therefore not modelled
130
+ in this package at all:
131
+
132
+ - **XID negotiation** (v2.2 §5.4, §6.6) — modulus + parameter exchange
133
+ at link-establishment time.
134
+ - **TEST frame** handling (§4.3.3.10) — round-trip diagnostic.
135
+ - **Selective Reject (SREJ)** as a v2.2-only frame — generated /
136
+ consumed only when the link is mod-128 *and* the `srej_enabled`
137
+ predicate is true. Predicate currently returns false.
138
+ - **Mod-128 sequencing** as a runtime path — the SDL guards reference a
139
+ `version_2_2` predicate, which the C# and TS bindings hard-wire to
140
+ `false`. The figc4.6 (`AwaitingConnection22`) page transcribes the
141
+ SABME handshake but the post-connect mod-128 transitions in figc4.4
142
+ never get walked.
143
+
144
+ ## How to keep this section honest
145
+
146
+ When transcribing a new SDL page or wiring a previously-stubbed
147
+ subroutine to its real walker, **update this README in the same PR**.
148
+ The maturity table is the only authoritative summary of which parts of
149
+ the spec are runnable end-to-end; the codegen lints will catch
150
+ predicate / action-verb gaps, but they will not surface "this whole
151
+ state has no transitions" or "this subroutine is a no-op". The README
152
+ is the human-readable backstop.
153
+
154
+ Suggested workflow when status changes:
155
+
156
+ 1. Move a row from ❌ / ⚠️ to ✅ in this README.
157
+ 2. Drop the corresponding `StateTargetAllowList` entry (if the state
158
+ is now transcribed) or remove the no-op stub registration (if a
159
+ subroutine is now wired).
160
+ 3. Bump the version in `ts-spec/package.json` and `web/ax25/package.json`
161
+ in lockstep so consumers pick up the broader behaviour with a
162
+ semver hint. Even a no-op-stub → real-walker transition is worth a
163
+ minor-version bump since previously-quiet code paths now produce
164
+ wire traffic.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ax25sdl",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "AX.25 v2.2 SDL specification as TypeScript data structures, generated from the canonical SDL figure transcriptions in M0LTE/packet.net.",
5
5
  "license": "MIT",
6
6
  "repository": {