{ "planPath": "docs/plans/2026-07-24-sql-poll-driver.md", "tasks": [ { "id": 0, "subject": "Task 0: Scaffold Driver.Sql.Contracts project + register in slnx", "status": "completed" }, { "id": 1, "subject": "Task 1: SqlProvider/SqlTagModel enums + SqlDriverConfigDto", "status": "completed", "blockedBy": [ 0 ] }, { "id": 2, "subject": "Task 2: SqlTagDefinition + SqlEquipmentTagParser (strict enums, malicious-input safe)", "status": "completed", "blockedBy": [ 1 ] }, { "id": 3, "subject": "Task 3: Scaffold Driver.Sql runtime project + register in slnx", "status": "completed", "blockedBy": [ 0 ] }, { "id": 4, "subject": "Task 4: ISqlDialect + SqlServerDialect (QuoteIdentifier, catalog SQL, MapColumnType)", "status": "completed", "blockedBy": [ 1, 3 ] }, { "id": 5, "subject": "Task 5: SqlQueryPlan grouping + parameter binding (pure)", "status": "completed", "blockedBy": [ 2, 4 ] }, { "id": 6, "subject": "Task 6: Scaffold Driver.Sql.Tests + SqliteDialect + SqlitePollFixture", "status": "completed", "blockedBy": [ 3, 4 ] }, { "id": 7, "subject": "Task 7: SqlPollReader core \u2014 grouped read, bounded deadline, ordered slice-back", "status": "completed", "blockedBy": [ 5, 6 ] }, { "id": 8, "subject": "Task 8: SqlDriver shell \u2014 IDriver/ITagDiscovery/IReadable/ISubscribable/IHostConnectivityProbe", "status": "completed", "blockedBy": [ 7 ] }, { "id": 9, "subject": "Task 9: SqlDriverFactoryExtensions + connectionStringRef env resolution + enum guard", "status": "completed", "blockedBy": [ 8 ] }, { "id": 10, "subject": "Task 10: SqlDriverProbe (SELECT 1 liveness)", "status": "completed", "blockedBy": [ 4, 6 ] }, { "id": 11, "subject": "Task 11: Host registration \u2014 DriverTypeNames.Sql + factory + probe + guard test", "status": "completed", "blockedBy": [ 9, 10 ] }, { "id": 12, "subject": "Task 12: Scaffold Driver.Sql.Browser project + register in slnx", "status": "completed", "blockedBy": [ 3 ] }, { "id": 13, "subject": "Task 13: SqlBrowseSession \u2014 schema walk over dialect catalog", "status": "completed", "blockedBy": [ 4, 12, 6 ] }, { "id": 14, "subject": "Task 14: SqlDriverBrowser \u2014 env-ref/literal transient-connection open", "status": "completed", "blockedBy": [ 13 ] }, { "id": 15, "subject": "Task 15: AdminUI browser DI + SqlAddressPickerBody.razor", "status": "completed", "blockedBy": [ 14 ] }, { "id": 16, "subject": "Task 16: Env-gated central-SQL integration fixture + read round-trip", "status": "completed", "blockedBy": [ 8 ] }, { "id": 17, "subject": "Task 17: Injection regression test (bind value / reject identifier)", "status": "completed", "blockedBy": [ 7 ] }, { "id": 18, "subject": "Task 18: Blackhole/timeout live-gate on a dedicated mssql container", "status": "completed", "blockedBy": [ 16 ] }, { "id": 19, "subject": "Task 19: AdminUI typed Sql tag-config model + validator (string enums)", "status": "completed", "blockedBy": [ 1, 11 ] }, { "id": 20, "subject": "Task 20: SqlTagConfigEditor.razor shell", "status": "completed", "blockedBy": [ 19 ] }, { "id": 21, "subject": "Task 21: Live /run verification on docker-dev (picker + editor + deploy + read)", "status": "completed", "blockedBy": [ 11, 15, 20 ] } ], "lastUpdated": "2026-07-27", "closureNote": "Merged 4ad54037 + follow-ups 28c28667. Marked complete 2026-07-27 (deferment.md \u00a78.5)." }