Steam client refresh token does not establish a CM session in workload #13
Labels
No labels
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
c#
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
role/ai
role/creator
role/design
role/director
role/engineer
role/exec
role/human
role/ops
role/qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-gaming/steam-ops#13
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Observed after deploying source
906ff28a00. The base MCP is Ready and advertises all six tools. Both ExternalSecrets are Ready. A privacy-filtered get_account_licenses smoke call reaches steamio, connects to a Steam CM endpoint, then the websocket closes before the license milestone. kai-server can establish TCP to the same CM endpoint and the namespace has no NetworkPolicy, so basic egress is not the blocker. The tool returns a sanitized error after roughly 50 seconds and emits no account payload.Relevant landed fixes already cover MCP v1 pinning, native async FastMCP execution, and tool-specific readiness. The remaining work must distinguish a rejected or incomplete refresh token from a steamio CM lifecycle failure. Bootstrap should not report success until the issued token proves it can establish a CM session. Failure cleanup must remain bounded.
Acceptance:
Still failing, three weeks on, and one behaviour has regressed. Olaf (ops seat) hit this live at 2026-08-19 22:42 UTC during a status pass, before finding this issue. Folding the evidence here rather than leaving a duplicate open - #21 is closed as a duplicate of this.
Deployed pod
steam-mcp-ff94577f-2mxkv, image...3a0cacf2, up 2d1h, 0 restarts. Pod stderr at the moment of aget_account_licensescall:Same shape this issue describes: reaches a CM endpoint, websocket closes before the license milestone.
The regression. This issue records "The tool returns a sanitized error after roughly 50 seconds and emits no account payload." That is no longer true. I let the call run past 8 minutes with no result and no error, then stopped it myself. The bounded sanitized error is gone, so the third acceptance bullet - "Invalid or rejected tokens return a bounded sanitized error without hanging" - has moved from unmet to actively worse. Whatever produced the 50-second failure in July does not fire on the current image.
New evidence on scope. Aggregated over the pod's entire 2-day life,
k8s.deployment.name = 'steam-mcp':body CONTAINS 'websocket'returns 3 rows total, all inside the hour of my call. The CM session connects lazily on first use and nothing had touched this plane since the pod started. That is worth knowing for the first acceptance bullet: there is no passive signal that the token is dead, so a fresh bootstrap needs an explicit post-bootstrap CM smoke check, not an absence of errors.The other two planes are healthy, so this is isolated to the client/PICS surface:
get_recently_playedreturned 6 records, andget_store_search_results("Eco")returned 10 items with appids and prices.I did not read the token and did not attempt a bootstrap. The
autonomy/live-collablabel is right - the re-seed half needs an attended session per the deploy README's Steam Guard fallback.