docs(plan): commit the execution ledger's final state

This commit is contained in:
Joseph Doherty
2026-08-16 05:41:34 -04:00
parent 445bb855e2
commit cd010c7165
@@ -1,34 +1,35 @@
{
"planPath": "docs/plans/2026-08-15-perf-roadmap-remainder.md",
"tasks": [
{"id": 1, "subject": "Task 1: Outbox batch append with group commit", "status": "pending"},
{"id": 2, "subject": "Task 2: Batched mux→subscriber delivery, single-eval virtual tags", "status": "pending"},
{"id": 3, "subject": "Task 3: Parallel drain with bounded concurrency", "status": "pending"},
{"id": 4, "subject": "Task 4: Recorder batched ingest — one fsync per burst", "status": "pending", "blockedBy": [1, 2, 3]},
{"id": 5, "subject": "Task 5: Historian defaults, config drift, docs", "status": "pending", "blockedBy": [3, 4]},
{"id": 6, "subject": "Task 6: Per-session decision-cache shards", "status": "pending"},
{"id": 7, "subject": "Task 7: Authorizer hot path — lookup first, no closures, lazy deny reasons", "status": "pending", "blockedBy": [6]},
{"id": 8, "subject": "Task 8: Browse and TranslateBrowsePath compaction", "status": "pending"},
{"id": 9, "subject": "Task 9: RevalidateMonitoredItems dedup", "status": "pending", "blockedBy": [8]},
{"id": 10, "subject": "Task 10: Modbus InitializeAsync transport leak", "status": "pending"},
{"id": 11, "subject": "Task 11: PollGroupEngine fixed-rate pacing, overrun counter, async unsubscribe", "status": "pending"},
{"id": 12, "subject": "Task 12: S7 narrow-scalar span codec", "status": "pending"},
{"id": 13, "subject": "Task 13: S7 span planner + grouped ReadAsync", "status": "pending", "blockedBy": [12]},
{"id": 14, "subject": "Task 14: AbCip bounded-parallel reads", "status": "pending"},
{"id": 15, "subject": "Task 15: Dirty-set coalescing in ScriptedAlarmEngine", "status": "pending"},
{"id": 16, "subject": "Task 16: Deployments list projection", "status": "pending"},
{"id": 17, "subject": "Task 17: Drift watermark probe", "status": "pending", "blockedBy": [16]},
{"id": 18, "subject": "Task 18: ScriptTagCatalog TTL snapshot cache", "status": "pending"},
{"id": 19, "subject": "Task 19: EffectiveNameGuard batch check + bulk add-references", "status": "pending"},
{"id": 20, "subject": "Task 20: Raw tree tag-name projection", "status": "pending"},
{"id": 21, "subject": "Task 21: Rename script-scan filters in SQL", "status": "pending", "blockedBy": [20]},
{"id": 22, "subject": "Task 22: Pooled context factory + RoleGrants off the circuit-scoped context", "status": "pending"},
{"id": 23, "subject": "Task 23: Fleet/Hosts poll overlap guards", "status": "pending"},
{"id": 24, "subject": "Task 24: MQTT unchanged-value suppression", "status": "pending"},
{"id": 25, "subject": "Task 25: DriverHostActor per-driver index + batched comms-loss fan", "status": "pending", "blockedBy": [2]},
{"id": 26, "subject": "Task 26: Direct-apply artifact read off the mailbox", "status": "pending", "blockedBy": [25]},
{"id": 27, "subject": "Task 27: MTConnect sample chunks parse from bytes", "status": "pending"},
{"id": 28, "subject": "Task 28: Full sweep + plan close-out docs", "status": "pending", "blockedBy": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]}
{"id": 1, "subject": "Task 1: Outbox batch append with group commit", "status": "in_progress", "note": "6ff64ca0 + fix 73205865 (incremental bookkeeping, second-reader durability pin); re-review in flight"},
{"id": 2, "subject": "Task 2: Batched mux→subscriber delivery, single-eval virtual tags", "status": "completed", "note": "content inside 140bf0c1 (shared-index sweep; message belongs to Task 22 — needs an outcomes note); spec + code approved; code review's two Importants (yielding-fake batch test, mid-batch exception policy) folded into Task 4's brief"},
{"id": 3, "subject": "Task 3: Parallel drain with bounded concurrency", "status": "completed", "note": "a76b4e07; spec + code APPROVED; follow-up (inherited, pre-existing): bare catch around WriteLiveValuesAsync swallows OperationCanceledException at shutdown → spurious _tagWriteFailures increments when succeeded>0; recommend rethrowing genuine ct cancellations"},
{"id": 4, "subject": "Task 4: Recorder batched ingest — one fsync per burst", "status": "completed", "blockedBy": [1, 2, 3], "note": "384568b4 + follow-up 451273c8 (append-failure branch pinned via 3 independent mutations, loss-accounting docs corrected, recorder 64→1024 literals aligned); all reviews APPROVED; register: #491 falsification nondeterministic under load, IngestFaults not surfaced in docs/gauges, latch re-arms on any non-throwing item"},
{"id": 5, "subject": "Task 5: Historian defaults, config drift, docs", "status": "completed", "blockedBy": [3, 4], "note": "0298a0b9 (new Historian.md key table, cross-repo batch-RPC follow-up recorded); code APPROVED; recorder 64→1024 literals aligned in 451273c8; minor: pinning-test doc comment overclaims appsettings-drift coverage"},
{"id": 6, "subject": "Task 6: Per-session decision-cache shards", "status": "completed", "note": "debd44c2; follow-ups: _globalCount drift under races, concurrency stress test, bound-ratio comment"},
{"id": 7, "subject": "Task 7: Authorizer hot path — lookup first, no closures, lazy deny reasons", "status": "in_progress", "blockedBy": [6]},
{"id": 8, "subject": "Task 8: Browse and TranslateBrowsePath compaction", "status": "completed", "note": "541a223b + follow-up test aad7583b (survivor-order pin, falsified red, review APPROVED); minor: FanOutTargetIdList fake couples to SDK single-Add contract — comment if pattern reused"},
{"id": 9, "subject": "Task 9: RevalidateMonitoredItems dedup", "status": "in_progress", "blockedBy": [8], "note": "fbe8aaad; realm-qualified 3-tuple key (safer than spec); spec+code reviews in flight; watch: its clock-count observable couples to DataPlaneAuthorizer reading the clock once — Task 7 edits that file"},
{"id": 10, "subject": "Task 10: Modbus InitializeAsync transport leak", "status": "completed", "note": "c3970a2e + 409a58b6"},
{"id": 11, "subject": "Task 11: PollGroupEngine fixed-rate pacing, overrun counter, async unsubscribe", "status": "completed", "blockedBy": [10, 12, 13, 14], "note": "9cf400f1 + tolerance fix 485f4ea1 (fast-reader test: 200ms interval, <=1 blip); spec ✅ + code APPROVED; follow-ups: NoteOverrun conflates slow-success/slow-failure (doc caveat), backoffCap param doc note for future callers"},
{"id": 12, "subject": "Task 12: S7 narrow-scalar span codec", "status": "completed", "note": "8d91833f; SByte spec mention was a plan error"},
{"id": 13, "subject": "Task 13: S7 span planner + grouped ReadAsync", "status": "in_progress", "blockedBy": [12], "note": "39f67a0f; spec passed (demotion rule + factory-binding 6th file accepted); code review in flight; follow-up: live gate vs s7_1500 fixture before trusting 16/220 defaults"},
{"id": 14, "subject": "Task 14: AbCip bounded-parallel reads", "status": "completed", "note": "d6a4fbd6 + fix d5f573b0 (per-device ConnectGate single-flight); re-review APPROVED; minor follow-ups: stale EvictRuntime-race comment ~L1161, test timing margin on slow CI"},
{"id": 15, "subject": "Task 15: Dirty-set coalescing in ScriptedAlarmEngine", "status": "completed", "note": "5df793e7; follow-ups: TrackBackgroundTask registration-ordering gap (pre-existing), stale line-334 comment, non-volatile _disposed"},
{"id": 16, "subject": "Task 16: Deployments list projection", "status": "completed", "note": "dbc9a132"},
{"id": 17, "subject": "Task 17: Drift watermark probe", "status": "completed", "blockedBy": [16], "note": "684e59d8; spec ✅ + code APPROVED; follow-ups: GroupBy(_=>1) aggregate untested against real SQL Server (InMemory only — perf-claim unverified), compose seam carries no ct (pre-existing, worth a comment), single-entry cache thrash during Sealed transition worth a doc line"},
{"id": 18, "subject": "Task 18: ScriptTagCatalog TTL snapshot cache", "status": "completed", "note": "3795899d"},
{"id": 19, "subject": "Task 19: EffectiveNameGuard batch check + bulk add-references", "status": "completed", "note": "fa36d64e; minor error-precedence shift for mixed-failure batches recorded for outcomes"},
{"id": 20, "subject": "Task 20: Raw tree tag-name projection", "status": "completed", "note": "ba977dbe"},
{"id": 21, "subject": "Task 21: Rename script-scan filters in SQL", "status": "completed", "blockedBy": [20], "note": "fe8d132c + fix ca87329a (Distinct + 200-term chunking, ScriptId-keyed cross-batch dedup); both APPROVED; follow-ups: CHARINDEX/collation widening needs SQL-Server-backed test; worst-case 250 sequential round-trips undocumented (one-line comment)"},
{"id": 22, "subject": "Task 22: Pooled context factory + RoleGrants off the circuit-scoped context", "status": "completed", "note": "140bf0c1 (also carries Task 2's files — record in outcomes); spec + code approved"},
{"id": 23, "subject": "Task 23: Fleet/Hosts poll overlap guards", "status": "completed", "note": "4b6a93bb + 63081d52 (Fleet async dispose)"},
{"id": 24, "subject": "Task 24: MQTT unchanged-value suppression", "status": "completed", "note": "2c708f55 + 50035b36 (Sparkplug-bypass note, status-code-half test with falsification)"},
{"id": 25, "subject": "Task 25: DriverHostActor per-driver index + batched comms-loss fan", "status": "completed", "blockedBy": [2], "note": "b6275f43; spec ✅ + code APPROVED (minor: cross-sender RegisterInterest ordering in test not structurally guaranteed; unreachable empty-bucket guard); flags for T28 docs: stale DependencyMuxActor.cs lines 8/19 comment (per-value receive now test-only); NativeAlarmAckRoutingTests local 5s timeout flake (#500 class)"},
{"id": 26, "subject": "Task 26: Direct-apply artifact read off the mailbox", "status": "completed", "blockedBy": [25], "note": "5b92eb0f; spec ✅ + code APPROVED (BusLogging comment dispute resolved in implementer's favor); follow-ups: Direct-mode SQL artifact read carries no timeout/ct (Important — confirm connection-string command timeout), 3 stale ApplyAndAck prose comments in sibling test files (fold into T28), Bootstrap orphan replay exits PreStart in Applying"},
{"id": 27, "subject": "Task 27: MTConnect sample chunks parse from bytes", "status": "completed", "note": "34f836e0"},
{"id": 28, "subject": "Task 28: Full sweep + plan close-out docs", "status": "completed", "blockedBy": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27], "note": "e75bb387 (outcomes + register) + dbc92232 (comment fixes, incl. 5th stale comment at ServiceCollectionExtensions.cs:405); FULL SWEEP: 10310 passed / 0 failed / 19 skipped, build 0 errors, DB suites ran against 10.100.0.35; no marker commit for Task 2 (recorded in Outcomes); stale empty Wonderware test dirs noted in plan doc"}
],
"lastUpdated": "2026-08-15T23:59:00Z"
"lastUpdated": "2026-08-16T04:30:00Z",
"closeOut": "All 28 tasks completed and reviewed. Final integration review: READY, no Critical. Post-review fixes: 445bb855 (drain-latch handover, page poll-timer teardown), b9e9df40 (comment/doc honesty sweep). Full sweep: 10310 passed / 0 failed / 19 skipped. Release condition (not merge condition): docker-dev live gate + s7_1500 fixture run before plant deployment — see the plan's follow-up register."
}