Skip to content

Production checklist

Work through this list before letting the RFID system write real stock numbers. The reviewer is usually the integration lead, joined by whoever owns the site for the radio and hardware items; any item that fails gets recorded, assigned, and rechecked on a date. When every box is ticked, both sides sign off, and from that point the numbers the readers push are treated as real.

The list follows the journey into production:

SDK and the read path

This group makes sure your code stands up to the things that will certainly happen: pulled cables, restarts, data arriving in bursts.

  • Record each reader's model and firmware version in the deployment record.
  • Pin the SDK package version in your dependencies; never let a new release drift into production.
  • Put the integration under automated tests in CI, instead of relying on manual runs against a live reader.
  • Run one full cycle: start the inventory, receive tags in the callback, stop cleanly, and start again immediately.
  • If you wrote your own receive loop in Go, Rust, or C++, test it against glued-together and cut-off data per the receive loop appendix.
  • Give every command a timeout, a retry policy, and an error mapping; surface every error notification to monitoring instead of swallowing it in logs.
  • Change application state only after the reader confirms a command succeeded.
  • Make stop and disconnect drain pending data, and stay safe when called twice in a row.

Transport and runtime

The serial line is where every physical mishap lands, so this group is all "someone pulled the wrong cable" scenarios.

  • Install the CP210x driver on every machine that will talk to a reader, and bake it into the deployment image.
  • Handle and test automatic reconnection after a pulled cable or a reader reboot.
  • For Web Serial: run in a secure context, request the port from a user gesture, and release both the reader and writer locks during cleanup.
  • Apply backpressure and bounded buffers so memory does not balloon under high read density.
  • Let exactly one component own the serial port, and serialize every write through it.
  • Clean up threads, listeners, intervals, and abort handlers on shutdown; in Python, join the inventory thread before exiting.

Radio and regulation

Radio is regulated per country, and real sites behave nothing like the lab. Review this group together with the site owner.

  • Verify the deployment country's current rules on frequency, hopping, power, and duty cycle, see the glossary.
  • Set the RF band and channel list deliberately; never leave the factory defaults in place.
  • Log the query_rfid_ability result and confirm configured power sits inside the range the device reports.
  • Survey on site: antenna ports, cable loss, polarization, and the real read zone.
  • Start at low power and raise it only until the required zone is covered, no further.
  • Coordinate neighboring readers and explicitly test reads bleeding into the adjacent area.
  • Measure performance with real products, packaging, density, and motion, not with bare tags on a desk.

Tag data handling

This group keeps the tag event stream clean before it touches the stock ledger, following the three layers in Reading tags and deduplication.

  • Normalize and validate EPC hex before it enters business logic.
  • Deduplicate raw reads by EPC over a time window you state explicitly in the design.
  • Tune the reader-side filter (set_filter_settings) to the business event, not to the maximum read rate.
  • Keep the reader id, antenna id, RSSI, frequency, and host receive time on every event.
  • Make the application logic idempotent: replaying the same read must not create another stock movement.
  • Quarantine unknown or unassigned EPCs; never accept them silently.
  • Timestamp events with the host clock at receive time, and state that convention in the design.

Encoding and writing tags

Writing a tag is a one-way operation on hardware, so every item here points at one word: certainty.

  • Take the GS1 Company Prefix, scheme, and partition from an authoritative source, see EPC encoding.
  • Run the encoder and decoder through GS1 reference vectors and round-trip tests.
  • Run validate_epc_hex or an equivalent check before every write.
  • Singulate the target tag before writing; blind-write only where exactly one tag can possibly be in the zone.
  • Read back and compare after every write, with check_write_epc or your own verification.
  • Wrap the kill command in managerial approval and a confirmation step, because it cannot be undone.

Security and operations

Running well in week one proves nothing; this group looks after month six.

  • Restrict device configuration rights and audit the changes.
  • Turn debug-level logging off in production: debug logs record raw tag data, which means EPCs leak into log files.
  • Mask credentials, passwords, and sensitive product or customer identifiers in logs.
  • Make SDK, firmware, and configuration versions deploy and roll back together as one unit.
  • Monitor the full set: connection health, transmission errors, command latency, read rate, unique EPC rate, and dropped events.
  • Write runbooks for the standard incidents: reader offline, flaky reads, duplicate surges, wrong frequency region, and bad tag writes.
  • Separate test readers, test warehouses, and test tags from production stock.

The minimum automated test set

Before sign-off, the integration's test suite should cover these situations; the reference vectors ship with the SDK repository under sdk/nation/testdata/:

  • Open the port, write, receive, close, and pull the cable mid-read.
  • Reader data cut off mid-message, and several notifications glued into one read.
  • Corrupt data, commands unanswered until timeout, and error notifications from the reader.
  • Start and stop safe under repeated calls, and concurrent commands serialized.
  • Duplicate EPCs and events arriving out of order.
  • EPC edge values: leading zeros, invalid partitions, and numeric overflow.
  • Integration tests run against every firmware version you support.

Easy Inventory operations and RFID integration documentation