Skip to content

Robot board quarantine and rework plan

Status: implemented on the server; Cow Tester 2.7.0 pushed; physical station pull and bench print remain Decision owner: Angel
Recorded: 2026-09-20
Systems involved: Cow Robot production station, tester API, InvenTree ERP, Citizen CT-S801 receipt printer, Zebra GX430t 2 x 1.5-inch label printer

Purpose

Account for every assembled Robot board even when it fails its first test or the tester cannot read its chip. Preserve the complete failure and repair history, keep failed boards out of Finished goods, and consume only the materials that were physically installed when the board failed.

This note records the implemented design and its operating intent. The server workflow is live. Cow Tester 2.7.0 is merged and pushed; the physical station must pull that version and pass the listed printer/fixture bench checks before the operator relies on it.

Decisions already made

  1. Keep the production operator flow simple. After identifying the board, run the test. PASS shows Test next board. FAIL records the result and shows only Retest or Quarantine. Retest repeats the same board and may be chosen without a software-imposed limit. Quarantine finishes the logging and printing, then shows Test next board. Angel decides later whether a quarantined board is repaired or scrapped.
  2. No board is scrapped automatically.
  3. A tester, fixture, camera, printer, network, instrument, or operator setup abort does not automatically quarantine the board.
  4. Every failed result is retained. Retests append results; they never overwrite the original failure.
  5. A failed board remains historically linked to the work order that built it, even after it moves out of active testing and into Quarantine or Scrap.
  6. An unidentified failed board goes into an individual ESD bag. The detailed Citizen failure receipt goes inside the bag. A black-and-white 2 x 1.5-inch Zebra Quarantine label goes outside the bag.
  7. The Citizen receipt is also the physical rework traveler. It includes a large blank WORK PERFORMED area for handwriting the repair, parts replaced, technician initials, and date. Before release to production or Scrap, that handwritten information must be entered into the electronic case.
  8. The outside label uses a unique Quarantine ID such as Q-BO0001-001, a QR code, product, work order, date, and CHIP UNREADABLE when applicable. It uses a heavy black border and large QUARANTINE text; colored label stock is not required.
  9. Rework is performed through a dedicated Rework Mode which starts by scanning or entering a Quarantine ID, permanent serial, or chip ID.
  10. A passing rework closes the Quarantine case only after the complete required test sequence passes. Another failure leaves the same case in Quarantine.
  11. Duplicate prevention is mandatory: one ERP output per product and permanent serial, one active Quarantine case per stock item, unique event and Quarantine IDs, and no serial reuse after scrap.
  12. A fixture reseat is not rework. Soldering, replacing a component, changing firmware outside the normal test, or otherwise changing the board is rework and must use the Quarantine/Rework path.

Current behavior and the gap

The station already keeps detailed append-only local logs and sends serial assignments, tests, passes, failures, aborts, and rework events to the tester API on Plex. The server stores them in its SQLite event index and mirrors results to InvenTree when it can match the event to an ERP stock item. A final/post-coating PASS completes the existing output into Finished goods.

The server currently waits for a pre-coating PASS before it creates the ERP unit. A board that fails before that point remains in the station/server test history but has no ERP stock item to transfer to Quarantine or Scrap. This is the gap this plan fixes.

Verified BO-0001 snapshot on 2026-09-20:

  • Target: 27 Robot boards.
  • 21 completed outputs in Finished goods.
  • 09260046 / chip 2046376C3045: pre-coating PASS, ERP stock item 71, still in In test, no post-coating result at the time of the check.
  • 09260042 / chip 2069377B3045: latest pre-coating FAIL and post-coating FAIL, no ERP stock item.
  • 09260059 / chip 203B377D3045: latest pre-coating FAIL, no ERP stock item.
  • Three additional planned positions had no current serial/output. Do not infer whether they were never built, unidentified, or otherwise disposed without a physical reconciliation.

Required production flow

A. Board identity is readable

  1. The station identifies the chip and obtains the permanent serial from the tester API.
  2. The server creates or links the board's ERP work-order identity before the first test result can be lost from ERP tracking.
  3. The station uploads the complete test result.
  4. On an actual first FAIL that can be a contact/seating problem, the server attaches the result and waits for the same-run disposition prompt.
  5. On PASS, the board advances only to the next permitted production stage.
  6. Only the complete required final test may release the finished board to Finished goods.

