Files
scadalink-design/code-reviews
Joseph Doherty e49846603e docs(code-reviews): re-review batch 1 at 39d737e — CentralUI, CLI, ClusterInfrastructure, Commons, Communication
17 new findings: CentralUI-020..025, CLI-014..016, ClusterInfrastructure-009..010, Commons-013..014, Communication-012..015.
2026-05-17 00:41:21 -04:00
..

Code Reviews

Comprehensive, per-module code reviews of the ScadaLink 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 2
Medium 5
Low 10
Total 17

Module Status

Module Last reviewed Commit Open (C/H/M/L) Open Total
CLI 2026-05-16 9c60592 0/0/1/2 3 16
CentralUI 2026-05-16 9c60592 0/1/2/3 6 25
ClusterInfrastructure 2026-05-16 9c60592 0/0/1/1 2 10
Commons 2026-05-16 9c60592 0/0/0/2 2 14
Communication 2026-05-16 9c60592 0/1/1/2 4 15
ConfigurationDatabase 2026-05-16 9c60592 0/0/0/0 0 11
DataConnectionLayer 2026-05-16 9c60592 0/0/0/0 0 13
DeploymentManager 2026-05-16 9c60592 0/0/0/0 0 14
ExternalSystemGateway 2026-05-16 9c60592 0/0/0/0 0 14
HealthMonitoring 2026-05-16 9c60592 0/0/0/0 0 12
Host 2026-05-16 9c60592 0/0/0/0 0 11
InboundAPI 2026-05-16 9c60592 0/0/0/0 0 13
ManagementService 2026-05-16 9c60592 0/0/0/0 0 13
NotificationService 2026-05-16 9c60592 0/0/0/0 0 13
Security 2026-05-16 9c60592 0/0/0/0 0 11
SiteEventLogging 2026-05-16 9c60592 0/0/0/0 0 11
SiteRuntime 2026-05-16 9c60592 0/0/0/0 0 16
StoreAndForward 2026-05-16 9c60592 0/0/0/0 0 14
TemplateEngine 2026-05-16 9c60592 0/0/0/0 0 14

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 (2)

ID Module Title
CentralUI-020 CentralUI Idle-session redirect never fires: SessionExpiry polls a frozen auth-state snapshot
Communication-012 Communication gRPC client factory ignores the endpoint on a cache hit, breaking NodeA→NodeB stream failover

Medium (5)

ID Module Title
CLI-014 CLI update commands require "core" fields, making partial updates impossible
CentralUI-021 CentralUI DebugView stream callback mutates Dictionary off the render thread
CentralUI-022 CentralUI Deployments push handler fires InvokeAsync with no disposal guard
ClusterInfrastructure-009 ClusterInfrastructure DownIfAlone is an inert configuration knob — never consumed by the HOCON builder
Communication-013 Communication Site gRPC address changes are never applied; RemoveSiteAsync has no production caller

Low (10)

ID Module Title
CLI-015 CLI Component-CLI.md command surface has drifted again in two places
CLI-016 CLI WriteAsTable derives columns from the first array element only
CentralUI-023 CentralUI Residual bare catch {} blocks swallow JS interop errors
CentralUI-024 CentralUI Claim lookups use magic strings instead of JwtTokenService constants
CentralUI-025 CentralUI SessionExpiry polling/redirect path has no test coverage
ClusterInfrastructure-010 ClusterInfrastructure Validator does not enforce DownIfAlone = true despite the design doc requiring it
Commons-013 Commons DynamicJsonElement.TryGetIndex rejects non-int index values
Commons-014 Commons OpcUaEndpointConfigSerializer.Deserialize can mislabel a corrupt typed row as Legacy
Communication-014 Communication Untrusted gRPC correlation_id flows directly into an Akka actor name
Communication-015 Communication No test exercises the real gRPC client factory across a node flip