Auto-push can overwrite the PLC recipe before reconciliation reads it
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 48/100
- Issue type
- Bug
- Clarity
- Mostly clear
- Activity status
- Quiet
- Tech stack
- csharp
- Domain
- distributed-systems
Research direction
Begin with the manual test that follows plc-write-atomic, then inspect Plc/PlcLifecycleManager.cs, Recipes/RecipeSession.cs, and Sync/PlcSyncExecutor.cs at the referenced lines. Use the plc-push-gate slice in Docs/plans/roadmaps/20260807-plc-sync-reconciliation-roadmap.md as context. Done means a queued snapshot waits through reconciliation, is flushed or dropped after the outcome, and the gate opens on every outcome including exceptions.
Written by the indexing model from the issue text.
Description
A recipe edit made while the PLC connection is being established can push the local recipe to the
PLC before the sync reconciliation reads it. The recipes then match, no conflict is detected, and the
PLC recipe is gone without the operator being asked.
EnableSync sets sync enabled (Plc/PlcLifecycleManager.cs:129) before it connects (:130). From
that moment every recipe mutation notifies the sync service
(Recipes/RecipeSession.cs:625-631), which schedules a write after a 1000 ms debounce
(Sync/PlcSyncExecutor.cs:23,31-51). The reconciliation reads the PLC recipe at
PlcLifecycleManager.cs:338, after the connect completes. Whichever lands first wins.
The window is narrow - it needs an edit during the connect - so this is filed as a known race, not a
reported failure. Confirm it happens in the field before implementing.
Scope: hold the debounced auto-push until the reconciliation has reached an outcome. A snapshot
queued while the gate is closed is flushed afterwards, and dropped if the operator resolves the
conflict by loading the PLC recipe. The gate covers the reconciliation window only; it is not a
general write lock.
Risk: a gate that fails to open strands the sync silently, so it needs an open-on-every-outcome
guarantee including the exception paths.
Roadmap: Docs/plans/roadmaps/20260807-plc-sync-reconciliation-roadmap.md - slice plc-push-gate.
Decide after the manual test that follows plc-write-atomic.
- Dominant language
- C#
- Stars
- 3
- Forks
- 1
- PR merge metrics
- No merged PRs in 30d
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from Semiteq/SemiStep
-
Difficulty 4/5 3-5 days Newbie friendliness 68/100
-
bug
-
bug
-
bug
-
enhancement
Difficulty 5/5 Over a week Newbie friendliness 38/100
All issues in Semiteq/SemiStep
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
-
:watch: Not Triaged 11.0 fundamentals/subsvc
Difficulty 2/5 1-3 hours Newbie friendliness 92/100
dotnet/AspNetCore.Docs#37699 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
SubtitleEdit/subtitleedit#15108 · 1 comment ·
-
area/docs-content Bug pulumi/docs
Difficulty 1/5 1-3 hours Newbie friendliness 94/100
-
agentic-workflows untriaged
Difficulty 2/5 1-3 hours Newbie friendliness 76/100