Version History¶
This document tracks the version history of GateKeeper Conveyor releases. Versions are listed most recent first.
Note: Starting with v1.7, versions use unified numbering (e.g.,
v1.7,v1.8) across all sites. Older versions used site-prefixed tags (e.g.,teasdale-v1.0,beloit-v0.136).
Currently Deployed Versions¶
| Site | Version | Status | Date |
|---|---|---|---|
| Teasdale Carrollton (Line 7 & 9) | teasdale-v1.0 | Active | 2026-01-21 |
| Hormel Austin | hormel-v1.0 | Active | 2025-12 |
| Hormel Beloit | beloit-v0.136 | Active | 2026-01-23 |
| Hormel Barron | teguar-v0.118 | Active | 2025-12-29 |
| Cargill Hersey | hersey-v0.114 | Active | 2025-12 |
| Cargill St. Clair | v1.9 | Active | 2026-02-12 |
| Cargill Oil - Sidney | v1.9 | Active | 2026-02-12 |
| Cargill Oil - Gainesville | cargilloil-v1.1 | Pending v1.9 (Cargill approval) | 2026-02-06 |
| Cargill Oil - Fullerton | cargilloil-v1.1 | Pending v1.9 (Cargill approval) | 2026-02-06 |
| Zebra Futures Lab | zfl-v0.113 | Active | 2025-12 |
Version Details¶
v1.9¶
Released: 2026-02-12 Sites deployed: Sidney, St. Clair | Pending: Gainesville, Fullerton (awaiting Cargill approval) Key change: JSON noise filtering in CognexDataListener + CargillRfid validation results display
What changed:
- Fixed critical bug where only the first case would validate at Sidney after v1.8 deployment. Root cause: Cognex comm script v1.2 sends JSON responses (digitalRead state changes, setTrigger echoes) back through the same TCP port 3000 data stream as barcode data. The CognexDataListener was treating these JSON messages as barcode data, corrupting the message processing pipeline.
- Added IsJsonNoise() filter in CognexDataListener that detects and silently discards single-line JSON messages (e.g., {"cmd":"digitalRead","port":0,"state":1}) before they reach barcode parsing. Multi-line data containing \n is never filtered (barcode data uses \n as a line separator).
- Added CargillRfid to the validation results display in the main UI. Previously, CargillRfid sites would not show per-case validation details on screen.
- 14 new unit tests for CognexDataListener JSON noise filtering.
Discovered at: Cargill Oil Sidney during v1.8 pilot deployment (2026-02-11). First case validated successfully, then all subsequent cases failed because JSON noise accumulated in the message buffer.
Comm script note: This fix is required for any site running comm script v1.2+ (which sends JSON responses). Sites without the v1.2 comm script are unaffected since no JSON is sent through port 3000.
v1.8¶
Released: 2026-02-10 Sites affected: All (codebase-wide fix) Key change: Stale TCP buffer drain before every camera trigger
What changed:
- Fixed critical startup validation failure: When the photo-eye is wired to the camera hardware trigger input, the camera fires unsolicited NOREAD responses on port 23 while GateKeeper is idle. Over hours, the TCP receive buffer fills with stale data. On first Trigger(), ReceiveResponse() reads stale data instead of fresh results, returning 0 barcodes and failing validation.
- DrainReceiveBuffer() is now called at the top of every Trigger() method, inside the connection lock, clearing stale data before sending the TRIGGER command.
- Added PersistValidationResults config setting (default: true). When set to false, skips synchronous JsonFileRepository.Add() file write per case. Used for high-throughput AV50 sites (Beloit).
- Beloit config tuned for 85+ CPM: lockout 400→250ms, aggregation 200→150ms, PersistValidationResults=false.
Discovered at: Cargill Oil Fullerton and Gainesville. At Fullerton, restart fixed it (clean buffer, no immediate cases). At Gainesville, restart did NOT fix it because cases were continuously flowing.
v1.7¶
Released: 2026-02-09 Sites affected: All sites with Cognex DataMan cameras Key change: Camera trigger gating + unified versioning
What changed:
- Camera trigger gating: SetTriggerEnabled(bool) on ICamera disables Cognex hardware trigger when validation is off, preventing camera from flashing on every photo-eye trigger. Requires camera comm script v1.2+.
- Added TriggerInputId and TriggerActionId to CameraConfiguration for per-site trigger I/O configuration.
- Unified version numbering: dropped site-prefix tags (e.g., teasdale-v1.6) in favor of single version number.
- DS9908 Push mode regression fix: Teasdale Line 7 counting regression fixed — camera-type-aware subscription via UsesCognexDataListener().
cargilloil-v1.1¶
Released: 2026-02-06 Sites affected: Sidney, Gainesville, Fullerton (Cargill Oil) Mode: CargillRfid (migrated from Chipotle)
What changed: - Fixed critical bug: RFID polling was not starting in CargillRfid mode. Only Chipotle mode had been configured to start RFID monitoring, so migrating from Chipotle to CargillRfid caused all validations to fail with "No matching RFID data." - This fix resolved four visible symptoms at once: no RFID data, all cases failing validation, stack light not turning red on failure, and scan info not showing on screen. - Fixed camera log noise: non-validated product was generating parse warnings in the log when validation was OFF. Added a flag to suppress logging during idle periods.
Root cause: A 2025 commit restricted RFID polling to Chipotle mode only. When CargillRfid mode was added later, the RFID polling conditions were not updated.
cargilloil-v1.0¶
Released: 2026-02-05 Sites affected: Sidney, Gainesville, Fullerton (Cargill Oil) Mode: CargillRfid (migrated from Chipotle)
What changed: - Migrated Cargill Oil sites from Chipotle validation mode to CargillRfid mode. - Validation logic is identical between the two modes (same 9 checks, same order). - Initial deployment uses AIS export only. Mojix/MWE export planned for Phase 2 when firewall access is resolved. - CargillRfid:ExpirationTolerance must match the previous Chipotle:ExpirationTolerance value.
teasdale-v1.0¶
Released: 2026-01-21 Sites affected: Teasdale Carrollton (Line 7, Line 9) Mode: Teasdale
What changed:
- Per-pallet Deacom export (changed from per-case to per-pallet): {"jobID": xxx, "rfidQty": xxx, "epcs": [...]}
- Statistics and validation history now cleared when job completes.
- All gateway fields from import JSON passed through to BarTender labels automatically via GatewayExtras.
- Fixed duplicate EPC across pallets (list was clearing on pallet completion instead of job completion).
- Fixed result display not clearing when job completed.
- Added midnight rollover heartbeat logging for troubleshooting.
Previous fixes (2026-01-16): - Fixed pallet skip (double-advance) bug where scanning during the pallet completion dialog caused pallets to be skipped. Only 11-13 of 21 pallets could be validated before job showed complete. - Added System Health Monitor (background hardware connectivity monitoring every 5 seconds). - Added Config Audit Service (tracks appsettings.json changes).
Previous enhancements (2026-01-14): - Enlarged scan progress indicators and action buttons for better touch interaction. - Pause/Resume Job with state persistence across application restarts. - Historical validation deselection fix. - Midnight rollover with 1-minute periodic clock check.
beloit-v0.136¶
Released: 2026-01-23 Sites affected: Hormel Beloit Mode: AV50
What changed: - Fixed single-camera validation always failing. Barcodes from TCP push had CameraIndex=0 (default), so Side camera barcodes were counted as Front camera barcodes. - Fixed by setting CameraIndex based on source camera IP before validation.
Previous fixes (v0.135): - Fixed duplicate validations in Push mode. Single-camera mode was subscribed to both telnet AND TCP push data sources.
Previous fixes (v0.131): - Fixed Arduino TCP JSON parse failures at 100+ PPM (packets per minute). Buffer concatenation caused invalid JSON. - Fixed Arduino command flooding (~20+ commands/sec causing 80% failure rate). Added state deduplication. - Increased reinforcement timer interval from 300ms to 500ms.
Previous fixes (v0.129 / 2026-01-21): - Fixed CameraIndex attribution (barcodes not tagged with source camera index). - Fixed stale data rejection (data older than 2000ms causing false passes). - Fixed single-camera mode processing inactive camera data. - Tuned for high-speed operation: reduced lockout 1000ms to 400ms, aggregation 500ms to 200ms.
hormel-v1.0¶
Released: ~2025-12 Sites affected: Hormel Austin Mode: AV50
What changed: - Per-camera minimum barcode requirements. - UI dropdown for camera mode selection (Front/Side/Both). - NOREAD/ERROR barcode filtering. - Multi-camera aggregation (500ms timeout, 1000ms lockout). - Hardware trigger mode support.
teguar-v0.118¶
Released: 2025-12-29 Sites affected: Hormel Barron Mode: AV50
What changed: - Fixed CognexOutputController relay logic (was using opposite logic from CognexStackLightAdapter). - Fixed output initialization (first-connect was turning outputs ON instead of OFF).
Previous fixes (2025-12-28): - Fixed stale barcode detection from TCP buffer. - Fixed NOREAD event handling. - Fixed reinforcement timer polluting TCP buffer (auto-disabled for Cognex stack lights). - Fixed active-LOW relay logic for stack light control.
Key feature: This site uses Cognex camera I/O outputs for stack lights and reject signals instead of an Arduino controller.
stclair-v0.121¶
Released: ~2026-01 Sites affected: Cargill St. Clair Mode: CargillRfid
What changed:
- Three-tier export routing: Mojix (primary) -> MWE (secondary) -> AIS (fallback).
- MWE endpoint updated to http://10.4.212.84.
- SystemReady Arduino output configured.
hersey-v0.114¶
Released: ~2025-12 Sites affected: Cargill Hersey Mode: CargillSalt
What changed: - Live camera image display (InsightImageDisplayEnabled). - Historical validation image viewing. - Timestamp-based image filenames. - SystemReady Arduino output.
zfl-v0.113¶
Released: ~2025-12 Sites affected: Zebra Futures Lab Mode: Zfl
What changed: - ZflImporter auto-starts validation on ZPL receipt. - UI displays expected EPC vs camera read. - FS40 heartbeat filtering. - EPC queue for multi-label support (FIFO, max 12 EPCs). - ELO Status Light support.
Version Numbering Guide¶
- v1.7+: Unified versioning. All sites share a single version number. No more site prefixes.
- v0.xxx / sitename-v1.x (legacy): Pre-unified versions used site-prefixed tags (e.g.,
beloit-v0.136,teasdale-v1.0). A higher number at one site does not mean more features than another site — it means more iterations at that specific site. - The same underlying codebase serves all sites. Behavior differences come from the configuration (appsettings.json), not the code.