railiance-cluster/workplans/RAIL-BS-WP-0014-state-hub-surge-headroom.md
codex b36ac28b49
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 2s
Publish pending unscheduled pods in cluster observations.
RAIL-BS-WP-0014: residual millicores count scheduled pods only.
state_hub_preflight_observation matches the STATE-WP-0091 fixture shape.

Assistant: grok
Assistant-Session: 01a09dc1-b21e-77e1-919e-fcad2f82b267
2026-09-14 10:34:27 +02:00

42 lines
1.5 KiB
Markdown

---
id: RAIL-BS-WP-0014
type: workplan
title: "Keep node remaining CPU honest for State Hub surge and pending demand"
domain: financials
repo: railiance-cluster
status: finished
owner: codex
topic_slug: railiance
origin: residual
origin_ref: STATE-WP-0091
created: "2026-09-14"
updated: "2026-09-14"
related: [RCLUSTER-WP-0014, STATE-WP-0091, CUST-WP-0071]
state_hub_workstream_id: "d89863aa-dc89-5a9d-be00-4f558a16d70b"
---
Residual from STATE-WP-0091. State Hub now refuses promotion when remaining
CPU cannot cover its 100m API surge, and when unrelated pending pods would
eat the 5m sliver above 105m. Cluster observation must keep publishing
allocatable, allocated, **and pending-unrelated** demand. 105m remaining is
not capacity admission for factory or other zero-request workloads.
## Include pending pods in capacity observations
```task
id: RAIL-BS-WP-0014-T01
status: done
priority: high
state_hub_task_id: "d90c384e-8a99-550f-b8b8-6314c073f2dc"
```
Extend `tools/observe_cluster_resources.py` / `make cluster-observe` so the
published observation names pending unscheduled pods and their requests.
State Hub's preflight already consumes that shape. Do not treat residual
millicores as a scheduling guarantee.
**Done 2026-09-14.** `build_observation` names pending unscheduled pods, uses
effective pod requests (init vs containers), and emits
`state_hub_preflight_observation` in the STATE-WP-0091 fixture shape.
Residual CPU counts scheduled pods only. `not_a_scheduling_guarantee` is
explicit. Unit test covers a 50m pending pod that does not inflate remaining.