catalog/ Reviewed vendor manifests (*.jsonc), ingested at startup
crates/
plexus-core/ Domain, store, governance, transports, poller, scheduler
src/ One module per concern (see ARCHITECTURE.md code map)
examples/ migration_rehearsal.rs
tests/ Integration tests; fixtures/ holds vendored wire goldens
plexus-module/ ck-plexus daemon and ck-plexus-admin operator CLI
src/bin/ ck-plexus-admin
examples/ facade_call.rs, vault_call.rs (live diagnostic clients)
plexus-probe/ QuickJS/WASI probe sandbox and its embedded guest
plexus-conformance/ Conformance checklist, stub vendors, live drift checker
docs/design/ Current contracts: wire formats, governance, concurrency
docs/rollout/ Operator rollout guides
docs/explainer/ Project overview page
scripts/ Test gate, trains, release, staging, deploy acceptance
- A vendor: a new
catalog/<vendor>.jsonc.crates/plexus-conformance/tests/shipped_catalog_ingests.rsproves it parses. - A wire tool or operation: a handler in
crates/plexus-module/src/lib.rs, declared incrates/plexus-module/src/manifest.rs. - A GitHub read: use the separate
github_readtool and its shared GitHub read implementation; thegithubfacade serves onlybot_requestandbindings.read. - Agent identity: daemon scope stamps in
crates/plexus-core/src/scope.rs, carried by route bindings incrates/plexus-module/src/lib.rs. Bot writes resolve the stamped agent's bound handle ingithub/facade/gates.rs; identity-token arguments are refused centrally before tool dispatch. - A governance gate:
authorizeincrates/plexus-core/src/governance.rs. - A table or column: append a
MigrationtoMIGRATIONSincrates/plexus-core/src/storage.rsand rehearse it withexamples/migration_rehearsal.rs. - A cursor strategy: implement
CursorStrategyinpoller.rs, add theCursorKindvariant inmanifest.rs, and widen thetrigger_subscriptionsCHECK constraint with a migration. - A GitHub bot request kind: map it in
crates/plexus-core/src/github/facade/request_map.rswith its argument allowlist and pre-reads, list its legs infacade/effects.rs, declare its actionsfacade_onlyincatalog/github_rest.jsonc, and add it to the import's action table ingithub/control/mod.rsso imported agents are granted it. - A transport: a new
crates/plexus-core/src/<transport>.rs, routed incrates/plexus-module/src/composition.rsand accepted by manifest validation. - Tests: unit tests under
#[cfg(test)]beside the code; integration tests incrates/*/tests/. Scratch files go throughtest_scratch, never a rawtemp_dir(). A test that runsck-plexusorck-plexus-adminlaunches it throughcortexkit_test_support::ckdev_binary, so the process is namedckdev-.... Deployed executables retain theck-plexusandck-plexus-adminnames; the distinctckdev-...filenames keep test launches distinguishable from them in process listings.
Snake case for files and functions, kebab case for crates, PascalCase for types. Manifests are named after the vendor (github_rest.jsonc).