Southbound conformance: PAUSED code, eight-measure health, schema alias, renderable panels - #11
Merged
Merged
Conversation
… panels Aligns the camera adapter with the amended SOUTHBOUND contract (core docs/SOUTHBOUND.md S2.2/S5), applied to its domain command surface: - The paused-refusal wire code is now the standardized top-level PAUSED (was INSTANCE_PAUSED) - wire-visible change. The refusal semantics are unchanged: a paused camera refuses NEW capture work; in-flight captures, sb/reconnect, PTZ, and read-only verbs are unaffected. repoll stays N/A (D-CAM-24); there is no poll cycle to trigger. - southbound_health now carries exactly the eight shared measures: adds writeErrors (Count, 60) and signalsSubscribed (Count, 1). Both are structurally constant 0 for a camera - no southbound signal-write surface (PTZ failures ride CameraPtz) and no SouthboundSignalUpdate inventory (data points are images announced on app/image/*) - emitted so the family stays fleet-uniform; documented in DESIGN S19.1 and docs/reference/metrics.md. - Panel descriptors raised to the renderable floor while keeping the view set/ids: summary/keyValueList widgets carry rows, commandSummary carries verbs (the actions key is retired), widgets carry id/title, and no widget names a writeVerb. signalGrid and treeBrowser stay absent by design (no signal inventory, no hierarchical browse; sb/discover is an active scan) - recorded in D-CAM-26. - The #/$defs/instance schema alias already conformed (landed in #10). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014iQDskU2E1HLStYHoZrSTn
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Aligns
camera-adapterwith the amended SOUTHBOUND contract (coredocs/SOUTHBOUND.md§2.2 / §4 / §5), applied to this adapter's domain command surface (it is a camera, not a signal adapter — honest N/A calls below). Checklist status:1.⚠️ wire-visible
PAUSEDrefusal code — MIGRATEDThe paused-refusal wire code is now the standardized top-level
PAUSED(wasINSTANCE_PAUSED). This is a breaking wire-visible change for any client pinning the old string. Semantics unchanged: a paused camera refuses NEW capture work (sb/capture,sb/capture-submit, group forms) while in-flight captures run to completion;sb/reconnect, PTZ, and read-only verbs are unaffected.repollremains N/A per D-CAM-24 (capture-on-demand/schedule-driven; no poll cycle exists). DESIGN.md (D-CAM-24, error catalog) anddocs/reference/messaging-interface.mdupdated wholesale.2. Eight-measure
southbound_health— MIGRATEDNow exactly
connectionState, publishLatencyMs, pollLatencyMs, readErrors, staleSignals, reconnects, writeErrors, signalsSubscribed. The two added measures are structurally constant 0 for a camera, emitted so the family stays fleet-uniform, with the rationale documented in code, DESIGN §19.1, anddocs/reference/metrics.md:writeErrors: the adapter serves no southbound signal-write surface (sb/writedoes not exist; PTZ failures ride theCameraPtzfamily), so no device-path write failure can occur.signalsSubscribed: a camera serves noSouthboundSignalUpdateinventory — its data points are images announced onapp/image/*— so the gauge reads 0 (the contract's "0 while disconnected" holds trivially).The health test now pins the exact eight-measure definition.
3.
#/$defs/instanceschema alias — CONFORMED-ALREADYconfig.schema.jsonalready aliases"instance": { "$ref": "#/$defs/camera" }(landed on main in #10). No change.4. Panel descriptor floor — MIGRATED (with honest N/A parts)
Kept the existing view set/ids (
overview/signals/diagnostics, order 10/20/30, panelscope:"instance"). Raised to the renderable floor:summary/keyValueListwidgets carryrows,commandSummarywidgets carryverbs(the nonstandardactionskey is retired), all widgets carryid/title, and no widget names awriteVerb. N/A parts: nosignalGrid(the adapter serves nosb/signals/sb/readsignal inventory; the domaincameraRoster/captureSurfacekinds remain, now with ids/verb bindings, for a future console) and the previously registered baretreeBrowserwidget is removed — see item 5. Each panel now renders meaningfully in the shipped console via its rows/commandSummary widgets; panel-bound verbs are asserted to be verbs the adapter actually registers.5. Hierarchical
sb/browsepanel mode — NOT-APPLICABLEThe adapter serves no
sb/browseverb and has no hierarchical address space to browse. Its former diagnosticstreeBrowserwidget had no browse verb to bind (sb/discoveris an active WS-Discovery network scan with a closed request schema that would reject the console's{ref, depth, maxRefs}arguments) and could never render — it is removed in favor of renderablekeyValueList+commandSummarywidgets bound tosb/discover/sb/queue-status. Recorded in D-CAM-26.Validation
cargo checkOK;cargo testgreen — 631 lib tests (+ integration suites, 1 ignored live fixture) — after normalizing the fresh worktree's CRLF checkout ofk8s/configmap.yamlback to the committed LF bytes (acore.autocrlf=truecheckout artifact that breaksdeployment_config.rs's exact-newline marker split on Windows checkouts; no repo content was changed).cargo testgreen — 631 lib tests + all integration suites (the extended health/panel tests pass).cargo clippy --all-targets(CI runs clippy): 0 warnings.cargo llvm-cov+diff-cover) run in CI.Follow-ups (out of scope per the migration spec)
registerScoped/setCommandAvailability— requires a core version bump beyond the pinned rev (36a70c4).deployment_config.rsmarker split (tolerating CRLF) would remove the local-checkout fragility noted above.🤖 Generated with Claude Code
https://claude.ai/code/session_014iQDskU2E1HLStYHoZrSTn