Files
lmxopcua/docs/plans/2026-06-11-alarm-historian-followups.md.tasks.json
T

19 lines
2.3 KiB
JSON

{
"planPath": "docs/plans/2026-06-11-alarm-historian-followups.md",
"designPath": "docs/plans/2026-06-11-alarm-followups-round2-design.md",
"branch": "feat/alarm-historian-followups",
"baseBranch": "master",
"baseSha": "f64f7ce6",
"status": "completed",
"note": "pending.md code follow-ups items 1-6 (item 7 docker-dev rig cleanup is an operational deferral, out of scope). T1 (HistorizeToAveva opt-out): carry the flag engine→AlarmTransitionEvent→HistorianAdapterActor and gate the DURABLE WRITE ONLY (live /alerts unaffected); non-nullable default-true is rolling-restart-safe by the writer==publisher invariant. T2 (DrainInterval/Capacity/DeadLetterRetention knobs + Validate() startup warnings for empty SharedSecret / relative DatabasePath). T3 (TransitionUser reads Comments[^1].User for shelve/unshelve/enable/disable — ops already append the operator; no Core change). T4 (volatile _backoffIndex + _evictedCount under lock — Core.AlarmHistorian, parallel-safe). Same-assembly contention: T1→T2→T3 serialize (Runtime; T1/T3 share ScriptedAlarmHostActor.cs); T4 runs concurrently. NO Configuration/EF change. Build on feat branch off master.",
"tasks": [
{"id": 255, "planTask": 0, "subject": "T0: Branch off master", "classification": "trivial", "status": "completed", "blockedBy": []},
{"id": 256, "planTask": 1, "subject": "T1: Honor HistorizeToAveva opt-out at the durable write (pending #1)", "classification": "high-risk", "status": "completed", "blockedBy": [255], "parallelizableWith": [259]},
{"id": 257, "planTask": 2, "subject": "T2: Historian config knobs + startup validation (pending #2,#3,#4)", "classification": "standard", "status": "completed", "blockedBy": [256], "parallelizableWith": [259]},
{"id": 258, "planTask": 3, "subject": "T3: Real operator for shelve/enable/disable transitions (pending #5)", "classification": "small", "status": "completed", "blockedBy": [257], "parallelizableWith": [259]},
{"id": 259, "planTask": 4, "subject": "T4: SqliteStoreAndForwardSink thread-safety nits (pending #6)", "classification": "small", "status": "completed", "blockedBy": [255], "parallelizableWith": [256, 257, 258]},
{"id": 260, "planTask": 5, "subject": "T5: Full-suite gate + docs + close out", "classification": "small", "status": "completed", "blockedBy": [256, 257, 258, 259]}
],
"lastUpdated": "2026-06-15"
}