Skip to content

Commit cafac4f

Browse files
committed
export: public tree rebuilt from 2f75ed1
Built by plans/export-fixtures/make_export.py from tracked master blobs only.
1 parent 5c3d394 commit cafac4f

42 files changed

Lines changed: 6146 additions & 5944 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.github/gates/claims.tsv‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -243,15 +243,15 @@ PIN-seed-owns-schema-six-en docs/meclaw-overview.en.md declare it and deliberate
243243
PIN-mutation-invalid-params-de docs/meclaw-overview.md - `invalid_params` (GH #404) — der `params`-Block einer zu instanziierenden Zelle pinned a_declaration_the_boot_would_refuse_is_refused_at_the_mutation
244244
PIN-mutation-invalid-params-en docs/meclaw-overview.en.md - `invalid_params` (GH #404): the `params` block of a cell about to be instantiated does pinned a_declaration_the_boot_would_refuse_is_refused_at_the_mutation
245245
PIN-web-bundle-destructive-de docs/cell-types.md **Was das fuer ein Bundle heisst, das aufraeumt und neu baut** (GH #405) pinned a_bundle_whose_creates_are_all_refused_still_applies_its_deletes
246-
PIN-web-bundle-destructive-en docs/cell-types.en.md **What that means for a bundle that clears and rebuilds** (GH #405) pinned a_bundle_whose_creates_are_all_refused_still_applies_its_deletes
246+
PIN-web-bundle-destructive-en docs/cell-types.en.md What that means for a bundle that clears and rebuilds (GH #405) pinned a_bundle_whose_creates_are_all_refused_still_applies_its_deletes
247247
PIN-web-bundle-two-sends-de docs/cell-types.md ein zerstoerendes Bundle wird als ZWEI geschickt pinned the_documented_recipe_sends_two_bundles_and_keeps_the_tree
248248
PIN-web-bundle-two-sends-en docs/cell-types.en.md a destructive bundle is sent as TWO pinned the_documented_recipe_sends_two_bundles_and_keeps_the_tree
249249
PIN-web-rebind-runtime-de docs/cell-types.md **`port` und `bind` sind zur Laufzeit änderbar — und damit wird eine Zusage zurückgenommen (GH #410).** pinned a_params_update_moves_the_port_of_a_running_display
250-
PIN-web-rebind-runtime-en docs/cell-types.en.md **`port` and `bind` change at runtime — and this retracts a promise (GH #410).** pinned a_params_update_moves_the_port_of_a_running_display
250+
PIN-web-rebind-runtime-en docs/cell-types.en.md `port` and `bind` change at runtime, and this retracts a promise (GH #410). pinned a_params_update_moves_the_port_of_a_running_display
251251
PIN-web-rebind-move-then-write-de docs/cell-types.md **Die Reihenfolge ist verschieben, dann schreiben.** pinned a_bind_nothing_can_resolve_leaves_the_old_listener_serving
252-
PIN-web-rebind-move-then-write-en docs/cell-types.en.md **The order is move, then write.** pinned a_bind_nothing_can_resolve_leaves_the_old_listener_serving
252+
PIN-web-rebind-move-then-write-en docs/cell-types.en.md The order is move, then write. pinned a_bind_nothing_can_resolve_leaves_the_old_listener_serving
253253
PIN-web-rebind-boot-failure-de docs/cell-types.md **Ein fehlgeschlagener Bind ist per Nachricht heilbar.** pinned a_display_that_could_not_bind_at_boot_is_moved_by_a_message
254-
PIN-web-rebind-boot-failure-en docs/cell-types.en.md **A failed bind is curable by message.** pinned a_display_that_could_not_bind_at_boot_is_moved_by_a_message
254+
PIN-web-rebind-boot-failure-en docs/cell-types.en.md A failed bind is curable by message. pinned a_display_that_could_not_bind_at_boot_is_moved_by_a_message
255255
PIN-code-warm-semantics-de docs/cell-types.md Ein Warm-Runner ändert Latenz, nie Semantik pinned warm_answers_the_same_bytes_as_cold
256256
PIN-code-warm-semantics-en docs/cell-types.en.md A warm runner changes latency, never semantics pinned warm_answers_the_same_bytes_as_cold
257257
PIN-code-resident-serial-de docs/cell-types.md genau ein** Kind, strikt serieller FIFO pinned twenty_messages_come_back_in_the_order_they_went_in

‎CHANGELOG.md‎

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,55 @@ documented `error_code` strings (README § Stability). Anything that breaks one
99
them is listed under **Breaking** in its release, with the migration named. The
1010
Rust crates are internals and move without notice.
1111

12+
## [0.32.1] — 2026-09-08
13+
14+
A patch release without a code change. The README and the public documentation
15+
were rewritten so that a person can read them: shorter sentences, one thought per
16+
sentence, no slogans, every number with a source in the tree. Nothing in the
17+
contract moved, and no migration is needed from 0.32.0.
18+
19+
### Changed
20+
21+
- `README.md` went from 234 to 91 lines. The first paragraph and the five
22+
quickstart commands are unchanged. The nine "why" sections left the README;
23+
they live in `docs/why/`. The stability section keeps all five contract
24+
surfaces, the additive rule on `0.x`, and the Breaking rule for this file.
25+
- `docs/why/` has six essays instead of nine. `names` became the section "Names
26+
of the shipped roles" in the glossary. `ontology` had no subject of its own;
27+
the mechanism it described (`add_templates`) is in `everything-is-a-file` and
28+
`rewiring`. `you-talk-it-shows` claimed there was no voice in this repository,
29+
which has been false since 0.31.0; its one durable paragraph moved into
30+
`an-os-for-agents`. `rsi` is now `self-modification`, same thesis, no slogan.
31+
- `docs/meclaw-overview.md` lost about a quarter of its words. Every rule,
32+
every error code, every table and every code block is still there; the 54
33+
spec-claim anchors and the heading structure are unchanged. What fell was
34+
repetition between sections, defect narratives from past audits, and
35+
justification prose.
36+
- `docs/cell-types.md`, `docs/config.md`, `docs/rewiring.md`,
37+
`docs/voice-wire-protocol.md`, `docs/store-backed-tool-loop.md`,
38+
`docs/costs.md` and `docs/glossary.md` were rewritten paragraph by paragraph
39+
with their facts, tables and examples intact. The German editions of the paired
40+
documents follow the English ones in the same commit.
41+
- `templates/README.md` describes each of the 40 templates in a few sentences.
42+
The version history that used to sit in the catalogue lives in each template's
43+
own README.
44+
- The private assistant name that served as an example in `docs/cell-types.md`,
45+
`docs/rewiring.md`, `templates/voice/README.md` and the `talky` and `voice`
46+
descriptions is now the neutral example name Sam.
47+
- Corrected numbers on the public surface: 16 built-in cell types plus `hive`
48+
(the text said 15), 40 templates (the text said 38), 15 cells in
49+
`memory-hive` (the text said thirteen), and three cell types that receive a
50+
default sandbox profile (the text said four; `mcp` reads the same profile
51+
but must declare it).
52+
- `CONTRIBUTING.md`, `ROADMAP.md`, `examples/README.md` and `docs/README.md`
53+
were rewritten for tone only; every issue and register anchor in the roadmap
54+
is unchanged.
55+
56+
### Migration
57+
58+
None. No API route, no `template.json` or `config.json` key, no port, no
59+
`error_code` and no `web` route changed.
60+
1261
## [0.32.0] — 2026-09-07
1362

1463
A minor release, and what it adds is a **typed offer**. Until now the fenced

‎CONTRIBUTING.md‎

Lines changed: 76 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,27 @@
11
# Contributing to meclaw
22

3-
meclaw is a framework for building agentic harnesses, and swarms of them, as a directory tree.
4-
Issues, discussions, and PRs are all open. This file tells you how to build it, how to test it,
5-
where the truth lives, and what makes a good first contribution.
6-
7-
First rule: read the honest status before you start. meclaw is a **0.x** proof of concept
8-
for the DSL and the self-modifying substrate; the version that shipped last is the top entry
9-
in [`CHANGELOG.md`](CHANGELOG.md). The mutation substrate is real and tested, and so
10-
is the authoring path on top of it: `templates/builder` drafts a manifest, `templates/submit`
11-
hands it in, and the colony is what applies it. If a change claims macOS support, or claims
12-
federation / multi-builder / a native Anthropic provider, it does not match reality and will not
13-
land. Keep us honest.
3+
meclaw is one Linux binary that runs a tree of agents. Every folder in the tree is one actor
4+
with one `config.json` and one SQLite file, and the edges between folders are the routes a
5+
message may take. Issues, discussions and pull requests are open.
6+
7+
This is a 0.x proof of concept for the DSL and the self-modifying substrate; the version
8+
that shipped last is the top entry in [`CHANGELOG.md`](CHANGELOG.md). The mutation substrate
9+
is real and tested, and so is the authoring path on top of it: `templates/builder` drafts a
10+
manifest, `templates/submit` hands it in, and the colony is what applies it. macOS support,
11+
federation, more than one builder per scope and a native Anthropic provider do not exist. A
12+
change that claims one of them does not match the tree and will not land. Keep me honest.
1413

1514
## Build it
1615

17-
Linux and rustup. `rust-toolchain.toml` pins an **exact** Rust version, so there is nothing to
18-
choose: rustup fetches that toolchain on the first `cargo` command and your build is the same
19-
one CI runs. The floor is set by edition 2024, which needs 1.85 or newer; the pin is currently
20-
well above it.
16+
Linux and rustup. `rust-toolchain.toml` pins an exact Rust version, so there is nothing to
17+
choose: rustup fetches that toolchain on the first `cargo` command, and your build is the one
18+
CI runs. Edition 2024 sets the floor at 1.85, and the pin sits well above it.
2119

22-
The pin is deliberate (GH #406). An unpinned channel made the gate depend on the calendar —
23-
byte-identical code passed clippy one evening and failed it the next, because a new stable had
24-
promoted a lint — and it meant "green locally" said nothing, since the workstation and CI were
25-
never on the same compiler. Raising the pin is therefore its own commit, which handles whatever
26-
lints the new version denies in the same move. A build break from a newer stable is a piece of
27-
scheduled work, not something that happens to a release.
20+
The pin came out of GH #406. On an unpinned channel the gate depended on the calendar.
21+
Byte-identical code passed clippy one evening and failed it the next, because a new stable had
22+
promoted a lint. "Green locally" then said nothing, since the workstation and CI were never on
23+
the same compiler. Raising the pin is therefore its own commit, and that commit handles
24+
whatever lints the new version denies.
2825

2926
```bash
3027
git clone https://github.com/mmeyerlein/meclaw
@@ -54,16 +51,16 @@ cargo fmt --check
5451

5552
Notes that will save you time:
5653

57-
- Run the suite in **debug** (`cargo test`). This is the canonical, deterministic run. A couple
58-
of tests exercise a validation gate that is on by default only in debug builds, so they report
54+
- Run the suite in debug (`cargo test`). That is the canonical, deterministic run. A couple of
55+
tests exercise a validation gate that is on by default only in debug builds, so they report
5956
as failures under `cargo test --release`. Debug is green.
60-
- A couple of tests can flake in **release** builds under heavy parallelism, on wall-clock timing
61-
rather than logic, notably `paket_4` (backpressure `term_timeout`) and `phase_8` (MockOpenAI).
62-
These are test-harness timing artifacts, not product bugs. Debug is the canonical run; if you
63-
hit one in release, re-run rather than chase it.
64-
- New behavior comes with a test. The hot routing paths are byte-pinned against fixtures on
65-
purpose, so they cannot quietly drift. If a fixture gate fails, that is the point. Do not
66-
edit the fixture to make it pass without understanding why it moved.
57+
- A couple of tests can flake in release builds under heavy parallelism, on wall-clock timing:
58+
`paket_4` (backpressure `term_timeout`) and `phase_8` (MockOpenAI). Both are timing artifacts
59+
of the test harness. Debug is the canonical run, so if you hit one in release, re-run it
60+
before you chase it.
61+
- New behavior comes with a test. The hot routing paths are byte-pinned against fixtures, so
62+
they cannot drift unnoticed. A failing fixture gate is doing its job, so do not edit the
63+
fixture to make it pass before you understand why it moved.
6764

6865
## Where the truth lives
6966

@@ -79,24 +76,23 @@ bug worth an issue.
7976

8077
A colony is a folder. Folders marked `type: "hive"` are scopes that hold the graph. Every other
8178
node is a Cell, an actor with one mailbox and one job. Cells are dumb: a cell knows its
82-
contract, its params, and the one message in front of it, nothing else. The edges do the
83-
thinking: routing, filtering, fan-out, loopback. The tool-loop is not a `while` loop, it is an
84-
edge that routes back. Read `examples/hello` (two cells, one edge), then `examples/swarm` (the
85-
loop as an edge), and it clicks.
79+
contract, its params, and the one message in front of it. The edges do the thinking: routing,
80+
filtering, fan-out, loopback. A tool loop is an edge that routes back into the `llm` cell. Read
81+
`examples/hello` (two cells, one edge), then `examples/swarm` (the loop as an edge).
8682

8783
## Good first contributions
8884

8985
These are genuinely useful and scoped to land without a week of context:
9086

91-
- **Example colonies.** New showcase trees under `examples/`. A summarizer, a router, a
92-
retry-with-backoff shape, a multi-tool agent. Small, real, runnable under the daemon, with a
93-
short voice-matched README in the folder. Use `examples/hello` and `examples/swarm` as the
94-
template.
95-
- **Template cells.** Reusable subtrees under a `templates/` directory: a well-built `code`
96-
tool, a store-backed memory, a clean dispatcher or collector. The `code` cell is the Swiss
97-
army knife here.
98-
- **Docs.** Clarify a section of `docs/`, add a worked example, fix a place where the spec and
99-
the code have drifted apart. Precision is the whole game.
87+
- Example colonies. New trees under `examples/`: a summarizer, a router, a retry-with-backoff
88+
shape, a multi-tool agent. Keep them small and runnable under the daemon, with a short README
89+
in the folder that matches the voice of the others. `examples/hello` and `examples/swarm` are
90+
the ones to copy from.
91+
- Template cells. Reusable subtrees under a `templates/` directory: a well-built `code` tool, a
92+
store-backed memory, a clean dispatcher or collector. The `code` cell is the Swiss army knife
93+
here.
94+
- Docs. Clarify a section of `docs/`, add a worked example, fix a place where the spec and the
95+
code have drifted apart.
10096

10197
Browse the issues labelled `good first issue` for specifics. If you want to attempt something
10298
bigger off the roadmap (more than one builder per scope, federation, capability checks with
@@ -112,41 +108,46 @@ teeth, durability hardening), open an issue first so we can talk shape before yo
112108
test or symbol that embodies it. The anchors themselves do travel, as
113109
`.github/gates/adr-anchors.tsv`, and the `gate` job resolves every one of them: deleting the
114110
code that pins an accepted decision is a red run until the ADR is superseded.
115-
- Match the surrounding voice in any prose. Confident, credible, no hype. And no spaced
116-
em-dashes, they read as machine-written.
111+
- Match the surrounding voice in any prose. Confident and credible, without hype. Spaced
112+
em-dashes read as machine-written, so leave them out.
117113

118114
## Named conventions
119115

120-
Code comments across the tree cite house rules by name. The short registry, so the
121-
citations resolve without the private process docs:
122-
123-
- **Rule 12 (timeouts, two layers):** every I/O operation in cell code carries its own
124-
`tokio::time::timeout` (params-driven, precise); the substrate's per-message timeout is
125-
a generous backstop, never the primary shield. A timeout that covers only part of the
126-
operation is not a timeout.
127-
- **Rule 14 (body blob pointers):** the substrate resolves `text_id`/`messages_id`
128-
pointers inside `messages[]` at the delivery boundary, recursively, bounded by
129-
`blob_max_recursion_depth` and a per-path visited set (issue #19). The former emission
130-
ban is gone: a cell may emit them, and no cell ever sees one. `{text_id}` leaves in the
131-
`system` tree are resolved at the same boundary under the same guards (issue #86); only
132-
the substitution differs, a leaf becomes `{"text": …}` rather than a turn. Both slots
133-
resolve against one working copy per delivery, so a failure in either dead-letters the
134-
body unchanged. `attachments[]` refs are a different class and stay unresolved by the
135-
substrate on purpose: the consuming cell reads them on demand, through a read-only store
136-
handle it only receives when its contract declares `consumes.body.attachments` (issue #87).
137-
- **R9 (CLI shape):** flags only, nginx style. No subcommands.
138-
- **A1' (panic-free hot path):** the colony routing/dispatch path never panics on
139-
pathological input; it answers with errors, skips, or dead letters. A panic there takes
140-
the whole colony, not one cell.
141-
- **30s failure markers:** generous timeouts (30s convention) for failure markers in
142-
tests, robust under parallel cargo load; tight timing discriminators only where the
143-
test explains why.
144-
- **Topology tests:** `#[tokio::test(flavor = "multi_thread", worker_threads = 4)]` for
145-
anything that boots a real topology.
146-
- **Coding standards:** no `unwrap()`/`panic!()` outside tests, `thiserror` errors in
147-
libraries, doc comments on public items, no blocking sync I/O in async.
148-
- **Demo discipline:** a test that claims to prove X proves it through a positive
149-
receipt signal, never through negative side effects.
116+
Code comments across the tree cite house rules by name. The short registry, so the citations
117+
resolve without the private process docs:
118+
119+
- Rule 12, timeouts in two layers. Every I/O operation in cell code carries its own
120+
`tokio::time::timeout`, driven by params and cut tight; the substrate's per-message timeout
121+
is a generous backstop and never the primary shield. A timeout that covers only part of the
122+
operation is no timeout.
123+
- Rule 14, body blob pointers. The substrate resolves `text_id` and `messages_id` pointers
124+
inside `messages[]` at the delivery boundary, recursively, bounded by
125+
`blob_max_recursion_depth` and a per-path visited set (issue #19). The former emission ban is
126+
gone: a cell may emit them, and no cell ever sees one. `{text_id}` leaves in the `system`
127+
tree are resolved at the same boundary under the same guards (issue #86); only the
128+
substitution differs, since a leaf becomes `{"text": ...}` where a pointer in `messages[]`
129+
becomes a turn. Both slots resolve against one working copy per delivery, so a failure in
130+
either dead-letters the body unchanged. `attachments[]` refs are a different class and the
131+
substrate leaves them alone: the consuming cell reads them on demand, through a read-only
132+
store handle it receives only when its contract declares `consumes.body.attachments`
133+
(issue #87).
134+
- R9, CLI shape. Flags only, nginx style. No subcommands.
135+
- A1', panic-free hot path. The colony routing and dispatch path never panics on pathological
136+
input; it answers with errors, skips, or dead letters. A panic there takes down every cell in
137+
the colony at once.
138+
- 30s failure markers. Generous timeouts (the 30s convention) for failure markers in tests, so
139+
they survive parallel cargo load; tight timing discriminators only where the test explains
140+
why.
141+
- Topology tests. `#[tokio::test(flavor = "multi_thread", worker_threads = 4)]` for anything
142+
that boots a real topology.
143+
- Demo discipline. A test that claims to prove X proves it through a positive receipt signal,
144+
never through negative side effects.
145+
146+
## Coding standards
147+
148+
No `unwrap()` or `panic!()` outside tests. Libraries return `Result` with `thiserror` errors,
149+
and the binary may use `anyhow::Result`. Every public item carries a doc comment. No blocking
150+
sync I/O in async code.
150151

151152
## License
152153

0 commit comments

Comments
 (0)