Repository navigation
feat(observability): emit quality signals and a write-journey SLO - #428
sylphx-desk-studio[bot] wants to merge 3 commits into
Conversation
The api reports its own problems as structured log lines (owner standards/quality-signals.md): one puzzled.issue.turn_failed.<route> line per 5xx, so the platform files one work item per fingerprint, and one puzzled.api.write.ok|failed line per finished write request, the events of a journey SLO. POST /signals:induce (key-guarded, changes nothing) is the production readback.
There was a problem hiding this comment.
The production induction check does not satisfy the one-issue acceptance, and ordinary RPC failures lose their identity. Please fix: 1. crates/puzzled-server/src/bootstrap/router.rs:57 - Add /signals:induce to the api path_prefixes in sylphx.toml; the documented public URL currently routes to the web service, not this handler. 2. crates/puzzled-server/src/bootstrap/signals_induce.rs:36 - Emit only one issue for an authorized induction. This explicit emission is followed by a second fingerprint from observe() when the handler returns 503. Test the composed router so a repeat produces only the same fingerprint. 3. crates/puzzled-server/src/shared/signals.rs:130 - Preserve bounded registered Connect service/method identity for fallback RPC requests; they have no Axum MatchedPath, so unrelated RPC 5xx failures currently collapse into puzzled.issue.turn_failed.unknown. Non-blocking: docs/metrics.md:65 inserts prose before the Revenue table row; move that paragraph below the complete table. CI is green for the reviewed head; the current tests exercise synthetic matched routes rather than these production composition paths.
What and why
Reworks this existing PR for the review finding that read-only Connect POSTs dilute write failures.
puzzled.user.write.ok|failedonly for explicitly enumerated user-mutating Connect RPCs. Read-only Connect POSTs, operator/job/Compute calls, bootstrap and induction are excluded. HTTP 5xx fails this availability journey; client rejection does not.puzzled.api.write.*events; infra#3360 selects the dedicated semantic events.Verification
A local isolated smoke harness imports the production signal/induction modules directly because the initial remote repository test command timed out without executing a test. The semantic regression failed before the emitter change; repository gates and an actual-binary HTTP smoke subsequently passed locally.
The QA-owned post-deploy acceptance remains: call
/signals:induceonce and then again with the same nonce; read exactly one Work item and a repeat note. Local emission checks do not claim a production Work readback.-D warningswith its two existing allowed lints) andcargo fmt --checkpassed.GetTodayProgressPOST returned 200 with no journey line; emptySubmitGuessreturned 400 with one availability-ok write; two induced failures returned 503 with exactly two occurrences of one nonce fingerprint and no induction write events.Paired PR: SylphxAI/infra#3360. No migrations.