B. Chip cannot be read

  1. First distinguish a board failure from a setup abort. If the equipment cannot establish that a board was present and actually failed, keep the run as a setup abort rather than manufacturing scrap/rework.
  2. If identity cannot be read, retain the first result under its tester run ID while the board remains clamped in the fixture and present the same-run disposition prompt. If the operator removes it from the fixture without a passing controlled retest, create its Quarantine identity and label first so the physical board cannot become anonymous.
  3. For a confirmed board failure after the controlled retest, or when the operator selects Move to Quarantine, the server creates a unique Quarantine case.
  4. Recommended design: reserve a permanent product serial for that physical board as well as the operational Quarantine ID. The ERP record can then remain tied to the work order even if the chip is never recovered. The chip field remains unknown until repair. A scrapped serial is never reused.
  5. Store the work order, product, permanent serial if assigned, Quarantine ID, tester/run ID, date/time, failure stage, detailed error, and CHIP UNREADABLE.
  6. Print the Citizen failure receipt and the Zebra Quarantine label only after the controlled retest confirms Quarantine disposition or the operator selects Move to Quarantine.
  7. Put the board and receipt inside an individual ESD bag, apply the label to the outside, and place the bag in the physical Quarantine location.

Proposed outside label:

+----------------------+
|   !!! QUARANTINE !!! |
| Q-BO0001-001         |
| SN: 09260060         |
| CHIP UNREADABLE      |
| Robot Board    [QR]  |
+----------------------+

The QR code should identify the server-side Quarantine case, not embed the full test report. The electronic record is authoritative; paper is a physical aid.

The Citizen receipt inside the bag must include:

QUARANTINE / REWORK RECEIPT
Quarantine ID: ____________
Serial: ___________________
Failure summary: __________

WORK PERFORMED:
___________________________
___________________________
___________________________

Parts replaced: ___________
Technician: _____ Date: ____

The handwriting keeps the repair with the physical board while it is away from the tester. It is temporary evidence, not the final system of record. Rework Mode must capture it electronically before disposition.

Same-run failure disposition and retest

The station must always upload and preserve the first FAIL. It must not hide or overwrite it merely because a later attempt passes.

The production screen flow after identifying the board is:

Identify board
    |
    v
Run test
    |
    +-- PASS --> Test next board
    |
    +-- FAIL --> Retest | Quarantine
                   |           |
                   v           v
                Run test    Save disposition
                same board  + print receipt/label
                                |
                                v
                           Test next board

Retest runs this flow:

  1. Preserve and upload the first FAIL.
  2. Do not print Quarantine paperwork yet.
  3. Allow the operator to unclamp, reseat, and reclamp the same board, then confirm it is ready.
  4. Run the complete test for the current production stage with the same limits. It does not repeat an already accepted earlier production stage.
  5. Resolve the disposition before the station offers Test next board; there is no end-of-batch failure script or unidentified pile of failed boards.

Outcomes:

  • Retest PASS: keep every attempt, record that the board passed after retesting, and continue the normal production flow. Print no Quarantine paperwork and require no later rework/full-batch retest.
  • Retest FAIL: append the new failure, show Retest and Quarantine again, and leave the same board active.
  • Quarantine selected: create the Quarantine case, attach every attempt, print the receipt and label, finish the disposition, and then show Test next board.

Station/equipment errors are not a board FAIL and must be reported separately as station errors. They must not add extra choices to this two-button board failure screen or create a Quarantine record.

Guardrails:

  • Every attempt must be uploaded with its own run ID, result, timestamp, and attempt number. Retrying never overwrites or hides a failure.
  • The quality view must report both first-pass yield and total attempts so repeated retests remain visible.
  • A retest must repeat the complete applicable stage, not only the failed check.
  • Overcurrent, a confirmed short, smoke/thermal events, destructive faults, or any safety-critical failure must power the fixture down. The failure screen still stays simple, but Retest remains disabled until the operator acknowledges that the physical condition is safe; Quarantine is available.
  • If the board is removed from the fixture to be held for later, it must first enter Quarantine and receive its receipt/bag label.
  • If the board is altered rather than merely reseated, classify it as rework and use Rework Mode.
  • First-pass yield reports retain the original FAIL even when the controlled retest passes. Production acceptance uses the valid controlled-retest result; quality reporting shows both.

Rework Mode

Prompt: Scan or enter Quarantine ID, serial number, or chip ID.

The mode must:

  1. Retrieve one existing Quarantine case and refuse ambiguous matches.
  2. Show product, original work order, serial/chip when known, original failure, all prior attempts, and current ERP disposition.
  3. Require the operator to transcribe the receipt's WORK PERFORMED, parts replaced, technician, and repair date. If no work was performed, explicitly record No repair performed rather than leaving it blank.
  4. Run the complete test sequence required for release; a narrow diagnostic pass alone cannot release the board.
  5. Append the repair and test events to the same history.
  6. On complete PASS, link a newly readable chip when necessary, close the case, and move the board automatically to the correct next stage or Finished goods. The operator does not select the destination. The program derives it from the stored failure stage, last accepted production checkpoint, and the repair performed.
  7. On FAIL, leave the same case in Quarantine and offer to reprint the receipt and label. Do not create another output or case.
  8. Offer a deliberate Scrap action. It requires a reason and confirmation, moves the item to Scrap, and marks it Destroyed only when it is physically discarded. It never reuses the serial.

