1.9 KiB
1.9 KiB
Working on Sausage
Sausage is meant to be read and changed by agents, including its own agent. Keep it that way.
Priorities
- Correct. Every behavior in
PROTOCOL.mdhas a test incli/tests/. - Simple and short. Prefer the obvious code. No abstraction for one caller. No configuration that nobody asked for.
- Readable. A new reader must understand a file without the others. Each module starts with a doc comment that says what it owns.
- Efficient on the paths that run per call.
- Raw and minimal. Sausage has no permissions, sandboxing beyond WASI, limits, or authentication. Do not add them to the core. Add nothing to the host that a plugin (or the agent, by changing itself) could do.
Layout
cli/: the host (sausagebinary and library): the core, the nativecargoplugin, the WASI test runner, and the console.vfs/:sausage-vfs, the virtual filesystem for WASI guests. It knows nothing about Sausage.interface/:sausage-interface: OpenRPC documents, the compatibility check, and the generator of client code.sdk/:sausage-plugin, the SDK for Rust plugins, andsdk/macros/, its macros. Never published:cargopointssausage-plugin = "0.1"at its local copy.agent/: the agent plugin.sausage initembeds and builds it.examples/: small plugins. They are not workspace members.PROTOCOL.md: the contract between the core and the plugins. Change it in the same commit as the behavior.DECISIONS.mdsays why; when the two disagree,PROTOCOL.mdand the code win.
Checks
nix flake check -L # all tests below; CI runs this on every push
nix develop -c cargo test --workspace
nix develop -c cargo build --release -p agent --target wasm32-wasip2
nix develop -c cargo clippy --workspace
nix run -- init and nix run -- run must keep working without other
setup.