The claim path already constrained a factory to its enrolled scope, but the heartbeat trusted self-reported capabilities — so (with enforcement on) a factory could advertise e.g. engine:codex it was never granted, polluting the engine picker (GET /fleet/factories) and routing/explain decisions even though a codex job still couldn't be claimed by it. Heartbeat now intersects the factory's self-reported capabilities with the token scope when enforcement is ON: it may report FEWER (an engine temporarily unavailable) but never MORE than enrolled. Enforcement OFF is unchanged (self-reported caps pass through verbatim). Covered by new route tests. Generated with [Devin](https://cli.devin.ai/docs) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com> |
||
|---|---|---|
| .. | ||
| cowork-service | ||
| extraction-service | ||
| mcp-server | ||
| monitoring | ||
| platform-service | ||