Files
ScadaBridge/docs/plans/questions.md
T
Joseph Doherty d1ade5653b docs(plans): bookkeeping sync — reconcile stale trackers with merged code
A verified audit of all ~90 plan documents (2026-08-01) found ~30 .tasks.json
trackers and several plan headers still reporting 'pending'/'draft' for work
fully merged to main. Sync them so future audits don't re-litigate closed work:

- Flip ~380 stale task statuses to completed across March/May/June/July
  trackers (audit-log series, milestones M5-M10, playwright waves, stillpending,
  LocalDb, ClusterClient->gRPC DoD rows, and more), each verified against
  code/git evidence before flipping.
- Annotate obsolete-not-done rows: ClusterClient CLI transport (never built,
  HTTP shipped), TreeView Areas/Instances pages (replaced by Topology),
  template-tree drag-drop (dropped for M9 menu reorder), otopcua item C
  (premise superseded by #17).
- Flip stale headers: aggregated-live-alarm + kpi-rollups 'Draft not executed'
  -> Delivered 2026-07-10; otopcua cutover-scope SCOPING -> DECIDED;
  scadabridge-rename -> Implemented; LocalDb phase1/2 status strings ->
  merged 28ca04d7.
- Fix doc drift: T9/T10 'deferred' -> shipped as SMS (Teams dropped); waitfor
  sandbox follow-up shipped; followups #52/#53/#54/#162/#207 resolved; purge
  TODO closed by PendingDeploymentPurgeActor; live-gate pre-existing failures
  #28/#29/#31 fixed; auto-down boot-alone residual superseded by self-first
  seeds; supersession banners on keep-oldest SBR + ClusterClient-era designs;
  requirements-traceability 'Pending' clarified as frozen plan-generation
  status.

Deliberately left pending (genuinely open, tracked in the pending-work list):
opcua-tag-browser task 19 (live smoke), ipsen tasks 7-8 (vd03 verification),
selfform task 7 (vd03 overlay, user-held), live-gate observation 1
(external-system delete orphan bug), otopcua item A + maxDepth calibration.
2026-08-01 08:53:56 -04:00

6.1 KiB

Implementation Questions

Purpose: Track questions and ambiguities discovered during plan generation that require follow-up before or during implementation.


Open Questions

Phase 7: Integrations

# Question Context Impact Status
Q12 What Microsoft 365 tenant/app registration is available for SMTP OAuth2 testing? Affects Notification Service OAuth2 implementation. Phase 7. Deferred — won't be known during development. Implement against Basic Auth first; OAuth2 tested when tenant available.

Resolved Questions

# Question Resolution Date
Q1 What .NET version should we target? .NET 10 LTS (released November 2025, supported through 2028). 2026-03-16
Q2 What Akka.NET version? Latest stable 1.5.x (currently 1.5.62). 2026-03-16
Q3 Monorepo or separate repos? Single monorepo with SLNX solution file (.slnx, the new XML-based format default in .NET 10). 2026-03-16
Q4 What CI/CD platform? None for now. No CI/CD pipeline. 2026-03-16
Q5 What LDAP server for dev/test? GLAuth (lightweight LDAP) in Docker. See infra/glauth/config.toml and docs/test_infra/test_infra_ldap.md. 2026-03-16
Q6 What MS SQL version and hosting? SQL Server 2022 Developer Edition in Docker. See infra/docker-compose.yml and docs/test_infra/test_infra_db.md. 2026-03-16
Q7 JWT signing key storage? appsettings.json (per environment). 2026-03-16
Q8 OPC UA server for dev/test? Azure IoT OPC PLC simulator in Docker. See infra/opcua/nodes.json and docs/test_infra/test_infra_opcua.md. 2026-03-16
Q10 Target site hardware? Windows Server 2022, 24 GB RAM, 1 TB drive, 16-core Xeon. 2026-03-16
Q11 Are there specific external systems (MES, recipe manager) to integrate with for initial testing? REST API test server (infra/restapi/) provides simulated external endpoints for External System Gateway and Inbound API testing. No real MES/recipe system needed for initial phases. 2026-03-16
Q15 Should the Machine Data Database schema be designed in this project, or is it out of scope? Out of scope — Machine Data Database is a pre-existing database at customer sites. Test infra seeds sample tables/data in infra/mssql/machinedata_seed.sql. 2026-03-16
Q13 Who is the development team? Solo developer with extensive Akka.NET experience and full availability. No parallelization constraints — phases are sequential. 2026-03-16
Q14 Is there an existing deployment target environment for early pilot testing? Yes — developer can test directly. No separate pilot environment needed. 2026-03-16
Q16 Should Result<T> use a OneOf-style library or be hand-rolled? Hand-rolled to maintain zero-dependency constraint (REQ-COM-7). 2026-03-16
Q17 Should entity POCO properties be required (init-only) or settable? { get; set; } for EF compatibility, with constructor invariants for required fields. 2026-03-16
Q18 What QualityCode values should the protocol abstraction define? Good, Bad, Uncertain as the minimal set, with room to extend. 2026-03-16
Q19 Should IDataConnection be IAsyncDisposable for connection cleanup? Yes — add IAsyncDisposable to support proper cleanup in DCL connection actors. 2026-03-16
Q-P1-1 Data Protection keys — DB or shared filesystem? DB storage (EF Core Data Protection key store). More portable than shared filesystem mount. 2026-03-16
Q-P2-1 What hashing algorithm for revision hashes? SHA-256. 2026-03-16
Q-P2-2 What serialization format for the deployment package contract? JSON for debuggability. Can add binary format later if needed. 2026-03-16
Q-P2-3 How should script pre-compilation handle references to runtime APIs? Compile against a stub ScriptApi assembly at central. Site uses real implementation. 2026-03-16
Q-P2-4 Semantic validation for CallShared — current library or deployed version? Validate against current library; re-validate on deploy. 2026-03-16
Q-P3A-1 Staggered Instance Actor startup batch size/delay? Default 20 actors per batch, 100ms delay. Make configurable. Tune during Phase 3B/8. 2026-03-16
Q-P3A-2 Single SQLite file or separate files per concern? Single file with separate tables. Simpler transaction management. 2026-03-16
Q-P3A-3 Akka.Persistence or direct SQLite for Deployment Manager singleton? Direct SQLite. Recovery is full read-all-configs-and-rebuild, not event replay. 2026-03-16
Q-P3B-1 Blocking I/O dispatcher config for Script Execution Actors? Use Akka.NET default blocking-io-dispatcher config. Tune during Phase 8 performance testing. 2026-03-16
Q-P3B-3 Rate of Change alarm evaluation time window? Configurable window, default per-second rate. Document in alarm definition schema. 2026-03-16
Q-P3B-4 Health report sequence number across failover? Resolved in design — offline detection handles the reset naturally. Central accepts lower seq after site goes offline/online. 2026-03-16
Q-P3C-1 S&F retry timers on failover — reset or continue? Continue from last_attempt_at to avoid burst retries. 2026-03-16
Q-P3C-2 Max parked messages per remote query? Paginated, 100 per page, consistent with Site Event Logging pattern. 2026-03-16
Q-P3C-3 Per-instance operation lock — in-memory or persisted? In-memory. Released on failover. Site state query resolves any ambiguity. 2026-03-16
Q-P4-1 API key values — auto-generated or user-provided? Auto-generated with copy-to-clipboard. User can regenerate. 2026-03-16
Q-P4-2 Health dashboard refresh interval? Updates on every report arrival (server push). No UI-side polling. Superseded (2026-08-01): as shipped, the Health dashboard refreshes on a 10s UI polling timer — the server-push answer recorded here was not the implemented behavior. 2026-03-16
Q-P4-3 Area deletion — cascade or bottom-up? Cascade delete child areas if no instances are assigned to any area in the subtree. 2026-03-16