Skip to content

Commit 019d9cf

Browse files
committed
docs(s012): ADR-0009 decided at the checkpoint: no Jido at all
Owner decision on 2026-09-20 on the three measurements the checkpoint produced: Trinity uses no Jido package. Appended to ADR-0009, superseding the provisional decision and the earlier appended line, which stands as written. docs/02, slice 020's spec (Trinity.Tools.Tool is Trinity's own behaviour with jsv for its schemas), the standards register row (not applicable) and the VERSIONS row (kept, marked not used) say the same. Slice 012 is unchanged; it used none of it. Signed-off-by: Ayla Croft <aylacroft@proton.me>
1 parent 6dffc53 commit 019d9cf

7 files changed

Lines changed: 41 additions & 14 deletions

File tree

‎VERSIONS.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ never pin a version hex marks as retired or vulnerable.
9191
| `req` | ~> 0.5 | ✅ in `mix.lock` | HTTP client. |
9292
| `req_llm` | ~> 1.22 | ✅ in `mix.lock` | Provider layer (streaming, tools, structured output, usage). ⚠️ The pin was `~> 1.10` against a recorded latest of 1.10.0; the real latest was twelve minors ahead. Check event shapes against the current version at Slice 011, not against this file's prose. Added at Slice 011. |
9393
| `beam_mcp` | ~> 0.8 | 🔍 not yet a dependency | MCP server core, Apache-2.0, ADR-0007 decision 5 (owner decision 2026-09-08, recorded 2026-09-20). 0.8.0 on hex.pm, standing before 1.0.0. Server side only: the client, MRTR and OAuth are Trinity's, above it. Added at Slice 059. The earlier candidate list (anubis_mcp, fastest_mcp, gen_mcp) is history. |
94-
| `jido` | ~> 2.3 (pending ADR-0009) | 🔍 not yet a dependency | Actions, directives and the effect boundary, if the Slice 012 checkpoint adopts it. |
94+
| `jido` | not used (ADR-0009, decided 2026-09-20) | 🔍 not a single package | Measured at the Slice 012 checkpoint and not adopted: the agent runtime duplicates PubSub, Oban and the gateways and adds a second tool executor; the action shape is written in-tree at Slice 020 with `jsv` for its schemas. The row stays so the decision is visible where a reader would look for the package. |
9595
| `jason` | ~> 1.2 | ✅ in `mix.lock` | |
9696
| `boundary` | ~> 0.10 | ✅ in `mix.lock` | Compile-time module dependency enforcement. Measured at Slice 000: it compiles and enforces on Elixir 1.20.4 / OTP 28, and it reports violations as **warnings**, so it enforces only while `--warnings-as-errors` is on the compile step. ⚠️ No release since 2024-09-25. |
9797
| `nimble_options` | ~> 1.1 | ✅ in `mix.lock` | Config validation for behaviours. |

‎docs/02-tech-stack.md‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@ Versions live in `VERSIONS.md`. This file explains *why* each choice was made an
2828
## Explicitly not chosen (and why)
2929

3030
- **Umbrella apps**: isolation is enforced by `boundary` without the build/config overhead.
31-
- **Jido**: *revised 2026-09-05:* reconsidered rather than rejected. Whether it expresses the action, directive and
31+
- **Jido**: *decided 2026-09-20, ADR-0009:* not used, on the Slice 012 checkpoint's measurements (the agent runtime
32+
duplicates PubSub, Oban and the gateways and adds a second tool executor; the action shape is a few dozen lines
33+
with `jsv` already present). The earlier text of this bullet follows as written. *Revised 2026-09-05:* reconsidered rather than rejected. Whether it expresses the action, directive and
3234
effect layer better than plain OTP is ADR-0009, decided by measurement at the Slice 012 checkpoint.
3335
- **Mnesia**: split-brain and schema-management sharp edges; SQLite/CubDB are simpler for single-node.
3436
- **Ortex**: stalled since Nov 2024. Bumblebee/EXLA instead.

‎docs/09-standards-register.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ document, a PROOF.md line) or `none`; the status; who decides the status. Status
6161

