EDS ↔ SDO-dump verification

The CI-friendly cross-check (canopen-eds-verify (BB_0087)): parse an EDS file and a captured SDO-upload JSON dump from a real node, then diff the two on identity, declared PDO maps, and PDO communication parameters.

Feature: EDS ↔ SDO-dump verification FEAT_0068
status: open
satisfies: FEAT_0060
is refined by: ADR_0086
is implemented by: BB_0087

A CI-friendly cross-check: parse an EDS file and a captured SDO-upload JSON dump from a real node, then diff the two on identity, declared PDO maps, and PDO communication parameters. Catches the “vendor shipped a buggy EDS” failure class at build time rather than during cyclic operation. Offline-only this round — live-bus verification is out of scope per NO live-bus verifier this r... (REQ_0797).

Requirement: Verifier ingests EDS plus JSON SDO-dump REQ_0780
status: open
satisfies: FEAT_0068
is verified by: TEST_0670

canopen-eds-verify shall expose fn verify(eds: &str, dump: &SdoDump) -> Result<VerifyReport, VerifyError> that parses both inputs and compares them on: Identity (vendor / product / revision from OD index 0x1018:01..03), the declared PDO map index list per direction and the entries within each declared mapping, PDO communication parameters (transmission type, cob-id, event timer), and device-type at OD index 0x1000.

Requirement: Diagnostic output names the differing field REQ_0781
status: open
satisfies: FEAT_0068
is verified by: TEST_0671

When a verification fails, the VerifyReport shall name each differing field with both the EDS-side and dump-side values (e.g. Identity.product_code: eds=0x60900000 dump=0x60910000) rather than reporting only “mismatch”.

Requirement: Verifier reuses the parser REQ_0782
status: open
satisfies: FEAT_0068
is verified by: TEST_0672

The verifier shall consume the same EdsFile IR produced by EDS parser (FEAT_0062) and shall not maintain a second parse path. JSON SDO-dump decoding lives inside the verifier crate. The verifier shall not depend on canopen-eds-codegen, canopen-eds-rt, or taktora-connector-can.

Requirement: Verifier exits non-zero on mismatch REQ_0783
status: open
satisfies: FEAT_0068
is verified by: TEST_0673

When invoked as a binary (canopen-eds-verify <eds> <dump.json>), the verifier shall exit 0 on match, 1 on any field mismatch, and 2 on parse or I/O errors. CI gates may then cargo run -p canopen-eds-verify -- ... as a pre-merge check.

Requirement: SDO-dump JSON schema versioned REQ_0784
status: open
satisfies: FEAT_0068
is verified by: TEST_0674

The SDO-dump file format shall be versioned via a top-level schema field carrying the string taktora.canopen.sdo-dump.v1. Unknown schema strings shall be rejected with a parse error before any field comparison runs (per JSON SDO-dump format with v... (ADR_0086)).