Name which body settles data_coding in resolveBody #40

Merged
lilleman merged 3 commits from resolve-body-source into main 2026-09-28 02:29:43 +02:00
2 changed files with 12 additions and 8 deletions
Showing only changes of commit 65fadfc93a - Show all commits
+3 -3
View File
@@ -75,23 +75,23 @@ type ResolvedBody = {
* What the PDU's data_coding describes, and so what may set it: short_message wherever it holds an * What the PDU's data_coding describes, and so what may set it: short_message wherever it holds an
* octet, since messageOctets() reads it there, and message_payload only where it does not. * octet, since messageOctets() reads it there, and message_payload only where it does not.
*/ */
type CodingSource = 'caller' | 'message_payload' | 'short_message'; type CodingSource = 'message_payload' | 'short_message';
function codingOf(params: Record<string, ParamValue | undefined>): number | undefined { function codingOf(params: Record<string, ParamValue | undefined>): number | undefined {
return typeof params.data_coding === 'number' ? params.data_coding : undefined; return typeof params.data_coding === 'number' ? params.data_coding : undefined;
} }
/** Only the short_message the command's own table will write, since writeParams() ignores any other. */
function resolveShortMessage( function resolveShortMessage(
params: Record<string, ParamValue | undefined>, params: Record<string, ParamValue | undefined>,
definition: CommandDefinition, definition: CommandDefinition,
): Result<{ params: Record<string, ParamValue | undefined>; source: CodingSource }> { ): Result<{ params: Record<string, ParamValue | undefined>; source: CodingSource }> {
// Only the short_message the command's own table will write, since writeParams() ignores any other.
const message = definition.params?.short_message === undefined ? undefined : params.short_message; const message = definition.params?.short_message === undefined ? undefined : params.short_message;
if (Buffer.isBuffer(message)) { if (Buffer.isBuffer(message)) {
return { return {
params: params.sm_length === undefined ? { ...params, sm_length: message.length } : params, params: params.sm_length === undefined ? { ...params, sm_length: message.length } : params,
source: message.length > 0 ? 'caller' : 'message_payload', source: message.length > 0 ? 'short_message' : 'message_payload',
}; };
} }
+9 -5
View File
@@ -190,8 +190,8 @@ A nine-reader comprehension panel read the whole project on 2026-09-20 and score
mean 6.8. Navigation (7–8) capped nobody. **Locality capped every unit reader at 5–6 and Shape mean 6.8. Navigation (7–8) capped nobody. **Locality capped every unit reader at 5–6 and Shape
capped both architects at 6**, and those two are what this release lifts. The gate is 7 on all four capped both architects at 6**, and those two are what this release lifts. The gate is 7 on all four
dimensions, higher where it is cheap. Maintainer's call, 2026-09-20. A systems-architect review the dimensions, higher where it is cheap. Maintainer's call, 2026-09-20. A systems-architect review the
same day returned ALIGN with one blocking-severity finding, which is the first item under Locality same day returned ALIGN with one blocking-severity finding, `resolveBody`'s `settles` boolean, which
and is also what the panel ranked hardest — two methods, one answer. the panel also ranked hardest; it is now a named `CodingSource`.
A four-seat scoring run on 2026-09-27 read #30 at 6, 6, 7 and 6, every seat capped by Locality in A four-seat scoring run on 2026-09-27 read #30 at 6, 6, 7 and 6, every seat capped by Locality in
the held-message and shutdown code; #30 merged under the floor on condition that Locality is the the held-message and shutdown code; #30 merged under the floor on condition that Locality is the
@@ -199,6 +199,10 @@ next work ([decision](docs/decisions.md#internals-and-tests)).
### Locality — next, ahead of everything below; 5–6 today, and the gate is 7 ### Locality — next, ahead of everything below; 5–6 today, and the gate is 7
- [ ] **Lift the held-message and shutdown code to Locality 7, and confirm it with a scoring run.**
The 2026-09-27 run capped every seat there; a run reading 7.0 or above also retires the #30
decision.
### Correctness ### Correctness
- [ ] **Settle what a repeated tag not marked `multiple` reads as, and pin it in a test.** A vendor - [ ] **Settle what a repeated tag not marked `multiple` reads as, and pin it in a test.** A vendor
@@ -292,10 +296,10 @@ next work ([decision](docs/decisions.md#internals-and-tests)).
- [ ] **Move the one-line facts out of the decision log and back to the code.** Five of nine readers - [ ] **Move the one-line facts out of the decision log and back to the code.** Five of nine readers
independently reported being sent to `docs/decisions.md` for a question they hit while reading, independently reported being sent to `docs/decisions.md` for a question they hit while reading,
with no link from the code; one counted roughly fifty index redirects. The four worth inlining with no link from the code; one counted roughly fifty index redirects. The three left to inline
as one line each: that `segmentUnits`' three numbers are in two units (septets and octets), as one line each: that `segmentUnits`' three numbers are in two units (septets and octets),
which body settles `data_coding`, that a receipt's body is read as octets whatever its that a receipt's body is read as octets whatever its `data_coding` says, and the `<base>-<n>`
`data_coding` says, and the `<base>-<n>` id notation. The reasoning stays in the log; the id notation. The reasoning stays in the log; the
definition belongs at the code. definition belongs at the code.
- [ ] **Document the two delivery-receipt merge bounds.** `maxDlrMerges` (1000) and - [ ] **Document the two delivery-receipt merge bounds.** `maxDlrMerges` (1000) and