Retire the config port and the demo binaries #135

Merged
perishadmin merged 3 commits from keel-substrate-alignment into main 2026-07-29 08:24:10 +00:00
Contributor

tests: the route layer answers to assertions, not to a demo

The REST surface and the course scenario lived only in .runseal TypeScript
that booted keel-api as a process. Absorb both into a reusable in-crate rig
that drives the axum Router directly, so the routing and serialization layer
is held by cargo test instead of by a binary nobody ships.

Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com

tests: the forge scenario comes home to the gate crate

The authority, gate, and relay scenarios lived in .runseal TypeScript that
booted the forge binary and drove it over a socket. Absorb all four acts into
keel-gate's own test crate: a rig that layers the operator middleware, the
gate doors, and a live relay over the axum Router, plus a local listener that
receives real webhook deliveries.

The sudo-journal check no longer greps process stderr; it asserts the deed
journal records who as sudo, which is the thing the log line stood for.

Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com

config: the library owns no file, and no binary to configure

keel read keel.toml through config::load, which gave a library ownership of a
configuration surface. The only consumers of that surface were two demo
binaries in crates/api; the three library consumers in the workshop took
nothing from it but a filename, and ensign inherited a repo-rooted keel.toml
it never wanted.

Delete the port rather than move it: Config, load, NAME, Listen, Cache, Hold,
Identity, and the orphaned db and pg Store fragments all go. Estate,
Generation, Cleanup, and Retain stay as keel vocabulary the caller constructs
and may carry inside its own config file. keel now depends on plumb nowhere.

crates/api goes with it. Its L2 scenarios already came home as route and forge
tests, so the guard keeps the coverage without a binary nobody ships.

Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com

tests: the route layer answers to assertions, not to a demo The REST surface and the course scenario lived only in .runseal TypeScript that booted keel-api as a process. Absorb both into a reusable in-crate rig that drives the axum Router directly, so the routing and serialization layer is held by cargo test instead of by a binary nobody ships. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> tests: the forge scenario comes home to the gate crate The authority, gate, and relay scenarios lived in .runseal TypeScript that booted the forge binary and drove it over a socket. Absorb all four acts into keel-gate's own test crate: a rig that layers the operator middleware, the gate doors, and a live relay over the axum Router, plus a local listener that receives real webhook deliveries. The sudo-journal check no longer greps process stderr; it asserts the deed journal records who as sudo, which is the thing the log line stood for. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> config: the library owns no file, and no binary to configure keel read keel.toml through config::load, which gave a library ownership of a configuration surface. The only consumers of that surface were two demo binaries in crates/api; the three library consumers in the workshop took nothing from it but a filename, and ensign inherited a repo-rooted keel.toml it never wanted. Delete the port rather than move it: Config, load, NAME, Listen, Cache, Hold, Identity, and the orphaned db and pg Store fragments all go. Estate, Generation, Cleanup, and Retain stay as keel vocabulary the caller constructs and may carry inside its own config file. keel now depends on plumb nowhere. crates/api goes with it. Its L2 scenarios already came home as route and forge tests, so the guard keeps the coverage without a binary nobody ships. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The REST surface and the course scenario lived only in .runseal TypeScript
that booted keel-api as a process. Absorb both into a reusable in-crate rig
that drives the axum Router directly, so the routing and serialization layer
is held by cargo test instead of by a binary nobody ships.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The authority, gate, and relay scenarios lived in .runseal TypeScript that
booted the forge binary and drove it over a socket. Absorb all four acts into
keel-gate's own test crate: a rig that layers the operator middleware, the
gate doors, and a live relay over the axum Router, plus a local listener that
receives real webhook deliveries.

The sudo-journal check no longer greps process stderr; it asserts the deed
journal records who as sudo, which is the thing the log line stood for.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
config: the library owns no file, and no binary to configure
All checks were successful
guard / guard (pull_request) Successful in 1m49s
92a35dc5e5
keel read keel.toml through config::load, which gave a library ownership of a
configuration surface. The only consumers of that surface were two demo
binaries in crates/api; the three library consumers in the workshop took
nothing from it but a filename, and ensign inherited a repo-rooted keel.toml
it never wanted.

Delete the port rather than move it: Config, load, NAME, Listen, Cache, Hold,
Identity, and the orphaned db and pg Store fragments all go. Estate,
Generation, Cleanup, and Retain stay as keel vocabulary the caller constructs
and may carry inside its own config file. keel now depends on plumb nowhere.

crates/api goes with it. Its L2 scenarios already came home as route and forge
tests, so the guard keeps the coverage without a binary nobody ships.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
perishadmin deleted branch keel-substrate-alignment 2026-07-29 08:24:11 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
PerishLab/keel!135
No description provided.