6262
| Control | Where Trinity satisfies it | Evidence path | Status | Decider |
6363
|---|---|---|---|---|
64-
| Independence from other systems that share the Jido library | shared library, not shared runtime; not on the path a finding takes | ADR-0009 appended decision | `tree property` once 012 lands with the boundary tests | owner |
64+
| Independence from other systems that share the Jido library | not applicable: Trinity uses no Jido package (ADR-0009, decision appended 2026-09-20) | `mix deps.tree` shows no jido package | `tree property` | owner |
6565
| Standalone operation with no authority plane and no outbound connection | `TRINITY_AUTHORITY=local`, the standalone assertion | slice 024 AC2 | `:unknown` until 024 lands | owner |
6666
| Nothing fails open | signing unavailable denies; unknown tool denies; unknown effect denies; adapter unresolvable refuses to start | slice 024 AC5, ADR-0010 | `:unknown` until 024 lands | owner |
6767

‎docs/adr/0009-jido-for-the-action-effect-layer.md‎

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# ADR-0009 — Jido 2.0 for actions, directives and the effect boundary; decided by the Slice 012 design checkpoint
2-
Status: accepted · Date: 2026-09-05 · Owner decision on the version line recorded 2026-09-20
2+
Status: superseded by the decision appended 2026-09-20 (no Jido) · Date: 2026-09-05
33

44
## Context
55
ADR/tech-stack v1 said "Jido not chosen". Reconsidered: Jido has a worked vocabulary for actions, directives and
@@ -34,3 +34,23 @@ may still return "actions and directives only".
3434
One consequence for the standards register rather than for a slice: another system in the same platform family
3535
runs on the same Jido line. That is a shared library, not a shared runtime, and it is not on the path a finding
3636
takes; the register carries the row and the argument, and no slice here does.
37+
38+
## Decision, appended 2026-09-20 (later): no Jido at all
39+
40+
The Slice 012 checkpoint ran on 2026-09-20 against `jido` 2.3.3, `jido_action` 2.3.2 and `jido_signal` 2.2.0,
41+
read from their Hex tarballs (the measurements and the commands are in `slices/012-*/NOTES.md`). Its findings:
42+
(a) M4 is assertable against `Jido.Action` and M3 only with a census, because `Jido.Exec.run/4` takes caps as
43+
call-site options; (b) `Jido.Agent` adds sensors, a scheduler, signal routing and worker pools the plan assigns
44+
elsewhere, and an `AgentServer` that executes tools through `Jido.Exec`, a second path beside
45+
`Trinity.Effects`; (c) `jido` is 29,820 lines with ten runtime dependencies, `jido_action` six. The one piece
46+
with value, `Jido.Action` as the shape a tool is written in, is a few dozen lines to write and the tree already
47+
carries `jsv` for JSON Schema validation through req_llm.
48+
49+
**Owner decision, 2026-09-20, on those measurements: Trinity uses no Jido package.** This supersedes the
50+
provisional decision above and the earlier appended line recording "the runtime is Jido v2"; that line stands
51+
as written and this one is its correction. Consequences: slice 020 writes `Trinity.Tools.Tool` as Trinity's own
52+
behaviour (a module with a name, a JSON Schema for its parameters validated with `jsv`, `execute/2`, and the
53+
effect and risk declarations the security model needs), around the permission gate and the effect catalog
54+
rather than around a library's executor; the `jido` row leaves VERSIONS.md; the standards register's row on a
55+
shared library with a sister system is closed as not applicable; nothing in slice 012 changes, because it
56+
used none of it.

