Landing blocker for #61 and #63: the deployment checkout is 12 commits behind and `merge --ff-only` refuses while tracked paths are dirty. Discard is not available here (workspace policy: no `checkout`/`stash` on shared state), so the dirt is committed. - `agent/APPEND_SYSTEM.md`: the point-of-use / one-work-log / PR-link doctrine, already byte-identical to `origin/main` (`cmp` against the trunk blob: no difference). No new prose — the commit exists so the trunk merge can proceed. - `agent/config.yml` and `agent/managed-skills/**`: the machine-live tier the heartbeat owns (AGENTS.md § Live-sync tiers). `ALLOW_SECRETS=1` was used, deliberately and after auditing the staged diff by hand: the only credential-shaped strings in it are two copies of `AKIA0000000000000EXAMPLE` — the inert all-zero AWS example id — and they appear inside the two skill pages that teach that exact placeholder shape. This checkout is still running the pre-#61 hook; the merged gate (value-scoped placeholder filter, `71601f7`) exempts this value, so the refusal dies with this landing. No `--no-verify` was used: the gate ran and its verdict is recorded here. Refs #61
3.8 KiB
name, description
| name | description |
|---|---|
| radiance-knob-arm-live-verify | Arm a radiance scheduler/cadence knob on a live endpoint and prove it engaged: per-knob /metrics meter, argv-vs-default truth, the three behaviour probes, no bench. |
Arming a radiance knob on a live endpoint (no bench)
Use for a one-flag change on a radiance endpoint (e.g. PREFILL_INTERLEAVE=0→1,
BUSY_PREFILL_CHUNK, CHECKPOINT_POLICY) under the "swap, don't instrument" law:
edit the trio → deploy the one service → prove the flag reached the engine, the
engine's own counter moved, and behaviour survived. Never a bench unless Frank orders one.
Before you set a value
- Unset means default, and the engine prints what it resolved. Grep
/proc/$(pidof radiance)/cmdline(sudo tr '\0' ' ' < …) and the container ledger (podman logs <svc>as the deploy user — rootless storage,sudo podmanfinds nothing). The ledger line names the resolved value and whether a budget clamped it (--checkpoint-slots 20 [auto] … of a budget of 31.5 GiB, bound by None). - Prove the flag exists in the pinned build before promising it:
--helpfrom the running container image, not from a vendored tree. Inventing a name (floor) cost a doc rewrite;config_parserefuses unknown enums at boot. - Some flags are conditional in the serve script (e.g.
--prefill-interleaveis passed only when the env value is> 0), so a zero→nonzero arm adds argv; re-check argv after deploy.
Meter map (/metrics, names carry the radiance: prefix)
| change | meter that must move |
|---|---|
--prefill-interleave |
engine_steps_held_total (read 0 for a 34.7 h boot while the knob sat at 0; 126 within 4 min of arming) |
--busy-prefill-chunk |
engine_prefill_chunks_capped_total |
| step-time contention generally | decode-only engine_step_seconds_decode_total/engine_steps_decode_total vs (step_seconds_total − step_seconds_decode_total)/(steps_total − steps_decode_total) |
| prefix retention | prefix_hit_cut_tokens_total (labels: no_snapshot), vllm:num_preemptions_total |
Trap: latency lives under vllm:, cadence under radiance:. A radiance:-only query
finds no TTFT/ITP and no preemption and reads as "nothing stalls". The arena / expert slab /
heat engine / prefill stager have no metric at all — that half is boot ledger + /stats.
Post-deploy proof, in order
- argv contains the flag (or the ledger shows the resolved value).
/health200 (in_flight,queue_capcome back in the body).- Three probes on the endpoint itself: exact-reply chat (
temperature 0, expect the literal word — reasoning tokens are normal inreasoning_content); atoolscall expecting a realtool_callsobject; a solid-colour PNG viaimage_url(never the legacy top-levelimagesfield) withmax_tokens ≥ 512or thinking eats the budget and a thinking model reads as blind. - The knob's meter left zero-state. If it didn't move, the arm did nothing — say so.
- Effect is judged later from real traffic buckets, not from a synthetic load.
Deploy cycle gotchas that cost the most time
deploy.shmust run from the dev checkout literally onmain, tree clean including untracked files; it pushes its ownmain. Never from an agent worktree or the target.- Name the service (
--service <svc>); a baredeploy.sh <host>is a fleet-wide drain. - Health binds only after the full load (~100 s here, gate budget much larger) — 503 during load is not a fault.
- Post-deploy for a recently-benched LLM service:
systemctl show <svc> -p DropInPathsmust be empty before believing anything.
Rollback
One env line back to the previous value + redeploy the same service. Write the meter and the rollback into the endpoint's vault page (that page is the owner), never into a new page.