Files
ScadaBridge/code-reviews
Joseph Doherty c42bb48585 docs(code-review): re-review 17 changed modules at 1f9de8a2 — 8 new findings
Re-reviewed the modules whose source changed since the last review baseline
(full-review remediation fd618cf1 + InboundAPI Database-helper fixes b3c90143),
focused on whether the fixes are sound and regression-free. 9 of 17 modules
clean; 8 new findings (0 Critical, 0 High, 4 Medium, 4 Low), all code-verified
by the orchestrator before recording:

- DataConnectionLayer-029 (Med): DCL-023's unsubscribe-clears-in-flight reopens a
  double-subscribe window that leaks an orphaned alarm feed; the alarm completion
  handler overwrites the subscription id without the tag-path guard at line 908.
- InboundAPI-031 (Med): WaitForAttribute's 5s grace backstop is tighter than the
  CommunicationService Ask's timeout+IntegrationTimeout (30s) round-trip slack, so
  a slow-but-valid timed-out 'false' arriving in the 5-30s window is cancelled into
  an unhandled OperationCanceledException/500 (contradicts spec 6 + its own comment).
- SiteRuntime-032 (Med): SiteRuntime-029's wasPresent guard skips the deployed-count
  decrement when deleting a DISABLED instance (absent from both maps), drifting the
  health-dashboard tally; self-heals on singleton restart (observational, hence Med).
- StoreAndForward-028 (Med): StoreAndForward-025 resets the register-guard but not
  _bufferedCount, so a same-instance Stop->Start re-seeds the depth gauge to ~2N.
- AuditLog-017, CentralUI-037, ScriptAnalysis-009, SiteRuntime-033 (Low): a
  test-coverage gap plus stale doc-comments/spec following the remediation.

Header commit/date bumped to 1f9de8a2 / 2026-06-24 on all 17 modules; README
regenerated (8 pending / 576 total).
2026-06-24 09:20:03 -04:00
..

Code Reviews

Comprehensive, per-module code reviews of the ScadaBridge codebase. Each module (one buildable project under src/) has its own folder containing a findings.md. This README is the aggregated index — the single place to see all outstanding work.

Generated by regen-readme.py from the per-module findings.md files. Do not edit by hand — edit the findings files and re-run the script.

How it works

  • Reviews are performed one module at a time against a fixed checklist.
  • Every finding is recorded in the module's findings.md with a severity and status.
  • Findings are never deleted — they are closed by changing their status, keeping a full audit trail.
  • This README aggregates every pending finding (Open / In Progress) across all modules.

See REVIEW-PROCESS.md for the full procedure: the review checklist, severity definitions, finding format, and how to mark items resolved.

Layout

code-reviews/
├── README.md            # this file — process overview + pending findings
├── REVIEW-PROCESS.md     # how to perform a review and track findings
├── regen-readme.py       # regenerates this README from the findings files
├── _template/findings.md # copy-this template for a module review
└── <Module>/findings.md  # one folder per src/ project

Baseline review — 2026-05-16

All 19 modules were reviewed at commit 9c60592 (241 findings: 6 Critical, 46 High, 100 Medium, 89 Low). The tables below track what remains open as findings are resolved and re-triaged; findings discovered after the baseline are appended to their module file and counted in Total.

Severity Open findings
Critical 0
High 0
Medium 4
Low 4
Total 8

Module Status

Module Last reviewed Commit Open (C/H/M/L) Open Total
AuditLog 2026-06-24 1f9de8a2 0/0/0/1 1 17
CLI 2026-06-19 d6ead8ae 0/0/0/0 0 24
CentralUI 2026-06-24 1f9de8a2 0/0/0/1 1 37
ClusterInfrastructure 2026-06-20 4307c381 0/0/0/0 0 15
Commons 2026-06-24 1f9de8a2 0/0/0/0 0 26
Communication 2026-06-20 4307c381 0/0/0/0 0 24
ConfigurationDatabase 2026-06-24 1f9de8a2 0/0/0/0 0 27
DataConnectionLayer 2026-06-24 1f9de8a2 0/0/1/0 1 27
DeploymentManager 2026-06-24 1f9de8a2 0/0/0/0 0 27
ExternalSystemGateway 2026-06-24 1f9de8a2 0/0/0/0 0 26
HealthMonitoring 2026-06-20 4307c381 0/0/0/0 0 25
Host 2026-06-24 1f9de8a2 0/0/0/0 0 26
InboundAPI 2026-06-24 1f9de8a2 0/0/1/0 1 31
KpiHistory 2026-06-24 1f9de8a2 0/0/0/0 0 6
ManagementService 2026-06-24 1f9de8a2 0/0/0/0 0 26
NotificationOutbox 2026-06-19 d6ead8ae 0/0/0/0 0 13
NotificationService 2026-06-20 4307c381 0/0/0/0 0 28
ScriptAnalysis 2026-06-24 1f9de8a2 0/0/0/1 1 9
Security 2026-06-20 4307c381 0/0/0/0 0 25
SiteCallAudit 2026-06-24 1f9de8a2 0/0/0/0 0 9
SiteEventLogging 2026-06-24 1f9de8a2 0/0/0/0 0 27
SiteRuntime 2026-06-24 1f9de8a2 0/0/1/1 2 33
StoreAndForward 2026-06-24 1f9de8a2 0/0/1/0 1 28
TemplateEngine 2026-06-24 1f9de8a2 0/0/0/0 0 25
Transport 2026-06-19 d6ead8ae 0/0/0/0 0 15

Pending Findings

Every Open / In Progress finding across all modules, highest severity first. Resolved findings drop off this list but remain recorded in their module's findings.md (see REVIEW-PROCESS.md §4–§5). Full detail — description, location, recommendation — lives in the module's findings.md.

Critical (0)

None open.

High (0)

None open.

Medium (4)

ID Module Title
DataConnectionLayer-029 DataConnectionLayer Resubscribe during orphaned in-flight subscribe leaks an alarm feed
InboundAPI-031 InboundAPI Wait grace backstop tighter than the layer's round-trip slack
SiteRuntime-032 SiteRuntime Deleting a disabled instance leaks the deployed count
StoreAndForward-028 StoreAndForward StopAsync resets register-guard but not _bufferedCount, double-counting gauge on restart

Low (4)

ID Module Title
AuditLog-017 AuditLog AuditLog-014 guard path not exercised by a test
CentralUI-037 CentralUI RunInSandboxAsync doc comment omits new Database-throws behavior
ScriptAnalysis-009 ScriptAnalysis Inline Pass 1 comment no longer reflects parameterized base references
SiteRuntime-033 SiteRuntime Native-alarm doc stale re: per-condition eviction and cap return-to-normal