851e4cf5e0
Merge branch 'fix/r3-03-restart-resubscribe-watchdog' — R3-03: SpawnChild always sends the desired set (operator Restart + supervision restart re-provision, stale-alarm-set re-subscribe, incarnation check, 10 s backoff); watchdog grace = max(LastSuccessfulRead, connectedSince) (archreview 03/S16, S17, U6)
Joseph Doherty
2026-08-20 10:40:11 -04:00
6d0002889a
docs(archreview): R3-03 review outcome — F1/F2/F3 fixed with red-before evidence
Joseph Doherty
2026-08-20 10:39:47 -04:00
0793b0cba8
fix(runtime): rate-limit the supervision reprovision — deferred, not dropped (review F3)
Joseph Doherty
2026-08-20 10:39:13 -04:00
48efdac600
fix(calculation): hold evaluation on Bad inputs and propagate the worst input status; status-keyed dedup (05/STAB-19)
Joseph Doherty
2026-08-20 10:37:29 -04:00
ae97b32c82
test(runtime): comms-loss → identical-value recovery contract + silent-resubscribe control (03/S15)
Joseph Doherty
2026-08-20 10:27:48 -04:00
b8911eaa14
docs(plans): mark R3-01 T9 done; T10 remains pending (live gate, orchestrator-run)
Joseph Doherty
2026-08-20 10:27:45 -04:00
a222421374
docs: mesh gRPC ingress is AllowAnonymous; the PSK interceptors are the gate (R3-01)
Joseph Doherty
2026-08-20 10:27:40 -04:00
2b7100cf19
fix(runtime): route a reprovision by incarnation, not driver id (review F2)
Joseph Doherty
2026-08-20 10:27:02 -04:00
659d5f51e4
test(integration): a Cluster:Roles-only node wires the driver stack
Joseph Doherty
2026-08-20 10:26:34 -04:00
4dde5cb8bf
docs(plans): mark R3-01 T7 and T8 done
Joseph Doherty
2026-08-20 10:25:12 -04:00
f3832aa48c
test(host): a mesh gRPC map added outside MeshGrpcEndpoints fails the build
Joseph Doherty
2026-08-20 10:25:02 -04:00
edd01fcc34
fix(runtime): a changed alarm set re-subscribes instead of latching (review F1)
Joseph Doherty
2026-08-20 10:24:52 -04:00
82ad98e1a9
chore(docker-dev): parameterise Security__Auth__DisableLogin on the central pair
Joseph Doherty
2026-08-20 10:24:49 -04:00
e2497c908d
test(cluster): guard that role reads live only in the authority (archreview theme 4)
Joseph Doherty
2026-08-20 10:21:36 -04:00
9bd3366b28
docs(plans): mark R3-01 T6 done
Joseph Doherty
2026-08-20 10:21:01 -04:00
306ea1aecf
test(host): driver-only nodes carry no authorization middleware (03/S14 exemption pinned)
Joseph Doherty
2026-08-20 10:20:56 -04:00
e475f7b4ab
Merge branch 'fix/r3-05-acl-hot-path-expiry' — R3-05: bounded ConfigDb API-key lookup (deadline + TTL) and clock-driven key-expiry revalidation of live monitored items (archreview 03/S18, 03/S19)
Joseph Doherty
2026-08-20 10:19:13 -04:00
62515f3279
fix(security): pin the cached-key expiry guard, meter cache_hit after it, and close two wiring gaps (review fixes)
Joseph Doherty
2026-08-20 10:18:52 -04:00
7d98ef9332
feat(runtime): audit refs still BadNoCommunication after a reconnect (dedup-trap tripwire)
Joseph Doherty
2026-08-20 10:16:01 -04:00
353ed6bb58
docs(plans): mark R3-01 T5 done
Joseph Doherty
2026-08-20 10:15:03 -04:00
8471db4b1d
test(host): no-PSK mesh calls report the interceptor's verdict, not a cookie 401/redirect
Joseph Doherty
2026-08-20 10:14:55 -04:00
4380e2e78a
fix(cluster): fail start when a late config layer changes Cluster:Roles (role overlays may not set it)
Joseph Doherty
2026-08-20 10:11:25 -04:00
c1ad9e24d2
docs(archreview): R3-03 execution notes — final verification + deviation summary
Joseph Doherty
2026-08-20 10:11:16 -04:00
3314a1f98d
feat(host): warn when Cluster:Roles and OTOPCUA_ROLES disagree; boot banner names the winning source
Joseph Doherty
2026-08-20 10:08:03 -04:00
815423bd88
docs(plans): restore literal UTF-8 em-dashes in R3-01 tasks.json (cosmetic)
Joseph Doherty
2026-08-20 10:07:20 -04:00
97f4ea0c9e
fix(runtime): comms loss marks raw + UNS value nodes BadNoCommunication, value retained (archreview 03/S15)
Joseph Doherty
2026-08-20 10:07:12 -04:00
af9d3a69ac
docs(plans): mark R3-01 T4 done
Joseph Doherty
2026-08-20 10:06:55 -04:00
458c84c34f
test(host): mesh gRPC boundary under the production auth stack (FallbackPolicy live)
Joseph Doherty
2026-08-20 10:06:47 -04:00
5c7e5725a5
test(runtime): first supervision-restart test — child re-initialises + re-subscribes (archreview 03/U6)
Joseph Doherty
2026-08-20 10:05:45 -04:00
e46c1db5e5
fix(cluster): gossiped-role predicates compare case-insensitively — a miscased peer no longer un-elects the Primary
Joseph Doherty
2026-08-20 10:04:16 -04:00
a9b592aeb8
docs(security): correct revocation latency (activation vs open session) + S18/S19 knobs
Joseph Doherty
2026-08-20 10:04:03 -04:00
04019e9414
feat(runtime): publish actor routes status-only batches to the sink
Joseph Doherty
2026-08-20 10:03:25 -04:00
dfab7f614d
test(integration): key expiry stops a live subscription over the wire, with no deploy
Joseph Doherty
2026-08-20 10:00:52 -04:00
ec5b48bfcd
feat(opcua): IOpcUaAddressSpaceSink.WriteStatuses — status-only batch write retaining the node value (03/S15)
Joseph Doherty
2026-08-20 10:00:47 -04:00
2b9a397b2d
fix(runtime): re-provision a driver child after a supervision restart (archreview 03/S6, S16)
Joseph Doherty
2026-08-20 09:56:05 -04:00
6874a562f3
test+docs(mqtt): end-to-end Bad-then-identical-replay recovery
Joseph Doherty
2026-08-20 09:55:11 -04:00
a4f12bccef
fix(host): run monitored-item revalidation on a low-frequency timer (archreview 03/S19)
Joseph Doherty
2026-08-20 09:55:01 -04:00
d97e441979
test(runtime): operator restart re-subscribes the respawned child (archreview 03/S16, U6)
Joseph Doherty
2026-08-20 09:53:38 -04:00
b7d20d14a8
fix(mqtt/sparkplug): initial push on subscribe + BadNoCommunication on connection loss
Joseph Doherty
2026-08-20 09:52:15 -04:00
1759f60476
docs(plans): mark R3-01 T3 done
Joseph Doherty
2026-08-20 09:51:43 -04:00
e3cf363703
fix(host): LocalDb sync endpoint opts out of the cookie fallback via an empty-prefix anon group
Joseph Doherty
2026-08-20 09:51:33 -04:00
bcec88ef70
fix(cluster): all four role-scoped validators read the authority — 'Driver' no longer skips every driver rule (archreview 01/C-9)
Joseph Doherty
2026-08-20 09:51:23 -04:00
b09f78396f
test(opcua): pin clock-driven expiry in the revalidation pass; correct the only-trigger remark
Joseph Doherty
2026-08-20 09:50:39 -04:00
ac2f8dc801
fix(mqtt): stale observed refs BadNoCommunication on connection loss so the identical replay recovers (05/STAB-18 shape a)
Joseph Doherty
2026-08-20 09:46:56 -04:00
2f90156408
docs(plans): mark R3-01 T2 done
Joseph Doherty
2026-08-20 09:46:40 -04:00
b05ebd6353
fix(host): mesh gRPC endpoints opt out of the AdminUI cookie FallbackPolicy (archreview 03/S14)
Joseph Doherty
2026-08-20 09:46:30 -04:00
792e8f422a
fix(host): Program.cs derives roles from the one authority, not OTOPCUA_ROLES alone (archreview 01/S-12 = 03/C5)
Joseph Doherty
2026-08-20 09:46:27 -04:00
39a10a277a
fix(security): wrap the ConfigDb key store on admin nodes + registration guard
Joseph Doherty
2026-08-20 09:45:08 -04:00
7dfd6dcc9f
fix(cluster): AkkaClusterOptions.Roles is the EffectiveRoles instance, not a second derivation
Joseph Doherty
2026-08-20 09:43:54 -04:00
6048257dfe
feat(observability): meter bounded API-key store lookups
Joseph Doherty
2026-08-20 09:43:07 -04:00
ac9a71bcbd
docs(plans): mark R3-01 T1 done
Joseph Doherty
2026-08-20 09:43:06 -04:00
6dab72a479
refactor(host): extract MapOtOpcUaMeshGrpcServices (one authority for the five mesh maps)
Joseph Doherty
2026-08-20 09:42:49 -04:00
7af9baab39
fix(mqtt): initial push of cached snapshots on (re)subscribe — the push-model forceRaise (05/STAB-18 shape b)
Joseph Doherty
2026-08-20 09:42:25 -04:00
7702616716
feat(cluster): EffectiveRoles — one role authority with one precedence + two-layer normalization (archreview 01/S-12, 01/C-9)
Joseph Doherty
2026-08-20 09:41:54 -04:00
37288d4df5
feat(security): short TTL read-through cache in front of the ConfigDb key store
Joseph Doherty
2026-08-20 09:40:56 -04:00
3b56e5bd01
fix(security): bound the API-key store call under the SessionManager lock (archreview 03/S18)
Joseph Doherty
2026-08-20 09:38:41 -04:00
faea4ebfca
feat(core): InputQuality.WorstOf — the one worst-of-input rule (archreview R3-02 contract)
Joseph Doherty
2026-08-20 09:38:16 -04:00
daaeb854d6
fix(runtime): every spawn hands the child its desired subscriptions (archreview 03/S16)
Joseph Doherty
2026-08-20 09:36:52 -04:00
bdc81a1372
refactor(runtime): one desired-subscription payload authority (_desiredByDriver)
Joseph Doherty
2026-08-20 09:34:49 -04:00
72329eabdd
docs(archreview): round-3 plan R3-02 (stale-Good family — one quality contract, four seams); index task count
Joseph Doherty
2026-08-20 09:33:36 -04:00
a801e2aefb
fix(runtime): comms-loss grace is per connection — max(LastSuccessfulRead, connectedSince) (archreview 03/S17)
Joseph Doherty
2026-08-20 09:32:24 -04:00
dd7f495432
docs(archreview): round-3 plan R3-05 (ACL hot-path deadline + clock-driven key expiry); index task count
Joseph Doherty
2026-08-20 09:28:53 -04:00
5fd65d190e
docs(archreview): round-3 plan R3-03 (restart re-subscribe + watchdog grace); index task count
Joseph Doherty
2026-08-20 09:28:03 -04:00
a011a53329
docs(archreview): round-3 tranche-1 plans R3-01 (mesh gRPC AllowAnonymous) + R3-04 (one role authority); 00-INDEX round-3 table with executor model assignments
Joseph Doherty
2026-08-20 09:27:17 -04:00
7c77a8c799
Merge branch 'docs/archreview-r3-rereview' — round-3 architecture re-review at 12b0035a
Joseph Doherty
2026-08-20 09:09:46 -04:00
44f6408e1c
docs(archreview): round-3 re-review at 12b0035a — 7 domain reports + 00-OVERALL rewritten in place, STATUS.md round-3 section
Joseph Doherty
2026-08-20 09:09:46 -04:00
12b0035a6b
Merge branch 'fix/acl-anchor-browse-transit' — ACL browse transit reaches the shared root folder (narrow Browse grants were unreachable by navigation; r3 T7 live-gate finding)
Joseph Doherty
2026-08-18 10:02:18 -04:00
f679b2f10a
docs(plans): annotate the r3 register — browse-transit-below-realm-root closed by 89630ee4+ff9d617a
Joseph Doherty
2026-08-18 10:01:48 -04:00
ff9d617a1b
docs(acl): correct the Browse override's 'two namespace root folders' remark — one shared anchor
Joseph Doherty
2026-08-18 09:59:03 -04:00
22ae18365b
docs(acl): record the shared-root-folder browse-transit mapping
Joseph Doherty
2026-08-18 09:45:09 -04:00
89630ee418
fix(acl): browse transit reaches the shared root folder (narrow Browse grants were unreachable)
Joseph Doherty
2026-08-18 09:45:04 -04:00
698a818cb1
Merge branch 'perf/followups-r3' — r2 register closed (ACL CAS loop, S7 worst-state-wins health, 404 mechanism named) + ScadaBridge rows 38/39 (Roslyn test de-flake, LocalDb conditional registration) + four live gates (FetchAndCache, alarm ratchet, ACL-enabled enforcement, 404 catch)
Joseph Doherty
2026-08-18 09:11:23 -04:00
837d8a17eb
test(scripting): timeout under starvation is not a leak; share the exhaustion-reason constant
Joseph Doherty
2026-08-18 08:05:51 -04:00
3f04a4d4e5
docs(docker-dev): first-POST-404 caught — Traefik entrypoint-before-dynamic-config window + no-body POST binding verified
Joseph Doherty
2026-08-18 08:00:47 -04:00
326ca33800
docs(plan): record the T9 test rename in the live plan
Joseph Doherty
2026-08-18 07:49:54 -04:00
34829ea0d7
test(scripting): Evaluate_racing_ClearCompiledScripts no longer assumes a single clear per evaluation
Joseph Doherty
2026-08-18 07:48:44 -04:00
df53391646
test(localdb): deregister preserves data + partial-flip fails loudly (review round)
Joseph Doherty
2026-08-18 07:42:06 -04:00
3e62f1617b
fix(localdb): registration follows replication config — baseline on enable, deregister self-heal on disable (pair-symmetric)
Joseph Doherty
2026-08-18 07:25:01 -04:00
e29fab19f6
test(acl): correct the array-cell comment — captured locals do take ref (re-review nit)
Joseph Doherty
2026-08-18 07:13:16 -04:00
1765e30063
fix(s7): worst-severity error message + OCE flushes recorded pass evidence (review round)
Joseph Doherty
2026-08-18 07:10:51 -04:00
f4b91dbbab
test(acl): race harness — hit diagnostics, 10k rounds, idiom notes (review round)
Joseph Doherty
2026-08-18 07:10:44 -04:00
088a1a1e81
docs(plan): r3 amendment — ScadaBridge register rows 38/39 join as Tasks 9-10
Joseph Doherty
2026-08-18 07:00:42 -04:00
b35e423c1d
fix(s7): a read pass that observes nothing reports nothing — empty pass no longer clears Faulted
Joseph Doherty
2026-08-18 07:00:33 -04:00
441b34a391
fix(acl): make InvalidateIfStale a monotonic-max CAS loop — stamp publication is never deferred
Joseph Doherty
2026-08-17 07:15:30 -04:00
4c16118105
fix(s7): read-pass health is worst-state-wins — a mixed pass can no longer report Healthy
Joseph Doherty
2026-08-17 07:14:32 -04:00
e9ba174156
docs(config): OTOPCUA_CONFIG_MODE is gone — site nodes are hardcoded FetchAndCache (Phase 4)
Joseph Doherty
2026-08-17 07:07:51 -04:00
f64b10b964
docs(plan): perf follow-ups round 3 — r2 register closes + four local live gates
Joseph Doherty
2026-08-17 07:06:07 -04:00