Devostasis 0.1.6
Spend provider quota only on what changed. No rule, threshold, window or gauge changed.
A fleet run asked the same questions every day and paid full rate-limit price for answers that had not moved, and a rate-limited day degraded bands to UNKNOWN rather than reusing the previous answer. Three limits now shape how evidence is fetched, and none of them changes what it means.
- Conditional requests.
--cache <dir>keeps the entity tags of previous runs (devostasis.http-cache.v1). An unchanged answer comes back as304 Not Modified, replays the stored body, and costs a round trip but no rate-limit quota. A missing or corrupt cache costs requests, never correctness. - Bounded retries. A retryable failure waits only as long as the provider asked, through
Retry-Afteror the rate-limit reset, and only while a single wait and a total waiting budget allow it. A primary rate limit resets on the hour, so waiting it out inside a run would be a hang: that case becomes an explicitERROR / RATE_LIMITEDobservation and the run moves on. - A request budget per project,
--request-budget <n>, so one very active repository cannot starve the rest of a fleet. When it bites, a partially enumerated inventory isPARTIALand one that never started isUNKNOWN, both with the reasonREQUEST_BUDGET_EXHAUSTED, and the receipt carries a matching capability note. A short list is never reported as complete.
Receipt devostasis.receipt.v2 no longer records the request count. The receipt is identity-bearing, so without this change turning the cache on would have silently moved every bundle_id for unchanged evidence. How the evidence was fetched belongs to the client rather than to the evidence; the counts moved to the bundle's post-identity run_meta, which now also carries billed_requests, conditional_hits and retries. Bundles written under devostasis.receipt.v1 remain verifiable, because verification uses each bundle's stored preimage.
Bundle identities therefore change once for identical evidence. Comparability is unaffected: the receipt is not part of the semantic configuration.
Twenty tests cover the three limits, including one that builds the same repository with a cold and a warm cache and asserts the bundle identities match.
Usage: uses: drevendev/devostasis/.github/workflows/observe-self.yml@v0.1.6 (see docs/deployment.md).
Generated with Claude Code.