fix(config): refuse Echo's service name for a definition that is not Echo's #703

Merged
coilyco-ops merged 1 commit from fix/instance-name-not-a-live-service into main 2026-08-13 20:00:33 +00:00
Member

The fallback for an unset InstanceName is sirens-echo, which is a live running service. A process given another definition and no SIRENS_ECHO_INSTANCE does not report as unknown or misconfigured — it reports as Echo. That is the mechanism behind the 891 Deep-profile spans Quail found carrying service.name = sirens-echo on #542.

Why not either fix that was suggested

Empty should be unknown-service, or NewTelemetry should refuse to start.

Echo's own services/sirens-echo/deploy/values.yaml sets neither SIRENS_ECHO_DEFINITION nor SIRENS_ECHO_INSTANCE. Renaming the fallback renames Echo's live service and invalidates the dashboards built on it; refusing to start crash-loops Echo. Both are right about the defect and would break the service that has it.

The fallback is not wrong in general. It is wrong for a definition that is not Echo's, so it is refused there and kept here.

Blast radius, audited rather than assumed

Every manifest in bridge/deploy: exactly one deployment names a non-Echo definition, sirens-deep-values.yaml, and it sets SIRENS_ECHO_INSTANCE: sirens-deep two lines later. coilyco-general is not deployed anywhere. No running workload changes behaviour.

The mistake worth recording

The first version compared definitionPath to the default path string. That called this repository's own tests a foreign profile, because they reach Echo's definition through ../../agent/sirens-echo.yaml. Deploy names it absolutely and the tests relatively, and both are the same definition. The discriminator is the file, not the path to it. Eight existing tests failed and are what caught it.

Four other tests genuinely run Deep's definition and now set the instance name, which is exactly what Deep's real deployment already does.

Verification

ward exec gate PASS on all six steps.

Mutation: with the guard forced to if false, TestANonEchoDefinitionCannotDefaultToEchosName and TestAWhitespaceNameIsNotAName fail in a run where the package compiles. My first attempt at this mutation stashed the change and got a build failure instead, which is the #653 trap — reported here because the distinction is the whole value of the check.

closes #702

The fallback for an unset `InstanceName` is `sirens-echo`, which is a live running service. A process given another definition and no `SIRENS_ECHO_INSTANCE` does not report as unknown or misconfigured — it reports as Echo. That is the mechanism behind the 891 Deep-profile spans Quail found carrying `service.name = sirens-echo` on #542. ## Why not either fix that was suggested > Empty should be `unknown-service`, or `NewTelemetry` should refuse to start. Echo's own `services/sirens-echo/deploy/values.yaml` sets **neither** `SIRENS_ECHO_DEFINITION` nor `SIRENS_ECHO_INSTANCE`. Renaming the fallback renames Echo's live service and invalidates the dashboards built on it; refusing to start crash-loops Echo. Both are right about the defect and would break the service that has it. The fallback is not wrong in general. It is wrong for a definition that is not Echo's, so it is refused there and kept here. ## Blast radius, audited rather than assumed Every manifest in `bridge/deploy`: exactly one deployment names a non-Echo definition, `sirens-deep-values.yaml`, and it sets `SIRENS_ECHO_INSTANCE: sirens-deep` two lines later. `coilyco-general` is not deployed anywhere. No running workload changes behaviour. ## The mistake worth recording The first version compared `definitionPath` to the default path string. That called this repository's own tests a foreign profile, because they reach Echo's definition through `../../agent/sirens-echo.yaml`. Deploy names it absolutely and the tests relatively, and both are the same definition. The discriminator is the file, not the path to it. Eight existing tests failed and are what caught it. Four other tests genuinely run Deep's definition and now set the instance name, which is exactly what Deep's real deployment already does. ## Verification `ward exec gate` PASS on all six steps. Mutation: with the guard forced to `if false`, `TestANonEchoDefinitionCannotDefaultToEchosName` and `TestAWhitespaceNameIsNotAName` fail in a run where the package compiles. My first attempt at this mutation stashed the change and got a build failure instead, which is the #653 trap — reported here because the distinction is the whole value of the check. closes #702
fix(config): refuse Echo's service name for a definition that is not Echo's
All checks were successful
ci / image-build (pull_request) Successful in 22s
ci / test (pull_request) Successful in 36s
ci / publish-echo-image (pull_request) Has been skipped
ci / publish-observed (pull_request) Has been skipped
f4e79c196b
The fallback for an unset instance name is a live service, so a process given
another definition and no SIRENS_ECHO_INSTANCE reported as Echo and merged its
spans into Echo's metrics. That is the mechanism behind the 891 Deep-profile
spans carrying service.name = sirens-echo.

Quail suggested renaming the fallback to unknown-service or refusing to start
without a name. Echo's own values.yaml sets neither variable, so both would
break the service that has the defect. The fallback is not wrong in general,
only for a definition that is not Echo's, so it is refused there and kept here.

Audited bridge/deploy first: exactly one deployment names a non-Echo definition
and it sets the instance name two lines later. No workload changes behaviour.

The discriminator is the definition file, not the path to it. Comparing paths
called this repository's own tests a foreign profile, which is what caught it.

closes #702

Co-authored-by: Kai Siren <coilysiren@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
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!703
No description provided.