Skip to content

Devostasis 0.1.6

Choose a tag to compare

@drevendev drevendev released this 06 Sep 15:08
· 36 commits to master since this release
47de188

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 as 304 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-After or 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 explicit ERROR / RATE_LIMITED observation 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 is PARTIAL and one that never started is UNKNOWN, both with the reason REQUEST_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.