feat(notify): add dormant diagnostics capability foundation#108
Conversation
Compile the approved pairing, namespace, and roundtrip descriptors into a side-effect-free internal catalog that loadConfig initializes only in its unavailable state. Expose no activation transition, listener, endpoint, credential, persistence, namespace, probe, Syncthing mutation, Relay call, or new configuration. Config zero values retain legacy-helper behavior and Trigger v1 remains unchanged.
Pin exact capability IDs, versions, suite, flags, legacy upgrade, helper downgrade, and unknown-input behavior. Use source and binary sentinels to prove the foundation has no imports, activation functions, operational endpoints, logging, persistence, or reflected private inputs while the existing Trigger v1 wire regression stays exact.
📝 WalkthroughWalkthroughIntroduces an internal dormant diagnostics capability catalog with three fixed contracts, status evaluation, defensive catalog access, and legacy handling. ChangesDiagnostics capability foundation
Estimated code review effort: 3 (Moderate) | ~20 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 7✅ Passed checks (7 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
What & why
Adds the M2 dormant helper foundation after merged M1. The Notify helper now compiles the three approved Decision 022-024 capability descriptors into an internal value-only catalog, but has no available/ready state and no activation transition.
The real configuration loader constructs only the dormant catalog. Existing zero-value Config literals continue to model a legacy helper. No app or external caller can currently reach, query, advertise, enable, or use this catalog.
Component(s)
Dormant boundary
unavailable/disabled.unavailable/helper-missing.unsupported/unknown, without reflecting the input.main.gocontains exactly the private field declaration and dormant constructor assignment; no runtime path evaluates the catalog.Exact catalog
eu.vaultsync.diagnostics.helper-pairing/1, protocol 1, suite 1.eu.vaultsync.diagnostics.namespace/1, protocol 1, suite 1.eu.vaultsync.diagnostics.correlated-roundtrip/1, protocol 1, suite 1, required flags0x0f.Testing
cd notify && go test ./... -count=1— passedcd notify && go vet ./...— passedcd notify && go test -race ./... -count=1— passedcd notify && go test -run '^$' -fuzz=FuzzDiagnosticsContractCanonicalCBOR -fuzztime=10s— passed, 312,872 executionsgofmt -l .— emptygit diff --check— passednotify/scripts/tests/install-dry-run-test.sh— passed without privileged or mutating commandsgovulncheck v1.6.0 ./...— no vulnerabilitiesb4c8435c1e749a9a2d4ddccec6e805644ef28a52No signing, archive, production service, StoreKit, APNs, Trigger, status, probe, Relay, deployment, packaging publication, helper release, or rollout operation was performed.
Existing-user and compatibility impact
Security, privacy, migration, and rollback
Release gate
VaultSync 2.0 remains NO-GO. The strongest implemented proof remains a fresh successful local file
ItemFinishedapply after cursor, RFC3339-nanosecond time, and stable engine-generation baselines. Upload is not implemented or confirmed. Controlled download is not implemented or confirmed. Roundtrip is not implemented or confirmed. Authenticated correlation is not implemented. Helper-first rollout and rollback remain unproven.Owner approval is required before merge.