Original hardening plan, rewritten
This chapter preserves the intent of the original long audit plan without copying it as a wall of raw notes. It is useful when you want to understand why the hardening work was shaped the way it was.
Why the plan was needed
The project was translated from a C++ ISOBUS-oriented codebase. That made the initial Rust tree useful, but not automatically trustworthy. Translation can preserve names while losing invariants, tests, error handling, byte-exact behavior, or the distinction between “implemented” and “proven”.
The original plan therefore asked for hardening in every direction:
- protocol byte correctness;
- stack state-machine behavior;
- binding safety;
- examples that actually run;
- release gates;
- evidence wording;
- hardware and independent-peer capture path.
Original risk themes
| Risk | Why it mattered | Current response |
|---|---|---|
| Wire-format drift | ISOBUS/J1939/NMEA behavior depends on exact bytes, sentinels, bit fields, padding, and PGNs. | Fixture tests, property tests, malformed-input corpora, protocol matrix. |
| State-machine gaps | Address claim, TP, VT, TC, diagnostics, and TIM all have ordering and timeout behavior. | Virtual-bus tests and focused stack tests. |
| Binding unsafety | C and Python can accidentally expose invalid lifetimes or untested calls. | Opaque handles, ABI versioning, binding regression tests, C demos. |
| Example rot | Examples often compile only in the happy local environment. | Make targets for C, Python, SocketCAN examples, and trace replay. |
| Evidence overreach | Local tests are not the same as external certification or machine safety evidence. | Originally claim-boundary tests; those governance tests were removed (see validation-history.md), so the claim boundary is now maintained by hand as a convention together with this documentation set. |
| Release drift | Version numbers, generated headers, package contents, docs, and fixtures can diverge. | Release checklist plus generated C header drift check; the earlier package-contents gate was removed and package contents are now maintained by hand as a convention. |
What changed from raw audit notes
The original document mixed observations, to-do items, command transcripts, and spec reminders. That was useful for active triage, but poor documentation.
The book now separates those concerns:
- concepts and tutorials explain how to use the library;
protocol-coverage.mdsummarizes current protocol evidence;hardware-evidence.mdexplains how to add trace-backed evidence;validation-history.mdrecords the make gates and latest counts;release.mdexplains how to tag responsibly;audit/bindings.mdcaptures binding ownership and facade rules;audit/conformance.mdcaptures the public claim boundary.
What remains open
The important unfinished work is still the same:
- run real vcan captures and check them in as reduced traces with reports;
- run isolated physical-bus captures for the required flows;
- add independent-peer evidence for VT, TC, File Server, Section Control, TIM, diagnostics, and transport workflows;
- keep expanding fixture coverage for malformed and boundary inputs;
- keep C and Python bindings aligned with tested Rust behavior;
- keep docs, tests, package metadata, and release notes synchronized.
Use this page as history. Use the other reference pages as the current working instructions.