‎lib/trinity/versions.ex‎

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -160,9 +160,10 @@ defmodule Trinity.Versions do
160160
},
161161
%{
162162
name: "jido",
163-
pin: "~> 2.3 (pending ADR-0009)",
164-
lock: "jido",
165-
note: "Actions, directives and the effect boundary, if the Slice 012 checkpoint adopts it."
163+
pin: "not used (ADR-0009, decided 2026-09-20)",
164+
lock: nil,
165+
note:
166+
"Measured at the Slice 012 checkpoint and not adopted: the agent runtime duplicates PubSub, Oban and the gateways and adds a second tool executor; the action shape is written in-tree at Slice 020 with `jsv` for its schemas. The row stays so the decision is visible where a reader would look for the package."
166167
},
167168
%{name: "jason", pin: "~> 1.2", lock: "jason", note: ""},
168169
%{

‎slices/012-session-process-agent-loop/NOTES.md‎

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,14 @@ Packages read from their Hex tarballs in a scratch directory, never added to the
1111
| (b) what `Jido.Agent` adds over the `gen_statem` | Sensors, a cron scheduler, signal routing, worker pools, and an `AgentServer` executing `RunInstruction` directives through `Jido.Exec`: a second execution path for tools beside `Trinity.Effects`, the bypass shape 024's census flags. Nothing the Session's six states, persist-before-broadcast rule or rehydrate need | `ls jido/lib/jido` (sensor, scheduler, agent_server, pod); `grep -n 'defmodule ' jido/lib/jido/agent/directive.ex` (Emit, Spawn, SpawnAgent, AdoptChild, StopChild, StartSensor, StopSensor, Schedule, RunInstruction, Stop, Error) |
1212
| (c) dependency weight | `jido`: 29,820 lines, ten runtime dependencies (`jido_action`, `jido_signal`, `poolboy`, `crontab`, `time_zone_info`, `telemetry_metrics`, `nimble_options`, `splode`, `telemetry`; `jido_signal` adds `msgpax`, `memento`, `fuse`, `uniq`, `phoenix_pubsub`, `zoi`). `jido_action`: six (`jason`, `nimble_options`, `telemetry`, `zoi`, `splode`, `multigraph`), two of which the tree carries already | `find lib -name '*.ex' \| xargs cat \| wc -l`; `grep '{:' mix.exs` in each |
1313

14-
**Outcome: actions only**, one of the three the ADR permits. `jido_action` enters at slice 020 as the base of the
15-
tool behaviour (schema, `run/2`, lifecycle hooks), with a census at 024 that `Trinity.Effects` is `Jido.Exec`'s
16-
only caller for effectful tools. `jido` (the agent runtime) is not adopted: the Session stays an OTP
17-
`gen_statem`, PubSub is the broadcast, Oban (050) is the scheduler, gateways (070) are the sensors. Slice 012
18-
adds no Jido dependency; nothing in it is an action. Recorded as an appended decision on ADR-0009 in this
19-
slice's docs commit, with the VERSIONS row moved from `jido` to `jido_action`. The owner may veto at G1.
14+
**Recommended at G1: actions only.** **Owner decision at G1, 2026-09-20: no Jido at all.** The one piece with
15+
value, `Jido.Action` as the shape a tool is written in, is a few dozen lines to write and `jsv` (JSON Schema
16+
validation) is already in the tree through req_llm; six dependencies and a census for that gain is a poor
17+
trade, and the runtime was never a candidate on these numbers. Recorded as an appended decision on ADR-0009
18+
(superseding the provisional decision and the "runtime is Jido v2" line, which stands as written), in
19+
docs/02, in slice 020's spec (`Trinity.Tools.Tool` is Trinity's own behaviour) and in the standards register.
20+
The `jido` VERSIONS row stays, marked not used, so a reader finds the decision where the package would be.
21+
Slice 012 is unchanged: it used none of it.
2022

2123
## G1 plan, 2026-09-20
2224

‎slices/020-tool-protocol-registry/SLICE.md‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,5 +78,7 @@ If that changes during the slice, the criterion is retagged and this section is
7878
digests) and each run records observed calls; `Trinity.Tools.surface_diff/1` is a query, and a non-empty diff is
7979
a finding surfaced in the UI.
8080
- **Tool-definition hash:** every tool call record carries `tool_definition_digest`.
81-
- If ADR-0009 adopts Jido, `Trinity.Tools.Tool` is a thin wrapper over `Jido.Action`; the rules above are unchanged.
81+
- ADR-0009 (decision appended 2026-09-20): no Jido. `Trinity.Tools.Tool` is Trinity's own behaviour: a name, a JSON
82+
Schema for its parameters validated with `jsv` (already in the tree through req_llm), `execute/2`, and the effect
83+
and risk declarations; the rules above are unchanged.
8284
- The census is AC8 in the list above.

0 commit comments

Comments
 (0)