Shared schemas, fixtures, and compatibility contracts for Homeostat.
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
hardKOrr a1b716f4e3
All checks were successful
Validate Protocol / validate (push) Successful in 12s
Merge optional acceptance join
2026-07-29 20:16:23 -05:00
.forgejo/workflows Release Protocol 0.1.4 compatibility 2026-07-29 13:46:06 -05:00
docs Release Protocol 0.1.1 2026-07-28 15:18:14 -05:00
fixtures Let a consumer decline the acceptance join 2026-07-29 20:16:23 -05:00
migrations Add the graph ledger and the verified-operation boundary 2026-07-26 14:58:01 -05:00
schemas Let a consumer decline the acceptance join 2026-07-29 20:16:23 -05:00
tools Wire composite references and add per-field rejecting fixtures (#5) 2026-07-29 05:07:07 +00:00
.gitignore Add the graph ledger and the verified-operation boundary 2026-07-26 14:58:01 -05:00
AGENTS.md Share Protocol guidance across agents 2026-07-29 00:06:59 -05:00
CLAUDE.md Share Protocol guidance across agents 2026-07-29 00:06:59 -05:00
NOTES.md Release Protocol 0.1.2 2026-07-29 00:11:57 -05:00
pyproject.toml Add executable continuation dependency protocol 2026-07-26 15:36:01 -05:00
README.md Wire composite references and add per-field rejecting fixtures (#5) 2026-07-29 05:07:07 +00:00
VERSION Let a consumer decline the acceptance join 2026-07-29 20:16:23 -05:00

Protocol

Protocol owns Homeostat's process-minimum JSON Schemas, compatibility declarations, migrations, and conformance fixtures. It does not own consumer architecture, commands, persona substance, or definitions of correctness.

The initial schemas make the functional control model concrete:

  • an invocation receives an assignment and trusted inputs;
  • a result returns human-readable output, evidence, findings, mutations, and typed continuations;
  • a continuation names a declared capability rather than executable workflow text;
  • a reading is observation only;
  • a finding is an evaluator's interpretation;
  • an invocation carries a budget that bounds the graph it belongs to; and
  • compatibility declares readable and writable schema versions.

Conformance

Fixtures are discovered by name, so a schema and its worked examples stay together:

  • fixtures/valid/<schema>.<variant>.json is a document the schema accepts. Every schema carries at least one, and the validator fails when one does not.
  • fixtures/invalid/<schema>.<variant>.json wraps a rejected document beside the expect clause naming the rejection it proves. A rejecting fixture that stops being rejected, or that fails for a different reason than it claims, fails the suite.

The validator also enforces the referential rules JSON Schema cannot express: a continuation orders itself only after a sibling that exists, a set of continuations contains no ordering cycle, a mutation reports only an effect that was declared, and an invocation's lineage matches the budget it carries. Interpreters persist an ordered continuation as deferred_dependency; it opens only after every reserved descendant of each prerequisite branch is terminal.

Install and run:

python3 -m pip install .
python3 tools/validate.py

Python 3.11+. The package requests jsonschema's format extra; the validator also registers deterministic date-time and uri fallbacks for supported jsonschema installations where those optional checkers are absent.

Versions

docs/versioning.md defines the wire version and the component release, what separates a minor from a major wire change, and the order in which readers and writers move. migrations/ records every transition.

NOTES.md carries open items this repository has identified but not closed.

Consumer-facing schemas

Consumers pin a Protocol checkout and read schemas directly from schemas/. Composite schemas are therefore self-contained single files: their repository owned part schemas are copied under $defs and referenced with local $ref fragments. Run python3 tools/bundle.py after changing a composite or one of its part schemas. The normal validator runs the same command with --check, so stale bundles cannot pass validation.