Devostasis 0.1.4
The fleet as data, not only as Markdown. No rule, threshold, window or gauge changed.
A history store now carries projects/index.json beside projects/README.md, under the contract devostasis.fleet.v1 (schema schemas/fleet-index.schema.json). One entry per project: locator and immutable project id, observed_at, bundle_id, previous_bundle_id, comparison_status, the project's own attention order, one row per Vital with band, evaluation status, gauge and demand level, and relative paths to the report and to the immutable bundle the entry came from. It is written by every fleet run and by devostasis index.
jq -r '.projects[] | select(.vitals.integrity.level == "CRITICAL") | .locator' projects/index.jsonThree properties make it safe to consume:
- it adds no meaning, since every value comes from the latest bundle, which stays authoritative for provenance, coverage and the reasoning behind a band;
- there is no aggregate;
- there is no cross-project ordering, and
cross_project_orderis explicitly null, because no accepted contract says what it means for one project's CRITICAL to outrank another's. A consumer that wants a fleet-wide priority applies its own policy and owns that decision.
Two failure modes are handled rather than assumed. A bundle written before the demand interface existed yields null levels and an empty attention order rather than invented ones. The document carries no generation timestamp and is ordered by project key, so a run that changes nothing rewrites the same bytes and a version-controlled store stays quiet.
This is the last change to the consumer surface that the implementation owns. The remaining one is the band ordering contract, which decides whether delta.json ever emits IMPROVED and WORSENED, and it belongs to the research process.
Usage: uses: drevendev/devostasis/.github/workflows/observe-self.yml@v0.1.4 (see docs/deployment.md).
Generated with Claude Code.