Anti-goals and cross-cutting traceability¶
The following requirements are explicitly rejected — captured for
the record so future readers see what the toolchain deliberately does
not do, and why. Each rejected requirement :satisfies:
Device-driver codegen toolc... (FEAT_0050) to keep the umbrella’s traceability complete.
The toolchain shall not include a CAN parser, a CANopen
runtime trait, an EDS / XDD reader, or a SocketCAN backend.
CANopen and EtherCAT’s CoE share the Object Dictionary
semantics, but transport semantics diverge (cyclic PDI vs
event-driven frames). A follow-on spec extracts a shared
|
The toolchain shall not offer an |
When CANopen support is added in a follow-on spec, the runtime
trait family shall not be merged with |
The toolchain shall not parse ESI XML at application
runtime. All XML parsing happens at build time in
|
This spec shall not require any change to the runtime
contracts of EtherCAT reference connector (FEAT_0041) “EtherCAT reference connector”.
The connector consumes |
The toolchain shall not download, scrape, or otherwise
fetch ESI XML from vendor websites or update servers. ESI files
are inputs the user drops into a |
Cross-cutting traceability¶
Every requirement in this chapter (excluding rejected anti-goals)
carries a :satisfies: link to its capability-cluster feat; every
cluster feat :satisfies: Device-driver codegen toolc... (FEAT_0050). Architectural
specifications refining these requirements are emitted in
Device-driver codegen — architecture (arc42). Verification artefacts are
emitted in Device-driver codegen — verification.
ID |
Title |
Status |
Satisfies |
|---|---|---|---|
Device-driver codegen toolchain |
open |
||
ESI parser |
implemented |
||
IR and codegen backend trait |
open |
||
ethercrab codegen backend |
open |
||
Runtime trait surface |
open |
||
Build helper (build.rs glue) |
open |
||
CLI inspection (cargo subcommand) |
open |
||
EEPROM diff verification |
open |
ID |
Title |
Status |
Satisfies |
|---|---|---|---|
Pure parse function with no I/O |
implemented |
||
no_std + alloc compatible |
rejected |
||
quick-xml + serde backend |
implemented |
||
Parser does not depend on ethercrab or codegen |
implemented |
||
IR carries identity, PDO maps, mailbox, DC, and OD |
implemented |
||
Vendor-specific extensions captured as opaque blobs |
implemented |
||
Parse errors carry line and column |
implemented |
||
CodegenBackend trait shape |
open |
||
Naming policy is owned by codegen, not the backend |
open |
||
Revision collision handled deterministically |
open |
||
Common PDO entry types deduplicated |
open |
||
Emission target is proc_macro2 TokenStream |
open |
||
Backend crate is the sole ethercrab dependency |
open |
||
One device struct per ESI device entry |
open |
||
Identity const emitted per device |
open |
||
Selectable PDO assignments emitted as a joint per-device OpMode enum |
implemented |
||
Each OpMode variant carries a per-mode inputs/outputs data struct |
implemented |
||
Generated module root exposes a registry |
open |
||
Generated code compiles under no_std + alloc |
open |
||
Default PDO assignment derived from Sm/Mandatory, not Fixed |
implemented |
||
Per-active-mode Rx/Tx PDO-index lists exposed for 0x1C12/0x1C13 |
implemented |
||
AlternativeSmMapping captured faithfully, never resolved |
implemented |
||
EsiDevice trait shape |
open |
||
EsiConfigurable trait shape for preop bring-up |
open |
||
Traits live in ethercat-esi-rt, not taktora-connector |
open |
||
Object dictionary emission is a default-off cargo feature |
open |
||
Process image access via bitvec BitSlice |
open |
||
SdoWrite abstraction keeps ethercrab out of the trait crate |
open |
||
Builder API shape |
open |
||
Output written to OUT_DIR |
open |
||
Cargo rerun-if directives emitted per ESI input |
open |
||
Generated output passes through prettyplease |
open |
||
cargo esi expand emits one device's generated code |
open |
||
cargo esi list enumerates devices in a glob |
open |
||
CLI shares the parser and codegen crates |
open |
||
Verifier ingests ESI XML plus SII binary |
open |
||
Diagnostic output names the differing field |
open |
||
Verifier reuses the parser |
open |
||
Verifier exits non-zero on mismatch |
open |
||
NO CAN / CANopen / EDS support in this round |
rejected |
||
NO proc-macro front-end |
rejected |
||
NO unification of EtherCAT and CANopen runtime traits |
rejected |
||
NO runtime XML parsing |
rejected |
||
NO modification of taktora-connector-ethercat runtime |
rejected |
||
NO automatic vendor library scraping |
rejected |