Relationships
#3338 Extensions accept export const behavior, extensions/behaviors/ and a behaviors: manifest key alongside model
Opened by stack72 · 10/12/2026· Shipped 10/13/2026
Summary
Let extension authors use the behavior spelling, while the model spelling stays accepted and is still what swamp writes. Split out of swamp-club#3334, which keeps workflow steps, serve grants and audit filters.
Scope
export const behavior = {...}accepted whereverexport const modelis: export detection, the model kind adapter, the extension loader (both exports in one file is an error), the remote worker bundle cache, content extractor and catalog-gap checks, push messages.packages/testingexportsdefineBehavioras an alias ofdefineModel.- An
extensions/behaviors/directory loaded alongsideextensions/models/(CLI, serve reload and watcher, source repos, auto-discovery). The same type in both directories is a duplicate-type error. - The extension manifest accepts a
behaviors:key merged intomodels:(both keys together is an error). Push re-emitsmodels:and keeps the archive'smodels/layout, so pull and the registry are unchanged.
Acceptance
- Extensions built with the last release load, push and pull identically.
- Swapping
export const modelforexport const behaviorgives identical extractor metadata, catalog results and runtime behaviour, locally and on a remote worker. - A pushed archive from a
behaviors:manifest parses with the last release. - Minimum worker and client version for behavior-spelled extensions is documented.
Direction
behavior replaces model as the product term wherever people or agents read it. swamp-club#3265 shipped swamp behavior run (alias behaviour) as a CLI word only; this series takes the term product-wide.
Glossary: model → behavior, model definition → behavior definition, model type → behavior type, model output → behavior output. "method" stays: swamp behavior run <behavior> <method>.
Compatibility rule (applies to every issue in the series)
The existing system MUST NOT regress. Every change is additive: behavior is the preferred spelling, and every model spelling and stored format keeps working exactly as today.
Unchanged: the models/ directory and .swamp/ layout, JSON output keys and error codes (model_not_found, model_id, ...), audit action names as stored (model.method.run, ...), serve protocol, CEL model.*, libswamp and domain class names, log categories. Writers keep emitting the old form of any stored format.
No-regress gates: swamp-uat passes unchanged (new UAT tests are only added, tracked separately); legacy commands give byte-identical output and exit codes on the released binary vs the branch binary in log and JSON mode; every new test is red-checked against main.
Series
- Design record — the glossary and compatibility rules in design/
2a. Factory refactor of the
modelcommand tree, no visible change 2b. The fullswamp behaviorcommand tree and behavior wording - Skills and generated agent guidance
- Serve dashboard wording
- Stored formats accept the behavior spellings alongside model ones
Shipped
Click a lifecycle step above to view its details.
Sign in to post a ripple.