ReviewOS

also looking at this

stacks/drone

feat: add bounded TCP transport for autopilot drivers

#71
Merged chris wants to merge codex/mavlink-tcp-transport into main
22 files +1798 -154

Review threads live on the whole diff, not on one commit, so none are shown here - a thread's line means something in the branch's final form, and painting it into an intermediate step would put it on code it is not about.

docs/parity-audit.jsonmodified+380-7
Changes to docs/parity-audit.json
@@ -1,6 +1,6 @@
11{
22 "schemaVersion": 1,
3 "reviewedAt": "2026-10-20",
3 "reviewedAt": "2026-10-22",
44 "assignments": [
55 {
66 "entry": "px4:src/modules/airship_att_control",
@@ -2372,15 +2372,15 @@
23722372 {
23732373 "entry": "ardupilot:libraries/AP_HAL_Linux",
23742374 "issueKey": "runtime",
2375 "unclassified": [
2375 "unclassified": [],
2376 "reviewed": [
23762377 "parameters",
23772378 "modes",
23782379 "protocols",
23792380 "hardware",
23802381 "failures"
23812382 ],
2382 "reviewed": [],
2383 "remaining": "Additional parameters, modes, protocol variants, hardware branches and failure paths require source review and independent evidence. Reviewed dimensions contain sampled behavior cases, not exhaustive equivalence."
2383 "remaining": "Sampled UART baud/buffer, device-mode, byte-protocol, hardware-flow and failure cases are reviewed gaps, not exhaustive HAL equivalence. Device subclasses, scheduling, console/stdio, parity/stop bits, port ownership, flush/receive-time bounds, reconnect, platform variants and every remaining library subsystem require deeper review and executable evidence."
23842384 },
23852385 {
23862386 "entry": "ardupilot:libraries/AP_HAL_QURT",
@@ -2398,15 +2398,15 @@
23982398 {
23992399 "entry": "ardupilot:libraries/AP_HAL_SITL",
24002400 "issueKey": "runtime",
2401 "unclassified": [
2401 "unclassified": [],
2402 "reviewed": [
24022403 "parameters",
24032404 "modes",
24042405 "protocols",
24052406 "hardware",
24062407 "failures"
24072408 ],
2408 "reviewed": [],
2409 "remaining": "Additional parameters, modes, protocol variants, hardware branches and failure paths require source review and independent evidence. Reviewed dimensions contain sampled behavior cases, not exhaustive equivalence."
2409 "remaining": "Sampled UART baud/buffer, device-mode, byte-protocol, hardware-flow and failure cases are reviewed gaps, not exhaustive HAL equivalence. Device subclasses, scheduling, console/stdio, parity/stop bits, port ownership, flush/receive-time bounds, reconnect, platform variants and every remaining library subsystem require deeper review and executable evidence."
24102410 },
24112411 {
24122412 "entry": "ardupilot:libraries/AP_Hott_Telem",
@@ -4307,6 +4307,54 @@
43074307 "url": "https://github.com/PX4/PX4-Autopilot/blob/ddcaad6601be20453ec6acd0f08e567af3a7e1bb/src/drivers/camera_capture/camera_capture_params.yaml",
43084308 "license": "BSD-3-Clause",
43094309 "licenseSource": "https://github.com/PX4/PX4-Autopilot/blob/ddcaad6601be20453ec6acd0f08e567af3a7e1bb/LICENSE"
4310 },
4311 {
4312 "id": "ardupilot:libraries/AP_HAL_Linux/UARTDriver.cpp",
4313 "upstream": "ardupilot",
4314 "path": "libraries/AP_HAL_Linux/UARTDriver.cpp",
4315 "revision": "afeb9c4941543d97f3e04fecf257b8f598f49a6a",
4316 "blobSha": "f253eb8a0881069d281f51e607fed449b764acae",
4317 "sha256": "c2c98f36c32d5425860e665fe3fb44586f3c2e7fd9eccfbdc52b0ef78bb84bbe",
4318 "lines": 452,
4319 "url": "https://github.com/ArduPilot/ardupilot/blob/afeb9c4941543d97f3e04fecf257b8f598f49a6a/libraries/AP_HAL_Linux/UARTDriver.cpp",
4320 "license": "GPL-3.0-or-later",
4321 "licenseSource": "https://github.com/ArduPilot/ardupilot/blob/afeb9c4941543d97f3e04fecf257b8f598f49a6a/COPYING.txt"
4322 },
4323 {
4324 "id": "ardupilot:libraries/AP_HAL_Linux/UARTDriver.h",
4325 "upstream": "ardupilot",
4326 "path": "libraries/AP_HAL_Linux/UARTDriver.h",
4327 "revision": "afeb9c4941543d97f3e04fecf257b8f598f49a6a",
4328 "blobSha": "02a1afba7b88e923ce8fa5e4d6c08f85ad42b714",
4329 "sha256": "f2ac2f2b9966d016621971fcf401820dd49e40f459f40e2a7a55323e6746a6de",
4330 "lines": 105,
4331 "url": "https://github.com/ArduPilot/ardupilot/blob/afeb9c4941543d97f3e04fecf257b8f598f49a6a/libraries/AP_HAL_Linux/UARTDriver.h",
4332 "license": "GPL-3.0-or-later",
4333 "licenseSource": "https://github.com/ArduPilot/ardupilot/blob/afeb9c4941543d97f3e04fecf257b8f598f49a6a/COPYING.txt"
4334 },
4335 {
4336 "id": "ardupilot:libraries/AP_HAL_SITL/UARTDriver.cpp",
4337 "upstream": "ardupilot",
4338 "path": "libraries/AP_HAL_SITL/UARTDriver.cpp",
4339 "revision": "afeb9c4941543d97f3e04fecf257b8f598f49a6a",
4340 "blobSha": "25dd3c45de9f84425e1f6d999f2273a6057032e3",
4341 "sha256": "5a435adbb2c03526aa8746ed53ddf6494edb90f1646d2b0458aa9e832f0577ec",
4342 "lines": 1382,
4343 "url": "https://github.com/ArduPilot/ardupilot/blob/afeb9c4941543d97f3e04fecf257b8f598f49a6a/libraries/AP_HAL_SITL/UARTDriver.cpp",
4344 "license": "GPL-3.0-or-later",
4345 "licenseSource": "https://github.com/ArduPilot/ardupilot/blob/afeb9c4941543d97f3e04fecf257b8f598f49a6a/COPYING.txt"
4346 },
4347 {
4348 "id": "ardupilot:libraries/AP_HAL_SITL/UARTDriver.h",
4349 "upstream": "ardupilot",
4350 "path": "libraries/AP_HAL_SITL/UARTDriver.h",
4351 "revision": "afeb9c4941543d97f3e04fecf257b8f598f49a6a",
4352 "blobSha": "222e63cae9833c1a40cd841b650f4e8ac58804dc",
4353 "sha256": "1ce5a1a8cb8fd86ffb5ebb6e593854915c0768872a61d2581d4d385d40c5bb29",
4354 "lines": 184,
4355 "url": "https://github.com/ArduPilot/ardupilot/blob/afeb9c4941543d97f3e04fecf257b8f598f49a6a/libraries/AP_HAL_SITL/UARTDriver.h",
4356 "license": "GPL-3.0-or-later",
4357 "licenseSource": "https://github.com/ArduPilot/ardupilot/blob/afeb9c4941543d97f3e04fecf257b8f598f49a6a/COPYING.txt"
43104358 }
43114359 ],
43124360 "cases": [
@@ -6337,6 +6385,331 @@
63376385 "The counter decreases on acceptable intervals, so this is not described as 101 consecutive events. This is the input-capture callback path, not a demonstrated guard on the separate GPIO interrupt routine. Owned capture timeouts/lost-ACK models do not establish this interrupt-rate fuse.",
63386386 "No upstream firmware execution, SITL, HIL, physical exposure feedback or executable parity evidence is retained for this gap."
63396387 ]
6388 },
6389 {
6390 "id": "linux-uart-baud-buffer-configuration",
6391 "entry": "ardupilot:libraries/AP_HAL_Linux",
6392 "dimension": "parameters",
6393 "behavior": "Linux HAL baud changes and UART RX/TX ring allocation with 8192-byte RX and 32000-byte TX minimums are not exposed by the owned companion-driver options.",
6394 "support": "unsupported",
6395 "sources": [
6396 {
6397 "source": "ardupilot:libraries/AP_HAL_Linux/UARTDriver.cpp",
6398 "line": 82,
6399 "symbol": "_baudrate != b"
6400 },
6401 {
6402 "source": "ardupilot:libraries/AP_HAL_Linux/UARTDriver.cpp",
6403 "line": 105,
6404 "symbol": "rxS < 8192"
6405 },
6406 {
6407 "source": "ardupilot:libraries/AP_HAL_Linux/UARTDriver.cpp",
6408 "line": 108,
6409 "symbol": "txS < 32000"
6410 }
6411 ],
6412 "evidence": [],
6413 "limitations": [
6414 "Our fixed pending-write capacity does not provide configurable HAL RX/TX rings, baud changes or their clear-buffer semantics.",
6415 "The companion UDP/TCP adapter and scripted peer are not implementations of the upstream HAL UART backend or its raw-byte device contract.",
6416 "This is a sampled source-backed gap, not exhaustive review of this dimension. No upstream firmware SITL, hardware, HIL or vehicle execution is claimed."
6417 ]
6418 },
6419 {
6420 "id": "linux-uart-device-path-server-mode",
6421 "entry": "ardupilot:libraries/AP_HAL_Linux",
6422 "dimension": "modes",
6423 "behavior": "Linux HAL TCP-server wait mode and serial device-path selection are not provided by the companion TCP-client factory.",
6424 "support": "unsupported",
6425 "sources": [
6426 {
6427 "source": "ardupilot:libraries/AP_HAL_Linux/UARTDriver.cpp",
6428 "line": 129,
6429 "symbol": "_parseDevicePath"
6430 },
6431 {
6432 "source": "ardupilot:libraries/AP_HAL_Linux/UARTDriver.cpp",
6433 "line": 195,
6434 "symbol": "bool wait"
6435 },
6436 {
6437 "source": "ardupilot:libraries/AP_HAL_Linux/UARTDriver.cpp",
6438 "line": 196,
6439 "symbol": "TCPServerDevice"
6440 }
6441 ],
6442 "evidence": [],
6443 "limitations": [
6444 "The bench owns a local server as a test peer; that does not expose a vehicle HAL TCP-listener/wait mode. Invalid-path console fallback is not adopted as an owned safety policy.",
6445 "The companion UDP/TCP adapter and scripted peer are not implementations of the upstream HAL UART backend or its raw-byte device contract.",
6446 "This is a sampled source-backed gap, not exhaustive review of this dimension. No upstream firmware SITL, hardware, HIL or vehicle execution is claimed."
6447 ]
6448 },
6449 {
6450 "id": "linux-uart-queued-mavlink-packetisation",
6451 "entry": "ardupilot:libraries/AP_HAL_Linux",
6452 "dimension": "protocols",
6453 "behavior": "MAVLink packetisation of an arbitrary Linux HAL UART write ring into UDP datagrams is not implemented by the companion packet adapter.",
6454 "support": "unsupported",
6455 "sources": [
6456 {
6457 "source": "ardupilot:libraries/AP_HAL_Linux/UARTDriver.cpp",
6458 "line": 183,
6459 "symbol": "_packetise = true"
6460 },
6461 {
6462 "source": "ardupilot:libraries/AP_HAL_Linux/UARTDriver.cpp",
6463 "line": 341,
6464 "symbol": "mavlink_packetise"
6465 },
6466 {
6467 "source": "ardupilot:libraries/AP_HAL_Linux/UARTDriver.cpp",
6468 "line": 351,
6469 "symbol": "_writebuf.peekbytes"
6470 }
6471 ],
6472 "evidence": [],
6473 "limitations": [
6474 "Encoding one bounded MAVLink frame per companion datagram is narrower than packetising and advancing a HAL byte ring with compile-conditional GCS support.",
6475 "The companion UDP/TCP adapter and scripted peer are not implementations of the upstream HAL UART backend or its raw-byte device contract.",
6476 "This is a sampled source-backed gap, not exhaustive review of this dimension. No upstream firmware SITL, hardware, HIL or vehicle execution is claimed."
6477 ]
6478 },
6479 {
6480 "id": "linux-uart-physical-parity-flow-control",
6481 "entry": "ardupilot:libraries/AP_HAL_Linux",
6482 "dimension": "hardware",
6483 "behavior": "Configurable Linux HAL character-device UART parity and hardware flow-control APIs are not exposed by the owned packet-driver factories.",
6484 "support": "unsupported",
6485 "sources": [
6486 {
6487 "source": "ardupilot:libraries/AP_HAL_Linux/UARTDriver.cpp",
6488 "line": 133,
6489 "symbol": "S_ISCHR"
6490 },
6491 {
6492 "source": "ardupilot:libraries/AP_HAL_Linux/UARTDriver.cpp",
6493 "line": 417,
6494 "symbol": "configure_parity"
6495 },
6496 {
6497 "source": "ardupilot:libraries/AP_HAL_Linux/UARTDriver.h",
6498 "line": 37,
6499 "symbol": "set_flow_control"
6500 }
6501 ],
6502 "evidence": [],
6503 "limitations": [
6504 "No tty wiring, RTS/CTS electrical behavior, kernel termios configuration or hardware parity evidence is established by loopback TCP tests.",
6505 "The companion UDP/TCP adapter and scripted peer are not implementations of the upstream HAL UART backend or its raw-byte device contract.",
6506 "This is a sampled source-backed gap, not exhaustive review of this dimension. No upstream firmware SITL, hardware, HIL or vehicle execution is claimed."
6507 ]
6508 },
6509 {
6510 "id": "linux-uart-deferred-open-byte-continuation",
6511 "entry": "ardupilot:libraries/AP_HAL_Linux",
6512 "dimension": "failures",
6513 "behavior": "Linux HAL deferred device open and scheduled continuation of queued raw UART bytes after zero or short writes are not implemented as a companion-driver lifecycle.",
6514 "support": "unsupported",
6515 "sources": [
6516 {
6517 "source": "ardupilot:libraries/AP_HAL_Linux/UARTDriver.cpp",
6518 "line": 309,
6519 "symbol": "if (!_connected)"
6520 },
6521 {
6522 "source": "ardupilot:libraries/AP_HAL_Linux/UARTDriver.cpp",
6523 "line": 310,
6524 "symbol": "_device->open"
6525 },
6526 {
6527 "source": "ardupilot:libraries/AP_HAL_Linux/UARTDriver.cpp",
6528 "line": 363,
6529 "symbol": "_writebuf.advance"
6530 },
6531 {
6532 "source": "ardupilot:libraries/AP_HAL_Linux/UARTDriver.cpp",
6533 "line": 366,
6534 "symbol": "ret != vec[i].len"
6535 }
6536 ],
6537 "evidence": [],
6538 "limitations": [
6539 "The owned TCP adapter fails the session on loss or output pressure and requires deliberate reconciliation before a fresh connection. That is not upstream HAL queued-byte continuation and must not silently replay commands.",
6540 "The companion UDP/TCP adapter and scripted peer are not implementations of the upstream HAL UART backend or its raw-byte device contract.",
6541 "This is a sampled source-backed gap, not exhaustive review of this dimension. No upstream firmware SITL, hardware, HIL or vehicle execution is claimed."
6542 ]
6543 },
6544 {
6545 "id": "sitl-uart-configured-baud-budget",
6546 "entry": "ardupilot:libraries/AP_HAL_SITL",
6547 "dimension": "parameters",
6548 "behavior": "SITL telemetry baud-limit enablement with independent byte budgets for UART reads and writes is not provided by the companion protocol bench.",
6549 "support": "unsupported",
6550 "sources": [
6551 {
6552 "source": "ardupilot:libraries/AP_HAL_SITL/UARTDriver.cpp",
6553 "line": 1043,
6554 "symbol": "telem_baudlimit_enable"
6555 },
6556 {
6557 "source": "ardupilot:libraries/AP_HAL_SITL/UARTDriver.cpp",
6558 "line": 1046,
6559 "symbol": "baud_limits.write.max_bytes"
6560 },
6561 {
6562 "source": "ardupilot:libraries/AP_HAL_SITL/UARTDriver.cpp",
6563 "line": 1149,
6564 "symbol": "baud_limits.read.max_bytes"
6565 }
6566 ],
6567 "evidence": [],
6568 "limitations": [
6569 "A 25 ms protocol poll and requested MAVLink message interval are not UART baud emulation, serial throughput identification or delivery-rate evidence.",
6570 "The companion UDP/TCP adapter and scripted peer are not implementations of the upstream HAL UART backend or its raw-byte device contract.",
6571 "This is a sampled source-backed gap, not exhaustive review of this dimension. No upstream firmware SITL, hardware, HIL or vehicle execution is claimed."
6572 ]
6573 },
6574 {
6575 "id": "sitl-uart-timestamped-csv-mode",
6576 "entry": "ardupilot:libraries/AP_HAL_SITL",
6577 "dimension": "modes",
6578 "behavior": "The SITL logic_async_csv raw serial-byte replay mode with capture-time scheduling is not implemented by owned sensor or diagnostic replay.",
6579 "support": "unsupported",
6580 "sources": [
6581 {
6582 "source": "ardupilot:libraries/AP_HAL_SITL/UARTDriver.cpp",
6583 "line": 198,
6584 "symbol": "logic_async_csv"
6585 },
6586 {
6587 "source": "ardupilot:libraries/AP_HAL_SITL/UARTDriver.cpp",
6588 "line": 935,
6589 "symbol": "read_from_async_csv"
6590 },
6591 {
6592 "source": "ardupilot:libraries/AP_HAL_SITL/UARTDriver.cpp",
6593 "line": 951,
6594 "symbol": "data_timestamp_us > emit_timestamp_us"
6595 }
6596 ],
6597 "evidence": [],
6598 "limitations": [
6599 "Existing owned structured sensor/journal replays do not consume this UART CSV format, its startup delay or its malformed-record behavior.",
6600 "The companion UDP/TCP adapter and scripted peer are not implementations of the upstream HAL UART backend or its raw-byte device contract.",
6601 "This is a sampled source-backed gap, not exhaustive review of this dimension. No upstream firmware SITL, hardware, HIL or vehicle execution is claimed."
6602 ]
6603 },
6604 {
6605 "id": "sitl-uart-simulated-serial-device-dispatch",
6606 "entry": "ardupilot:libraries/AP_HAL_SITL",
6607 "dimension": "protocols",
6608 "behavior": "SITL UART dispatch to GPS1/GPS2, ADSB and selected simulated serial devices is not implemented by the companion MAVLink transport.",
6609 "support": "unsupported",
6610 "sources": [
6611 {
6612 "source": "ardupilot:libraries/AP_HAL_SITL/UARTDriver.cpp",
6613 "line": 87,
6614 "symbol": "create_serial_sim"
6615 },
6616 {
6617 "source": "ardupilot:libraries/AP_HAL_SITL/UARTDriver.cpp",
6618 "line": 121,
6619 "symbol": "create_serial_sim"
6620 },
6621 {
6622 "source": "ardupilot:libraries/AP_HAL_SITL/UARTDriver.cpp",
6623 "line": 152,
6624 "symbol": "create_serial_sim"
6625 }
6626 ],
6627 "evidence": [],
6628 "limitations": [
6629 "The cited lines establish device dispatch, not a reviewed inventory of each generated GPS or sensor wire dialect. Those simulator implementations require deeper review.",
6630 "The companion UDP/TCP adapter and scripted peer are not implementations of the upstream HAL UART backend or its raw-byte device contract.",
6631 "This is a sampled source-backed gap, not exhaustive review of this dimension. No upstream firmware SITL, hardware, HIL or vehicle execution is claimed."
6632 ]
6633 },
6634 {
6635 "id": "sitl-uart-cts-auto-flow-control",
6636 "entry": "ardupilot:libraries/AP_HAL_SITL",
6637 "dimension": "hardware",
6638 "behavior": "SITL real-UART CTS checking and AUTO hardware-flow-control detection/fallback are not exposed by the companion TCP adapter.",
6639 "support": "unsupported",
6640 "sources": [
6641 {
6642 "source": "ardupilot:libraries/AP_HAL_SITL/UARTDriver.cpp",
6643 "line": 262,
6644 "symbol": "CRTSCTS"
6645 },
6646 {
6647 "source": "ardupilot:libraries/AP_HAL_SITL/UARTDriver.cpp",
6648 "line": 1085,
6649 "symbol": "TIOCMGET"
6650 },
6651 {
6652 "source": "ardupilot:libraries/AP_HAL_SITL/UARTDriver.cpp",
6653 "line": 1086,
6654 "symbol": "TIOCM_CTS"
6655 },
6656 {
6657 "source": "ardupilot:libraries/AP_HAL_SITL/UARTDriver.cpp",
6658 "line": 1108,
6659 "symbol": "500U"
6660 },
6661 {
6662 "source": "ardupilot:libraries/AP_HAL_SITL/UARTDriver.cpp",
6663 "line": 1111,
6664 "symbol": "FLOW_CONTROL_DISABLE"
6665 }
6666 ],
6667 "evidence": [],
6668 "limitations": [
6669 "Software socket pressure is distinct from serial RTS/CTS electrical state. Upstream AUTO can disable flow control after its 500 ms detection condition; our TCP pressure deadline does not reproduce this policy.",
6670 "The companion UDP/TCP adapter and scripted peer are not implementations of the upstream HAL UART backend or its raw-byte device contract.",
6671 "This is a sampled source-backed gap, not exhaustive review of this dimension. No upstream firmware SITL, hardware, HIL or vehicle execution is claimed."
6672 ]
6673 },
6674 {
6675 "id": "sitl-uart-hidden-byte-loss-injection",
6676 "entry": "ardupilot:libraries/AP_HAL_SITL",
6677 "dimension": "failures",
6678 "behavior": "SITL UART can omit at most one byte per write under its configured loss test while counting that byte as transmitted; the companion bench has no equivalent raw-byte loss injector.",
6679 "support": "unsupported",
6680 "sources": [
6681 {
6682 "source": "ardupilot:libraries/AP_HAL_SITL/UARTDriver.cpp",
6683 "line": 335,
6684 "symbol": "lost_byte = 0"
6685 },
6686 {
6687 "source": "ardupilot:libraries/AP_HAL_SITL/UARTDriver.cpp",
6688 "line": 340,
6689 "symbol": "uart_byte_loss_pct"
6690 },
6691 {
6692 "source": "ardupilot:libraries/AP_HAL_SITL/UARTDriver.cpp",
6693 "line": 341,
6694 "symbol": "lost_byte = 1"
6695 },
6696 {
6697 "source": "ardupilot:libraries/AP_HAL_SITL/UARTDriver.cpp",
6698 "line": 347,
6699 "symbol": "_tx_stats_bytes += lost_byte"
6700 },
6701 {
6702 "source": "ardupilot:libraries/AP_HAL_SITL/UARTDriver.cpp",
6703 "line": 349,
6704 "symbol": "size - lost_byte"
6705 }
6706 ],
6707 "evidence": [],
6708 "limitations": [
6709 "Dropping one whole COMMAND_ACK and corrupting framing fixtures do not reproduce the upstream per-write loss probability, raw-byte removal or transmitted-byte accounting. This source does not establish independent loss sampling for every byte.",
6710 "The companion UDP/TCP adapter and scripted peer are not implementations of the upstream HAL UART backend or its raw-byte device contract.",
6711 "This is a sampled source-backed gap, not exhaustive review of this dimension. No upstream firmware SITL, hardware, HIL or vehicle execution is claimed."
6712 ]
63406713 }
63416714 ]
63426715}
docs/parity.mdmodified+18-3
Changes to docs/parity.md
@@ -3,10 +3,10 @@
33The executable audit accounts for the 274 pinned PX4 module/driver and ArduPilot library directories
44and six ArduPilot vehicle programs. Directory assignment is work ownership. It is not feature parity.
55
6The retained matrix is [parity-audit.json](https://github.com/stacksjs/drone/blob/main/docs/parity-audit.json). It currently contains **79 behavior
6The retained matrix is [parity-audit.json](https://github.com/stacksjs/drone/blob/main/docs/parity-audit.json). It currently contains **89 behavior
77cases**, including **26 bounded support claims** backed by **25 distinct executable test selectors**
8and **53 explicitly unsupported cases**. There are **1,327 unclassified detail dimensions**.
9The audit retains **42 pinned source records**. No upstream firmware SITL, HIL or physical-vehicle
8and **63 explicitly unsupported cases**. There are **1,317 unclassified detail dimensions**.
9The audit retains **46 pinned source records**. No upstream firmware SITL, HIL or physical-vehicle
1010validation is claimed by this audit.
1111
1212Every assignment classifies parameters, modes, protocols, hardware and failures separately. A
@@ -124,6 +124,21 @@ not prove hardware enablement. Board wiring, electrical/timing calibration, PPS/
124124queue/restart behavior remain deeper work. The owned IMX500 first-row metadata, scoped capture
125125ACK/pose association and modeled shutter remain separate capabilities, with no new parity claim.
126126
127Ten further unsupported cases sample pinned ArduPilot Linux and SITL HAL UART behavior. They cover
128baud and buffer budgets, TCP server and CSV replay modes, raw-byte packetisation and simulated-device
129dispatch, parity and CTS/AUTO flow control, deferred open/short-write continuation, and hidden byte-loss
130injection. Four new source records retain 35 exact line/symbol anchors. The prior 79 cases, 42 sources,
13126 bounded claims and 25 selectors remain unchanged. Both HAL directories remain owned by runtime
132issue #2 and retain deeper review work in all five sampled dimensions.
133
134The companion TCP client is distinct from those HAL backends. Its 4 KiB stream watermark and 16 KiB
135outstanding-write cap do not implement configurable UART rings, hardware parity, electrical RTS/CTS,
136raw serial replay or automatic queued-byte continuation. Upstream's SITL loss injector can omit at
137most one byte per write while counting it as transmitted; this is distinct from dropping an entire
138ACK or independently sampling every byte. The reviewed source establishes dispatch to simulated
139serial devices, not full review of each generated sensor dialect. No new executable support or
140upstream firmware execution is claimed by these ten cases.
141
127142Unreviewed parameters, full firmware mode sets, serial/CAN/electrical variants, redundant estimators,
128143real output paths, simulator campaigns and hardware evidence remain visible gaps owned by their
129144implementation issues.
docs/roadmap/issues.jsonmodified+2-2
Changes to docs/roadmap/issues.json
@@ -865,7 +865,7 @@
865865 "implementationStatus": "behavior-audit-in-progress",
866866 "implemented": [
867867 "Pinned directory and six-vehicle-family assignments with per-dimension reviewed/unclassified status",
868 "59 source-backed behavior cases, bounded subset claims and explicit unsupported behaviors",
868 "89 source-backed behavior cases, bounded subset claims and explicit unsupported behaviors",
869869 "Executable evidence selectors, pinned source hash/license/citation verification, issue link checks and upstream snapshot refresh/diff gates"
870870 ],
871871 "evidence": [
@@ -876,7 +876,7 @@
876876 "docs/parity.md"
877877 ],
878878 "remaining": [
879 "Complete 1,347 currently unclassified parameter/mode/protocol/hardware/failure dimensions and deeper review inside sampled dimensions",
879 "Complete 1,317 currently unclassified parameter/mode/protocol/hardware/failure dimensions and deeper review inside sampled dimensions",
880880 "Expand executable coverage from bounded subsets to behavior-level parity with retained firmware/SITL/HIL/vehicle evidence"
881881 ]
882882 },