Boundary CLI and adapters for Git, Forgejo, providers, and telemetry.
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
hardKOrr 7c84616344
All checks were successful
Validate Transducer / validate (push) Successful in 14s
Merge review binding to the pull request
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-30 15:56:29 -05:00
.forgejo/workflows Stream hydrated provider prompts over stdin 2026-07-29 15:23:48 -05:00
src/transducer Bind a review to the pull request its push produced 2026-07-30 15:56:29 -05:00
tests Bind a review to the pull request its push produced 2026-07-30 15:56:29 -05:00
.gitignore Enforce the graph bound and reach the verified-operation boundary 2026-07-26 14:58:19 -05:00
AGENTS.md Compose execution brains from sensed state 2026-07-29 01:53:20 -05:00
CLAUDE.md Share Transducer guidance across agents 2026-07-29 00:07:23 -05:00
compatibility.json Bind a review to the pull request its push produced 2026-07-30 15:56:29 -05:00
NOTES.md Align Transducer release declarations 2026-07-29 04:07:24 -05:00
pyproject.toml Bind a review to the pull request its push produced 2026-07-30 15:56:29 -05:00
README.md Schedule dependency-aware graph fan-out 2026-07-26 15:36:12 -05:00

Transducer

Transducer is Homeostat's boundary CLI. Its namespaces keep observation, evaluation, action, AI invocation, graph expansion, and reconciliation distinct while sharing Forgejo authentication, Protocol validation, correlation, redaction, and OTLP emission.

transducer schema validate --schema protocol/result.schema.json --instance result.json
transducer observe revision
transducer observe command -- python3 -m unittest
transducer observe http --url http://127.0.0.1:3080/api/v1/version --revision "$HEAD"
transducer observe telemetry --query '{service_name="homeostat-transducer"}'
transducer observe environment --environments deployment/environments.json --name homeostat-local
transducer evaluate exit-code --reading reading.json --expected 0
transducer evaluate expectation --reading reading.json --pointer /status --equals 200
transducer graph start --policy .forgejo/homeostat/policy.json ...
transducer graph expand --policy .forgejo/homeostat/policy.json --result result.json
transducer graph materialize --policy ... --parent invocation.json --result result.json
transducer graph join --policy ... --parent invocation.json --forgejo "$FORGEJO"
transducer act comment-upsert ...
transducer act review ...
transducer act merge ...
transducer invoke command ...
transducer invoke run ...
transducer telemetry emit ...

Merges are always scheduled with Forgejo's merge_when_checks_succeed, so act merge records authorization against the exact head and lets Forgejo gate on its own checks.

A graph is bounded in two directions. budget.depth is enforced from invocation lineage alone. budget.max_graph_invocations is enforced against an append-only ledger — one Forgejo issue per graph, one comment per entry, keyed on budget.root and located by budget.ledger.repository. The same entries answer which invocations are still outstanding. Ready children reserve before their parent retires, so handoff never looks spuriously quiet. continuations[].after parks dependency-blocked work until every descendant of each prerequisite branch is terminal. The same release pass opens a capability declaring join: graph_quiescent only after running and blocked work are gone.

The verified_operation boundary is evidenced by operations performed against a running deployment, not by reading code. observe http, observe command, and observe telemetry record what the deployment did without judging it; evaluate expectation turns one reading into one finding bound to a subject revision; forgejo.completion.verify records the boundary only after authorize_operation accepts the evidence against both the exact head and the exact environment descriptor revision reported by observe environment.

Observe mode is containment on both providers: Codex runs in a literal read-only sandbox, and Claude's Bash access is an explicit allowlist of read-only git introspection. A git.commit_push effect stages exactly the files its author declares in parameters.paths — undeclared workspace debris never reaches a commit.

Install and test:

python3 -m pip install -e .
python3 -m unittest discover -s tests -v

No command creates a Forgejo organization or repository.