feat(jobs): every job refusal now records what it refused and whose fault it was #384

Merged
coilyco-ops merged 2 commits from feat/job-refusals-reach-telemetry into main 2026-08-13 11:40:34 +00:00
Member

The job HTTP surface failed through bare http.Error on every path, so nothing
it refused reached telemetry. sirens_echo.failures omitted this surface
entirely, and 159's caller-versus-service split could not see it at all.

All of the paths rather than the two I had my hands on. I fixed the oversize
message here in 351 and left the record, and lighting two of six would be worse
than leaving all six dark: a metric that covers part of a surface reads as
covering all of it.

Five codes under a new jobs stage, not fewer. queue_full is the service
declining work it could not schedule and the other four are the caller's
mistake, so collapsing them would destroy the split 159 is waiting on. not_found
stays one code for absent and another principal's job, because those are
deliberately indistinguishable and two codes would make an id probeable through
telemetry.

The catalog bound moves 27 to 32 and the stage bound 8 to 9. Both are guarded by
tests that had to be moved deliberately, which is what the exceptions doc means
by a reviewed increase.

Method-not-allowed and jobs-not-enabled stay bare. Both are answerable from the
route alone, and the turn endpoint's own method-not-allowed code is a precedent
I would rather not extend than one I want to match.

No response body changes. The messages were already right; only the record
behind them is new.

closes #383

Co-authored-by: Kai Siren coilysiren@gmail.com
Co-authored-by: Claude noreply@anthropic.com

The job HTTP surface failed through bare http.Error on every path, so nothing it refused reached telemetry. sirens_echo.failures omitted this surface entirely, and 159's caller-versus-service split could not see it at all. All of the paths rather than the two I had my hands on. I fixed the oversize message here in 351 and left the record, and lighting two of six would be worse than leaving all six dark: a metric that covers part of a surface reads as covering all of it. Five codes under a new jobs stage, not fewer. queue_full is the service declining work it could not schedule and the other four are the caller's mistake, so collapsing them would destroy the split 159 is waiting on. not_found stays one code for absent and another principal's job, because those are deliberately indistinguishable and two codes would make an id probeable through telemetry. The catalog bound moves 27 to 32 and the stage bound 8 to 9. Both are guarded by tests that had to be moved deliberately, which is what the exceptions doc means by a reviewed increase. Method-not-allowed and jobs-not-enabled stay bare. Both are answerable from the route alone, and the turn endpoint's own method-not-allowed code is a precedent I would rather not extend than one I want to match. No response body changes. The messages were already right; only the record behind them is new. closes #383 Co-authored-by: Kai Siren <coilysiren@gmail.com> Co-authored-by: Claude <noreply@anthropic.com>
feat(jobs): every job refusal now records what it refused and whose fault it was
All checks were successful
ci / test (pull_request) Successful in 30s
ci / publish-echo-image (pull_request) Has been skipped
ci / publish-observed (pull_request) Has been skipped
ci / image-build (pull_request) Successful in 19s
f6f188ed39
The job HTTP surface failed through bare http.Error on every path, so nothing
it refused reached telemetry. sirens_echo.failures omitted this surface
entirely, and 159's caller-versus-service split could not see it at all.

All of the paths rather than the two I had my hands on. I fixed the oversize
message here in 351 and left the record, and lighting two of six would be worse
than leaving all six dark: a metric that covers part of a surface reads as
covering all of it.

Five codes under a new jobs stage, not fewer. queue_full is the service
declining work it could not schedule and the other four are the caller's
mistake, so collapsing them would destroy the split 159 is waiting on. not_found
stays one code for absent and another principal's job, because those are
deliberately indistinguishable and two codes would make an id probeable through
telemetry.

The catalog bound moves 27 to 32 and the stage bound 8 to 9. Both are guarded by
tests that had to be moved deliberately, which is what the exceptions doc means
by a reviewed increase.

Method-not-allowed and jobs-not-enabled stay bare. Both are answerable from the
route alone, and the turn endpoint's own method-not-allowed code is a precedent
I would rather not extend than one I want to match.

No response body changes. The messages were already right; only the record
behind them is new.

closes #383

Co-authored-by: Kai Siren <coilysiren@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
Merge branch 'main' into feat/job-refusals-reach-telemetry
All checks were successful
ci / test (pull_request) Successful in 30s
ci / publish-echo-image (pull_request) Has been skipped
ci / publish-observed (pull_request) Has been skipped
ci / image-build (pull_request) Successful in 19s
f4d3c4cd10
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!384
No description provided.