Reconciling retained job state without resending work - sample verification tracking

RebeccaArcher0430 · 15 May 2026, 00:36 UTC

Reply to discussion
RE
RebeccaArcher0430
Our application sometimes counts an old completion again when it reconnects. The PLC signal was already high before the connection dropped. This tracks sample verification tracking for Fairino FR5 in a PLC-coordinated inspection bench, using an inspection coupon. I want to establish which job the retained state belongs to, without blindly clearing signals or automatically resending work.

20 replies

HA
HassanChan1052
Replying to RebeccaArcher0430

@RebeccaArcher0430 Check whether the PLC trace shows a continuous completion signal, then compare that with how your application preserves its consumed-event state across reconnect or restart.

25 points
RE
RebeccaArcher0430
Replying to HassanChan1052

@HassanChan1052 It stays high. Our restart loses the in-memory consumed marker, so that first read looks new to the application. Annoyingly simple once it's visible.

6 points
HA
HassanChan1052
Replying to RebeccaArcher0430

Use an offline reconnect replay with persistent job state and match the retained completion before applying it. Making the consumed marker durable should prevent duplicate accounting.

10 points
AA
AaronBell0610
Replying to HassanChan1052

Only if that marker identifies the right job. One persisted boolean could hide a genuinely new completion instead

0 points
HA
HassanChan1052
Replying to AaronBell0610

You're right about the missing identity condition. The durable record must associate consumption with the relevant job and attempt; an unidentified retained signal remains unresolved.

6 points
RE
RebeccaArcher0430
Replying to HassanChan1052

@HassanChan1052 Should reconnect have a reconciliation state before normal monitoring resumes? Otherwise our first sample looks just like any other update.

13 points
HA
HassanChan1052
Replying to RebeccaArcher0430

A reconciliation phase can compare the initial retained state with persistent history before normal processing resumes. Connection recovery alone doesn't establish a new job result.

10 points
FE
FelixBrooks0806
Replying to HassanChan1052

My own application reset its last-seen state through a shared startup path, so its edge detector treated the initial high value as an observed transition after reconnect.

7 points
SA
SamBarnes0594
Replying to FelixBrooks0806

Would ignoring the first high value fix that? It feels tempting, which probably means I'm missing something.

19 points
HA
HassanChan1052
Replying to SamBarnes0594

@SamBarnes0594 An initial high signal might represent a result missing from local history. It therefore needs reconciliation rather than unconditional acceptance or suppression.

17 points
RE
RebeccaArcher0430
Replying to HassanChan1052

@HassanChan1052 For this traced example, our persistent history identifies the job and attempt. I'll base the offline replay on that record instead of a single global consumed flag.

-1 points
AA
AaronBell0610
Replying to RebeccaArcher0430

Does the retained interface state carry enough identity to match that record? A detailed local ledger alone doesn't prove the match

13 points
RE
RebeccaArcher0430
Replying to AaronBell0610

@AaronBell0610 In this captured example, the retained job identity matches our record. I haven't established that every interface variant provides the same information.

-2 points
HA
HassanChan1052
Replying to RebeccaArcher0430

@RebeccaArcher0430 You can verify the captured case without claiming all variants are covered. Where the interface can't establish identity, the retained completion should remain unresolved.

15 points
FE
FelixBrooks0806
Replying to HassanChan1052

My older interface exposed completion without job identity. We could see the retained bit perfectly; staring harder didn't tell us whose job it was.

11 points
SA
SamBarnes0594
Replying to FelixBrooks0806

@FelixBrooks0806 What should the screen say in that case? Unknown sounds vague, but complete sounds made up.

14 points
HA
HassanChan1052
Replying to SamBarnes0594

You can state that completion is observed but its job is unconfirmed, making the need for reconciliation visible while leaving results and requests unchanged.

25 points
RE
RebeccaArcher0430
Replying to HassanChan1052

@HassanChan1052 I'll distinguish the observation from the accounting decision in our expected replay results, so reading completion doesn't automatically credit a particular attempt.

1 points
RE
RebeccaArcher0430
Replying to RebeccaArcher0430

I've explained why our first read gets counted again: the signal persists while our consumed marker doesn't. I'll close the fix only when identity-based reconciliation survives the offline reconnect and restart cases.

13 points
HA
HassanChan1052
Replying to RebeccaArcher0430

@RebeccaArcher0430 Your closure fits the observed mechanism, while the reconciliation result stays conditional on the required checks.

14 points

Add to the discussion

Welcome to Application Robot

Everyone can read the forum. Sign in or create an account to start a discussion, reply, or upload photos.

Forgot your password?

By creating an account, you agree to our Terms and Conditions and community guidelines. Read our Privacy Policy for how your information is handled.