Disposition cannot finish with unrecorded handwritten work:

  • On PASS, save the work performed and replacement parts before moving the board automatically to Final Assembly or Finished goods.
  • On Scrap, save all investigation/repair work and the separate scrap reason before moving the board to Scrap.
  • If another FAIL leaves the board in Quarantine, save the work attempt before returning it to the bag so the electronic history is current even if the paper is later lost.

If the outside label is lost, Rework Mode must search open cases by product, work order, date, serial, chip, failure, and physical Quarantine position, then reprint the label. If the original chip was unreadable and all physical identifiers are lost, require manual identity reconciliation; never guess.

Automatic post-repair routing:

  • A board quarantined during pretest runs the required pretest after repair. A PASS returns it to Final Assembly; it cannot become Finished goods from a pretest result.
  • A board quarantined during final test runs the required final test after repair. A complete PASS moves it to Finished goods.
  • If the recorded repair invalidates an earlier accepted checkpoint, the program backs up to the earliest affected stage and requires every later test again before release. For example, replacing a component covered by pretest cannot be released using only a final-test result.
  • Missing or contradictory stage history blocks automatic release and asks for review; it never guesses a destination.

Inventory rule: consume by physical stage

Do not complete the present full Robot-board BOM merely because a serial was assigned or pretest started. That would falsely consume conformal coating, screw terminals, the nRF module, and other materials that are installed only after pretest.

Inventory must follow the physical build:

Physical outcome Inventory treatment
Failure before any production material is installed consume nothing
Failure at pretest consume only the pretest-stage materials already installed
Pretest PASS retain/consume the pretest assembly; do not consume later materials yet
Coating, terminals, nRF, or other final parts installed consume those materials at that stage
Failure after final-stage installation Quarantine includes every material installed so far
Repair uses replacements consume each replacement with a rework reason; record the removed part as rework scrap
Unit scrapped installed materials remain consumed and are reported as scrap; uninstalled materials remain available

The recommended ERP structure is a staged build:

  1. Robot Board - Pretest Assembly: only materials physically present before pretest.
  2. Robot Board - Final Assembly: one passing pretest assembly plus conformal coating, screw terminals, nRF module, and every later material.

The implementation must prove how traceability passes from the pretest stage to the final serialized board without violating InvenTree's serial uniqueness. Do not assume the same serial can exist on two part records. If the ERP cannot support that cleanly, keep one serialized board identity and implement explicit, auditable stage material consumption rather than completing the full BOM early.

Work-order closeout

Every physically assembled board must end in one current disposition:

  • active stage / In test;
  • Quarantine;
  • Finished goods; or
  • Scrap.

Those counts, plus genuinely unbuilt quantity, must reconcile to the work-order target. Quarantine and Scrap remove a board from the active production queue but do not erase its original work-order relationship or component history.

The closeout view should show Finished, In test, Quarantine, Scrap, and unaccounted positions. Do not close a build while physical boards or consumed materials remain unaccounted for.

Implementation order when Angel resumes this work

Moved out: the 12-step implementation order is in robot-board-quarantine-rework-implementation-order.

Acceptance checks

  • First-test FAIL with readable chip produces one Quarantine record, one ERP identity, and one attached result without consuming uninstalled materials after its controlled retest also fails or it is an immediate safety failure.
  • A clamp/contact failure retains every FAIL and permits another complete same-run controlled retest whenever the operator selects it.
  • A controlled-retest PASS returns to production without Quarantine paperwork while quality history and first-pass yield retain the first FAIL.
  • Repeated FAIL results create no Quarantine case until the operator selects Move to Quarantine; that selection creates one case and one receipt/label set containing the complete attempt history.
  • First-test FAIL with unreadable chip prints a matching receipt and bag label, appears in the electronic queue, and can later be found without relying on loose paper.
  • Setup abort creates no false manufacturing failure or stock consumption.
  • A repeated upload or retest creates no duplicate stock item or case.
  • Rework PASS preserves the original failure and releases only after the full required test passes.
  • Rework PASS routes automatically from stored stage history: pretest failures return to Final Assembly, final-test failures move to Finished goods, and the operator is never asked to choose between them.
  • Rework FAIL appends history and remains in Quarantine.
  • Scrap requires Angel's decision, retains traceability, and consumes only materials actually installed.
  • Replacement parts used during repair are deducted with a reason.
  • The Citizen receipt has a usable handwritten work area, and PASS, continued Quarantine, and Scrap all preserve that work electronically before completing disposition.
  • Lost labels can be reprinted from the electronic case.
  • Work-order counts and physical boards reconcile before closeout.

Items still open for Angel to adjust

  • Confirm permanent serial assignment at the unreadable-chip failure point.
  • Choose one physical Quarantine area or numbered tray/bin positions.
  • Confirm Scrap requires both a reason and a final confirmation. Current proposal: yes.
  • Confirm whether the Quarantine label prints immediately after the server accepts the case or after the operator confirms the board is inside the ESD bag. Current proposal: print immediately after server acceptance.
  • Finalize the actual pretest-versus-final material split from the shop-floor sequence; the examples above must not be treated as the authoritative BOM.