Files
scadalink-design/docs/plans/questions.md
Joseph Doherty 8c2091dc0a Phase 0 WP-0.10–0.12: Host skeleton, options classes, sample configs, and execution framework
- WP-0.10: Role-based Host startup (Central=WebApplication, Site=generic Host),
  15 component AddXxx() extension methods, MapCentralUI/MapInboundAPI stubs
- WP-0.11: 12 per-component options classes with config binding
- WP-0.12: Sample appsettings for central and site topologies
- Add execution procedure and checklist template to generate_plans.md
- Add phase-0-checklist.md for execution tracking
- Resolve all 21 open questions from plan generation
- Update IDataConnection with batch ops and IAsyncDisposable
57 tests pass, zero warnings.
2026-03-16 18:59:07 -04:00

6.3 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 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 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 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
Q9 What is the custom protocol? Is there an existing specification or SDK? LmxProxy — gRPC-based protocol (protobuf-net code-first, port 5050, API key auth). Client SDK: LmxProxyClient NuGet package. See Component-DataConnectionLayer.md for full API mapping and protocol details. 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-2 Should WriteBatchAndWaitAsync be on IDataConnection or protocol-specific? Add to IDataConnection — both OPC UA and LmxProxy can implement it. 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. 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