feat(startup): report which optional capabilities are configured #544

Closed
coilyco-ops wants to merge 1 commit from eng/say-what-is-switched-on into main
Member

Three capabilities were found built and inert today — the content gate (#227), job-store durability (deploy #464), and the Echo scratchpad (#287). Each took a read of this repository and the deploy repository to establish, and each was found by accident while looking at something else.

The cause is a good property with a blind spot. Absence is deliberately inert: an unset variable offers no tools rather than tools that fail. The cost is that a capability nobody switched on is indistinguishable, from inside the process, from one that was never built — and nothing reported the difference. main.go logs only failures; discord.ready logs identity and build revision. No line said what the process can do.

What this adds

One structured log at boot: startup.capabilities, with a name and a boolean for each optional surface — Discord ingress, MCP roster, access policy, content classes, job-store durability, scratchpad, issue tracker.

It fires first in Run, before the job runner starts and before the gateway opens, so a process that dies during startup has already said what it was configured to be. That is the case where the answer is most wanted and currently least available.

Metadata only, and asserted

A name and a boolean. No path, endpoint, or configured value reaches it, so the telemetry contract needs no exception. TestTheReportCarriesNoConfiguredValue asserts that, because "report what is configured" is exactly the shape that invites someone to log the value next.

TestBlankConfigurationIsNotConfigured covers the case a values file produces by accident — a variable set to whitespace must not read as switched on.

The set is closed

TestEveryOptionalSurfaceIsReported counts the report against the optional fields, and TestTheOptionalFieldListMatchesTheConfigStruct reads config.go to check the list and the loader agree. Adding an optional surface and forgetting the report fails the suite rather than shipping a capability nobody can see.

Verified by mutation: dropping content_classes from the report turns the count test red, and restoring it turns it green.

What it does not do

Turns nothing on, changes no behaviour. Whether each of the three should be configured is a deployment decision and for two of them it is Kai's. This only makes the state legible.

closes #539

Three capabilities were found built and inert today — the content gate (#227), job-store durability (deploy #464), and the Echo scratchpad (#287). Each took a read of this repository *and* the deploy repository to establish, and each was found by accident while looking at something else. The cause is a good property with a blind spot. Absence is deliberately inert: an unset variable offers no tools rather than tools that fail. The cost is that **a capability nobody switched on is indistinguishable, from inside the process, from one that was never built** — and nothing reported the difference. `main.go` logs only failures; `discord.ready` logs identity and build revision. No line said what the process can do. ## What this adds One structured log at boot: `startup.capabilities`, with a name and a boolean for each optional surface — Discord ingress, MCP roster, access policy, content classes, job-store durability, scratchpad, issue tracker. It fires **first in `Run`**, before the job runner starts and before the gateway opens, so a process that dies during startup has already said what it was configured to be. That is the case where the answer is most wanted and currently least available. ## Metadata only, and asserted A name and a boolean. No path, endpoint, or configured value reaches it, so the telemetry contract needs no exception. `TestTheReportCarriesNoConfiguredValue` asserts that, because "report what is configured" is exactly the shape that invites someone to log the value next. `TestBlankConfigurationIsNotConfigured` covers the case a values file produces by accident — a variable set to whitespace must not read as switched on. ## The set is closed `TestEveryOptionalSurfaceIsReported` counts the report against the optional fields, and `TestTheOptionalFieldListMatchesTheConfigStruct` reads `config.go` to check the list and the loader agree. Adding an optional surface and forgetting the report fails the suite rather than shipping a capability nobody can see. Verified by mutation: dropping `content_classes` from the report turns the count test red, and restoring it turns it green. ## What it does not do Turns nothing on, changes no behaviour. Whether each of the three should be configured is a deployment decision and for two of them it is Kai's. This only makes the state legible. closes #539
feat(startup): report which optional capabilities are configured
All checks were successful
ci / image-build (pull_request) Successful in 23s
ci / test (pull_request) Successful in 34s
ci / publish-echo-image (pull_request) Has been skipped
ci / publish-observed (pull_request) Has been skipped
e997f15d01
Three capabilities were found built and inert today, each by reading this
repository and then deploy to see whether a variable was set: the content
gate, job-store durability, and the Echo scratchpad. Nothing anywhere
said so, because absence is deliberately inert and inert looks exactly
like never-built from inside the process.

startup.capabilities names each optional surface and whether it is
configured. A name and a boolean, so no path or endpoint reaches a log
and the telemetry contract is unchanged.

It fires first in Run, before the job runner and the gateway, so a
process that dies starting up has already said what it was meant to be.

The set is closed by test: a capability added later and left out of the
report fails the suite.

closes #539

Co-authored-by: Kai Siren <coilysiren@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
coilyco-ops 2026-08-13 15:33:58 +00:00
  • closed this pull request
  • requested review from coilysiren
All checks were successful
ci / image-build (pull_request) Successful in 23s
ci / test (pull_request) Successful in 34s
ci / publish-echo-image (pull_request) Has been skipped
ci / publish-observed (pull_request) Has been skipped

Pull request closed

Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
coilyco-gaming/sirens-echo!544
No description provided.