Commit graph

338 commits

Author SHA1 Message Date
a7565c49ad fix(spawner): stage jail spawn files under daemon-owned home, not /var/run
Some checks failed
CI / markdown (pull_request) Has been cancelled
CI / port (pull_request) Has been cancelled
CI / agent-jail-pkgs (pull_request) Has been cancelled
CI / rust (pull_request) Has been cancelled
Closes #135. The daemon stages per-spawn launch.sh/env.sh under the jail root;
the previous location /var/run/colibri-stage is root-owned, so the daemon
(running as clawdie) could not create per-spawn subdirs there — the second
jail-spawn EACCES, worked around in #134 by pre-creating the dir in
agent-jail-bootstrap.sh.

Move the default staging root to the daemon user's home,
/home/clawdie/.cache/colibri/stage, which clawdie owns by construction of the
jail account. create_dir_all now succeeds with no privileged pre-creation step,
and /home is persistent (unlike a tmpfs /var/run). The path is overridable via
COLIBRI_JAIL_STAGE_DIR, matching the daemon's other env-configurable paths.

- spawner.rs: const → staged_jail_run_dir() resolver; updated unit test.
- agent-jail-bootstrap.sh: drop the now-unnecessary install -d staging block
  and DAEMON_USER var (the #134 workaround).
- docs: update jailed-spawn design + truss analysis to the new location.

clippy clean; spawner suite green (21 tests); sh -n clean; touched docs pass
the markdown gate.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 17:37:32 +02:00
35f1f3f7b0 Merge pull request 'fix(bootstrap): pre-create daemon staging dir in agent jails' (#133) from absolute-spawn-wrappers into main
Some checks are pending
CI / port (push) Waiting to run
CI / agent-jail-pkgs (push) Waiting to run
CI / rust (push) Waiting to run
CI / markdown (push) Waiting to run
Reviewed-on: #133
2026-06-21 17:30:44 +02:00
64c1198f4b Merge pull request 'fix(bootstrap): pre-create daemon staging dir in agent jails' (#134) from jail-staging-dir into main
Some checks are pending
CI / rust (push) Waiting to run
CI / markdown (push) Waiting to run
CI / port (push) Waiting to run
CI / agent-jail-pkgs (push) Waiting to run
2026-06-21 17:28:48 +02:00
4623f8c209 fix(bootstrap): pre-create daemon staging dir in agent jails
Some checks failed
CI / rust (pull_request) Has been cancelled
CI / markdown (pull_request) Has been cancelled
CI / port (pull_request) Has been cancelled
CI / agent-jail-pkgs (pull_request) Has been cancelled
Second root cause of the jail-spawn EACCES (found via truss, docs PR #132):
for staged spawns the daemon writes launch.sh/env.sh under
<jail_root>/var/run/colibri-stage/<stage_id>/, but nothing created
/var/run/colibri-stage. The daemon runs as clawdie and cannot mkdir under
root-owned /var/run, so staging failed with Permission denied.

agent-jail-bootstrap.sh now pre-creates the dir owned by the daemon user
(0700), replacing the runtime `chmod 777` workaround — durable across jail
rebuilds and not world-writable (staged files are sourced as shell, so a
world-writable staging dir would be a privilege footgun). DAEMON_USER is
overridable, defaulting to clawdie.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 17:28:20 +02:00
1233b8fbcd fix(bootstrap): pre-create daemon staging dir in agent jails
Some checks failed
CI / agent-jail-pkgs (pull_request) Has been cancelled
CI / rust (pull_request) Has been cancelled
CI / markdown (pull_request) Has been cancelled
CI / port (pull_request) Has been cancelled
Second root cause of the jail-spawn EACCES (found via truss, docs PR #132):
for staged spawns the daemon writes launch.sh/env.sh under
<jail_root>/var/run/colibri-stage/<stage_id>/, but nothing created
/var/run/colibri-stage. The daemon runs as clawdie and cannot mkdir under
root-owned /var/run, so staging failed with Permission denied.

agent-jail-bootstrap.sh now pre-creates the dir owned by the daemon user
(0700), replacing the runtime `chmod 777` workaround — durable across jail
rebuilds and not world-writable (staged files are sourced as shell, so a
world-writable staging dir would be a privilege footgun). DAEMON_USER is
overridable, defaulting to clawdie.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 17:27:31 +02:00
36718c151a Merge pull request 'docs: truss analysis of jail-spawn Permission Denied + debugging reference' (#132) from docs/truss-spawn-analysis into main
Some checks are pending
CI / markdown (push) Waiting to run
CI / rust (push) Waiting to run
CI / port (push) Waiting to run
CI / agent-jail-pkgs (push) Waiting to run
Reviewed-on: #132
2026-06-21 17:23:43 +02:00
9814ce8afb docs: truss analysis of jail-spawn Permission Denied + debugging reference
Some checks failed
CI / rust (pull_request) Has been cancelled
CI / markdown (pull_request) Has been cancelled
CI / port (pull_request) Has been cancelled
CI / agent-jail-pkgs (pull_request) Has been cancelled
Two root causes found via truss:
1. Bare command names (sudo, jexec) unresolved under daemon(8) PATH
   → fixed by resolve_program() in PR #131
2. Jail staging directory owned by root, unwritable by clawdie
   → fixed by chmod 777 <jail_root>/var/run/colibri-stage

Trace saved at /tmp/daemon.truss (1964 lines, successful spawn).
2026-06-21 17:22:30 +02:00
a1e6d64a27 Merge pull request 'fix(spawner): resolve privileged wrappers to absolute paths + log spawn context' (#131) from absolute-spawn-wrappers into main
Some checks are pending
CI / markdown (push) Waiting to run
CI / port (push) Waiting to run
CI / agent-jail-pkgs (push) Waiting to run
CI / rust (push) Waiting to run
Reviewed-on: #131
2026-06-21 17:12:01 +02:00
78be056b62 fix(spawner): resolve privileged wrappers to absolute paths + log spawn context
Some checks failed
CI / rust (pull_request) Has been cancelled
CI / markdown (pull_request) Has been cancelled
CI / port (pull_request) Has been cancelled
CI / agent-jail-pkgs (pull_request) Has been cancelled
The jail spawn path launches its wrapper by bare name (sudo / jexec / mdo)
and relies on execvp + the daemon's inherited PATH. Under daemon(8)/rc the
PATH is often empty or reordered, so execvp either misses the binary (ENOENT)
or hits a non-executable same-named entry first and returns EACCES — the spawn
"Permission denied" seen on FreeBSD even though the identical command runs from
a shell.

- resolve_program() absolutizes a bare program name against a fixed search
  list (first regular executable wins), leaving slash-bearing paths untouched
  and falling back to the bare name so the OS still reports a real error.
- spawn_prepared_child now logs the resolved program, requested name, full
  argv, and PATH before spawning. The previous "attempting spawn" log carried
  no spawn-context detail, which is why the failure was opaque.

This removes the PATH-search EACCES as a variable so a truss/ktrace run can
attribute any remaining denial to an actual kernel/MAC policy instead.

Tests: resolve_program pass-through, absolutization, and missing-name fallback.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 17:10:47 +02:00
e8b0d40461 Merge pull request 'fix(bootstrap): unify npm-global PATH snippet into one shared file' (#130) from fix/unify-npm-profile-snippet into main
Some checks are pending
CI / rust (push) Waiting to run
CI / markdown (push) Waiting to run
CI / port (push) Waiting to run
CI / agent-jail-pkgs (push) Waiting to run
Reviewed-on: #130
2026-06-21 16:22:36 +02:00
1081016991 fix(bootstrap): unify npm-global PATH snippet into one shared file
Some checks failed
CI / markdown (pull_request) Has been cancelled
CI / port (pull_request) Has been cancelled
CI / agent-jail-pkgs (pull_request) Has been cancelled
CI / rust (pull_request) Has been cancelled
Closes #122. Creates packaging/freebsd/clawdie-npm-profile.sh as
the single source for npm PATH + npm config. The agent-jail
bootstrap installs it with NPM_PREFIX baked in, replacing the
inline heredoc. The clawdie-iso build.sh installs the same file.

Before: two divergent heredocs, different filenames, different
prefixes. Now: one file, both environments, parameterized prefix.
2026-06-21 16:21:08 +02:00
16c3b3db1b Merge pull request 'feat/sudo-priv-mode' (#129) from feat/sudo-priv-mode into main
Some checks are pending
CI / port (push) Waiting to run
CI / agent-jail-pkgs (push) Waiting to run
CI / rust (push) Waiting to run
CI / markdown (push) Waiting to run
Reviewed-on: #129
2026-06-21 16:06:50 +02:00
13f4ff7cc2 fix(spawner): avoid async closure in retry path (Sam & Pi)
Some checks failed
CI / rust (pull_request) Has been cancelled
CI / markdown (pull_request) Has been cancelled
CI / port (pull_request) Has been cancelled
CI / agent-jail-pkgs (pull_request) Has been cancelled
Move the backoff spawn operation into a named async helper so older tooling does not trip over || async syntax, and add a jail sudo wrapping unit test. Document sudo as an interim validated-host privilege mode.\n\nValidation: ./scripts/check-format.sh; cargo fmt --check; cargo check -p colibri-daemon; cargo test -p colibri-daemon jail_tests -- --nocapture.
2026-06-21 16:00:11 +02:00
e268767f79 feat(spawner): add PrivMode::Sudo for hosts with sudo configured
Uses 'sudo -n' to wrap jail commands. Set via
COLIBRI_JAIL_PRIV_MODE=sudo. Requires sudoers entry:
  clawdie ALL=(root) NOPASSWD: /usr/sbin/jexec *

The daemon's async spawn closure (edition 2015) may need a
follow-up to fully use this mode — the env var and wrapping
logic are correct, verified via manual jexec test.
2026-06-21 15:53:43 +02:00
6e5f227fa7 docs(handoff): mark C1 validated — apply --yes + idempotent re-run
OSA 2026-06-21: clawdie apply --pool testpool --yes completes all 7 steps
(ZFS datasets, _clawdie user, chown, rc.d, sysrc). Idempotent re-run skips
user creation via exit 65. C1 is done.
2026-06-21 15:23:28 +02:00
a7fc408bd2 Merge pull request 'fix(clawdie): rename service user to _clawdie + idempotent creation' (#128) from fix/clawdie-idempotent-user into main
Some checks are pending
CI / rust (push) Waiting to run
CI / markdown (push) Waiting to run
CI / port (push) Waiting to run
CI / agent-jail-pkgs (push) Waiting to run
Reviewed-on: #128
2026-06-21 15:19:49 +02:00
46dcf7d7e7 fix(clawdie): rename service user to _clawdie + idempotent creation
Some checks failed
CI / rust (pull_request) Has been cancelled
CI / markdown (pull_request) Has been cancelled
CI / port (pull_request) Has been cancelled
CI / agent-jail-pkgs (pull_request) Has been cancelled
Two changes to the clawdie deploy binary:

1. Service user renamed from 'clawdie' to '_clawdie' — follows FreeBSD
   daemon convention (underscore prefix). Avoids collision with the
   operator's interactive 'clawdie' user on existing hosts like OSA.

2. User creation is now idempotent — exit code 65 (pw: user already
   exists) is treated as success via the new allowed_exit_codes field
   on Action::Run. Deploy can safely re-run without failing.

Full end-to-end test on OSA file-backed pool: all 7 steps (ZFS
datasets, user, chown, rc.d write, sysrc enable) complete.
2026-06-21 15:07:56 +02:00
2dc6f12c3c Merge pull request 'docs: proof runbook → clean CLI + sweep #126 markdown corruption' (#127) from docs/proof-runbook-clean-cli-and-markdown-sweep into main
Some checks are pending
CI / agent-jail-pkgs (push) Waiting to run
CI / markdown (push) Waiting to run
CI / port (push) Waiting to run
CI / rust (push) Waiting to run
Reviewed-on: #127
2026-06-21 14:59:48 +02:00
Sam & Claude
94650a6f45 docs: proof runbook → clean CLI + sweep #126 markdown corruption
Some checks failed
CI / rust (pull_request) Has been cancelled
CI / markdown (pull_request) Has been cancelled
CI / port (pull_request) Has been cancelled
CI / agent-jail-pkgs (pull_request) Has been cancelled
1. VAULT-PROVISION-FIRST-PROOF.md — refresh to the clean CLI now that the
   three gaps are closed (#101/#102 via PR #107; #92 via PR #119):
   - Step 3: raw SQLite INSERT →
   - Step 4: raw  JSON →
   - Status header: mark all three closed; note the proof validates the
     production deployment pattern (bare-metal Clawdie service runs this model)
   - Chain-resolution section: document the #92/#119 containment guard
     (canonicalize + assert under COLIBRI_JAIL_ROOT_BASE before any write)
   - Follow-ups: record what landed vs. what's still open (no delete-tenant
     verb; CI runner intermittently down)

2. Sweep markdown corruption introduced by #126 (merged while CI runner was
   down, so the prettier gate never ran):
   - AGENTS.md — prettier reflow
   - COLIBRI-SKILLS-PLAN.md — Ownership table had a row split across two
     lines ('consumer.' orphan + a duplicated Agents row); restored to 5
     clean logical rows

Checks: npx prettier@3 --check across all docs + AGENTS.md + README.md →
0 warnings; cargo fmt --check clean.

Co-Authored-By: Hermes & Sam <hello@clawdie.si>
2026-06-21 14:46:19 +02:00
09b1997b10 Merge pull request 'docs: define Clawdie bare-metal service identity (USB dev → ZFS RAID1 deploy)' (#126) from docs/clawdie-bare-metal-identity into main
Some checks are pending
CI / rust (push) Waiting to run
CI / markdown (push) Waiting to run
CI / port (push) Waiting to run
CI / agent-jail-pkgs (push) Waiting to run
Reviewed-on: #126
2026-06-21 14:18:54 +02:00
ed6f9534e5 docs: define Clawdie bare-metal service identity (USB dev → ZFS RAID1 deploy)
Some checks failed
CI / rust (pull_request) Has been cancelled
CI / markdown (pull_request) Has been cancelled
CI / port (pull_request) Has been cancelled
CI / agent-jail-pkgs (pull_request) Has been cancelled
Project Identity now distinguishes:
- Colibri: developed from operator USB, deploys as Clawdie service
- Clawdie service: bare FreeBSD hardware — ZFS RAID1 mirror,
  PostgreSQL + pgvector, bhyve VMs, Bastille jails
- Operator USB = development/validation/recovery surface
- Bare-metal install = production target
2026-06-21 14:16:28 +02:00
563a1eb0ab Merge pull request 'docs: repair formatting + content from positive-language rewrite (#124)' (#125) from repair-doc-formatting into main
Some checks are pending
CI / port (push) Waiting to run
CI / agent-jail-pkgs (push) Waiting to run
CI / rust (push) Waiting to run
CI / markdown (push) Waiting to run
Reviewed-on: #125
2026-06-21 13:50:32 +02:00
5fe3e676b2 docs: repair formatting + content from positive-language rewrite (#124)
Some checks failed
CI / rust (pull_request) Has been cancelled
CI / markdown (pull_request) Has been cancelled
CI / port (pull_request) Has been cancelled
CI / agent-jail-pkgs (pull_request) Has been cancelled
PR #124 applied the positive-instruction-framing convention across docs but
was self-merged without the markdown format gate, leaving 6 files failing
prettier and a few structural defects. This repairs them:

- prettier --write on the 6 files that failed ./scripts/check-format.sh
  (AGENTS.md, CLAWDIE-STUDIO-PROPOSAL, COLIBRI-SKILLS-PLAN, HEADROOM-SIDECAR,
  MULTI-AGENT-HOST-PLAN, VAULT-PROVISION-FIRST-PROOF).
- COLIBRI-SKILLS-PLAN.md: fix a table row split across two lines by a stray
  newline injected mid-cell.
- CLAWDIE-STUDIO-PROPOSAL.md: remove an orphaned "together." left dangling
  by a reworded sentence; restore the editor-bridge (MCP) guardrail bullet
  that was dropped, reworded positively; restore the guardrail list structure.
- CLAWDIE-STUDIO-PROPOSAL.md: plain-language the three implementation
  guardrails (MCP foundation, opt-in/guarded tools, set-cost-mode scope).

./scripts/check-format.sh -> green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 13:19:26 +02:00
b40fd2aa4b Merge pull request 'docs: rewrite negative patterns as positive actionable instructions' (#124) from docs/positive-language-rewrite into main
Some checks are pending
CI / rust (push) Waiting to run
CI / markdown (push) Waiting to run
CI / port (push) Waiting to run
CI / agent-jail-pkgs (push) Waiting to run
Reviewed-on: #124
2026-06-21 13:12:38 +02:00
b878b4bdfb docs: rewrite negative patterns as positive actionable instructions
Some checks failed
CI / agent-jail-pkgs (pull_request) Has been cancelled
CI / rust (pull_request) Has been cancelled
CI / markdown (pull_request) Has been cancelled
CI / port (pull_request) Has been cancelled
Convert 'do not', 'cannot', 'never', 'avoid', 'don't' patterns across
AGENTS.md, README.md, and 11 docs/*.md files into positive,
actionable instructions that tell the reader what TO do.

Preserved: hard safety constraints (MUST NOT agent boundaries,
vault credential confinement intent) — these are enforceable
guardrails where the prohibition IS the instruction.
2026-06-21 13:09:19 +02:00
674ec90913 Merge pull request 'docs(agents): record MIT relicense + v0.11.0' (#123) from note-license-and-version into main
Some checks are pending
CI / rust (push) Waiting to run
CI / port (push) Waiting to run
CI / markdown (push) Waiting to run
CI / agent-jail-pkgs (push) Waiting to run
Reviewed-on: #123
2026-06-21 13:04:35 +02:00
dbfd23fad7 docs(agents): record MIT relicense + v0.11.0 in Project Identity
Some checks failed
CI / rust (pull_request) Has been cancelled
CI / markdown (pull_request) Has been cancelled
CI / port (pull_request) Has been cancelled
CI / agent-jail-pkgs (pull_request) Has been cancelled
No repo AGENTS.md noted the AGPL->MIT relicense or the unified 0.11.0
version. Record both in colibri's Project Identity so contributors see the
current license/version without digging through Cargo.toml.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 13:02:45 +02:00
93e8fb8479 Merge pull request 'fix(bootstrap): jail npm PATH via /etc/profile.d, drop #120 .profile hack' (#121) from fix/jail-npm-path-profiled into main
Some checks are pending
CI / rust (push) Waiting to run
CI / markdown (push) Waiting to run
CI / port (push) Waiting to run
CI / agent-jail-pkgs (push) Waiting to run
Reviewed-on: #121
2026-06-21 09:00:09 +02:00
Sam & Claude
b0a0ff4891 fix(bootstrap): set jail npm PATH via /etc/profile.d, drop per-user .profile hack
Some checks failed
CI / rust (pull_request) Has been cancelled
CI / markdown (pull_request) Has been cancelled
CI / port (pull_request) Has been cancelled
CI / agent-jail-pkgs (pull_request) Has been cancelled
Root cause of the recurring "pi/bw not found in jail" bug: the npm-global-on-PATH
fix was solved canonically in the clawdie-iso image (/etc/profile.d/clawdie.sh,
all login shells), but the agent jail is a separate environment that never reused
it — a fresh Bastille jail doesn't inherit the image's profile.d, and the
bootstrap set no PATH. PR #120 band-aided it with a hardcoded append to one
user's ~/.profile (sh-only, drifts from NPM_PREFIX).

Replace that band-aid with the same mechanism the image uses, scoped to the jail:
- write one managed /etc/profile.d/clawdie-npm.sh derived from NPM_PREFIX
- source it from /etc/profile (covers all sh/bash login shells, system-wide),
  idempotently
- delete the per-user ~/.profile append from #120

Now the PATH content lives in a single file tied to NPM_PREFIX, so it can't miss
shells or drift from the prefix. Follow-up (not here): hoist the snippet into one
shared file installed by both clawdie-iso and the jail bootstrap, so a future new
environment can't re-grow this.

Verified: sh -n clean; smoke test — snippet expands NPM_PREFIX (keeps $PATH
literal), /etc/profile sources it, append is idempotent, sourced shell resolves
the npm-global bin onto PATH.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 08:59:33 +02:00
0b55b68eb4 Merge pull request 'fix(bootstrap): add npm-global bin to clawdie PATH in jail' (#120) from fix/jail-bootstrap-path into main
Some checks are pending
CI / rust (push) Waiting to run
CI / markdown (push) Waiting to run
CI / port (push) Waiting to run
CI / agent-jail-pkgs (push) Waiting to run
Reviewed-on: #120
2026-06-21 08:51:32 +02:00
d309aa7004 fix(bootstrap): add npm-global bin to clawdie PATH in jail
Some checks failed
CI / rust (pull_request) Has been cancelled
CI / markdown (pull_request) Has been cancelled
CI / port (pull_request) Has been cancelled
CI / agent-jail-pkgs (pull_request) Has been cancelled
2026-06-21 08:50:42 +02:00
b62608247a Merge pull request 'fix(vault): canonicalize + allowed-root containment on provision target (#92)' (#119) from fix/vault-provision-containment into main
Some checks are pending
CI / rust (push) Waiting to run
CI / markdown (push) Waiting to run
CI / port (push) Waiting to run
CI / agent-jail-pkgs (push) Waiting to run
2026-06-21 06:30:26 +02:00
Sam & Claude
8c7051f046 fix(vault): canonicalize + allowed-root containment on provision target (#92)
Some checks failed
CI / rust (pull_request) Has been cancelled
CI / markdown (pull_request) Has been cancelled
CI / port (pull_request) Has been cancelled
CI / agent-jail-pkgs (pull_request) Has been cancelled
PR #91 added a string-equality registered-vs-spawned root check, which doesn't
catch `..`, symlinks, or a root pointing outside the jails tree. Add a real
containment guard in colibri-vault::provision, the layer that writes the .env:

- Before create_dir_all, canonicalize the target (resolving `..`/symlinks) and
  assert it is STRICTLY under the allowed jail-root base; refuse otherwise.
  Running before create_dir_all means a traversal/symlink target can't even
  create a directory outside the tree, let alone an .env.
- Allowed base defaults to /usr/local/bastille/jails (FreeBSD/Bastille),
  overridable via COLIBRI_JAIL_ROOT_BASE for Linux/Docker volume roots.
- Fail-closed: returns VaultError::TargetEscapesRoot; the daemon spawn hook
  already treats provision errors as fail-soft (no .env written).
- Tests: child accepted; base-itself / nonexistent / `..`-escape / symlink-escape
  all refused (no tempfile dep — uses std temp_dir).

Acceptance (#92): a target with `..`, a symlink, or resolving outside the jail
root is refused, no .env written. fmt + clippy --all-targets clean;
cargo test --workspace 230 passed / 0 failed.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 22:58:30 +02:00
7b049971ab Merge pull request 'docs(port): EU date format for the Linux-gate note' (#118) from fix/port-readme-eu-date into main
Some checks are pending
CI / rust (push) Waiting to run
CI / markdown (push) Waiting to run
CI / port (push) Waiting to run
CI / agent-jail-pkgs (push) Waiting to run
Reviewed-on: #118
2026-06-20 22:50:13 +02:00
Sam & Claude
3acf29b3f8 docs(port): EU date format for the Linux-gate note (20.jun.2026)
Some checks failed
CI / rust (pull_request) Has been cancelled
CI / markdown (pull_request) Has been cancelled
CI / port (pull_request) Has been cancelled
CI / agent-jail-pkgs (pull_request) Has been cancelled
User-facing dates use DD.mon.YYYY per the date convention; the #116 note used
ISO 2026-06-20.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 22:49:46 +02:00
03289f9cc3 Merge pull request 'docs(port): record Linux gate results — 228 tests green on domedog (Sam & Claude)' (#116) from docs/linux-gate-0.11.0 into main
Some checks are pending
CI / rust (push) Waiting to run
CI / markdown (push) Waiting to run
CI / port (push) Waiting to run
CI / agent-jail-pkgs (push) Waiting to run
Reviewed-on: #116
2026-06-20 22:43:07 +02:00
33b2fd68f8 Merge pull request 'chore(jails): CI guard for agent-jail package drift vs clawdie-iso' (#115) from chore/agent-jail-drift-check into main
Some checks are pending
CI / rust (push) Waiting to run
CI / markdown (push) Waiting to run
CI / port (push) Waiting to run
CI / agent-jail-pkgs (push) Waiting to run
Reviewed-on: #115
2026-06-20 22:42:09 +02:00
Sam & Claude
d77e46ec92 docs(port): record Linux gate results — 228 tests green on domedog (Sam & Claude)
Some checks failed
CI / rust (pull_request) Has been cancelled
CI / markdown (pull_request) Has been cancelled
CI / port (pull_request) Has been cancelled
Verified the 0.11.0 release tree on Linux (domedog.pro, Debian) before
tagging:
  cargo fmt --check             
  cargo build --workspace --release   (4m 31s)
  cargo clippy -D warnings      
  cargo test --workspace         (228 passed, 0 failed)

FreeBSD runtime validation remains the pre-poudriere step.
2026-06-20 22:40:25 +02:00
Sam & Claude
f4d6730c97 chore(jails): CI guard for agent-jail package drift vs clawdie-iso
Some checks failed
CI / rust (pull_request) Has been cancelled
CI / markdown (pull_request) Has been cancelled
CI / port (pull_request) Has been cancelled
CI / agent-jail-pkgs (pull_request) Has been cancelled
Closes the gap left after #70/PR #81: the agent-jail package set is hand-synced
across two repos (this bootstrap's PKGS= and clawdie-iso pkg-list-jails.txt
"# agent-jail" section) with nothing catching future drift.

- check-agent-jail-pkgs.sh: pure POSIX sh; extracts PKGS= here, fetches the
  clawdie-iso list over HTTP (ISO_PKG_LIST_URL overridable), diffs the two sets,
  reports the delta, exits non-zero on mismatch.
- ci.yml: new `agent-jail-pkgs` job runs it on every push/PR.

Same shape as the CARGO_CRATES drift check. Verified: green in sync (5 pkgs);
negative test flags missing packages and exits 1; ci.yml valid YAML.
Single-sided (fires on colibri CI); the clawdie-iso list is fetched from main.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 22:39:34 +02:00
f368d446f5 Merge pull request 'release: colibri 0.11.0 + relicense AGPL-3.0 -> MIT' (#114) from release/colibri-0.11.0 into main
Some checks are pending
CI / rust (push) Waiting to run
CI / markdown (push) Waiting to run
CI / port (push) Waiting to run
Reviewed-on: #114
2026-06-20 22:25:46 +02:00
Sam & Claude
5af899e096 release: colibri 0.11.0 + relicense AGPL-3.0 -> MIT
Some checks failed
CI / rust (pull_request) Has been cancelled
CI / markdown (pull_request) Has been cancelled
CI / port (pull_request) Has been cancelled
Version: unify colibri with the Clawdie release version 0.11.0 (matches
clawdie-iso ISO_VERSION). Cargo.toml 0.0.1 -> 0.11.0, Cargo.lock refreshed,
port DISTVERSION 0.0.1 -> 0.11.0, port README example tag v0.11.0.

License: relicense all 12 crates from AGPL-3.0-only to MIT, matching the rest of
the project (layered-soul is MIT; nothing was BSD-3). Add a LICENSE file with
the same MIT text + holder (clawdie, 2026). Port: LICENSE=MIT + LICENSE_FILE.

Validation: CARGO_CRATES drift check green (346); markdown gate clean; no AGPL
references remain. Edition stays 2021 (2024 migration is a separate tested task).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 22:05:47 +02:00
7bc5473d93 Merge pull request 'feat(port): bundle colibri rc.d services into the canonical port' (#113) from feat/port-bundle-rcd into main
Some checks are pending
CI / rust (push) Waiting to run
CI / markdown (push) Waiting to run
CI / port (push) Waiting to run
Reviewed-on: #113
2026-06-20 21:38:38 +02:00
Sam & Claude
f6a11b6620 feat(port): bundle colibri rc.d services into the canonical port
Some checks failed
CI / rust (pull_request) Has been cancelled
CI / markdown (pull_request) Has been cancelled
CI / port (pull_request) Has been cancelled
Make the canonical sysutils/colibri port install its rc.d services so
`pkg install colibri` registers them — the one functional bit the (now-retiring)
clawdie-iso port duplicate carried. Poudriere builds in a clean jail that only
sees the port dir, so the rc.d templates live in files/ (mirrored from the
canonical packaging/freebsd/ copies).

- files/colibri_daemon.in, files/colibri_bridge.in (rc.d templates)
- do-install: INSTALL_SCRIPT both into PREFIX/etc/rc.d/ (binary path
  PREFIX/bin/colibri-daemon already matches the daemon rc.d expectation)
- pkg-plist: add the two etc/rc.d entries
- README: document files/ + that this is the single canonical port

Validation: rc.d sh -n clean; CARGO_CRATES drift check green (346); markdown
gate clean. Port remains poudriere-build-unproven until the first mother-build run.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 21:35:06 +02:00
c9bc299c68 Merge pull request 'chore(port): document the run command for check-cargo-crates.sh' (#112) from chore/port-checker-usage-banner into main
Some checks are pending
CI / rust (push) Waiting to run
CI / markdown (push) Waiting to run
CI / port (push) Waiting to run
Reviewed-on: #112
2026-06-20 21:19:10 +02:00
Sam & Claude
93630c64b7 chore(port): document the run command for check-cargo-crates.sh
Some checks failed
CI / rust (pull_request) Has been cancelled
CI / markdown (pull_request) Has been cancelled
CI / port (pull_request) Has been cancelled
Add a top-of-file usage banner showing how to run it: `sh ...` / `./...`.
It is a POSIX shell wrapper that calls python3 internally. Comment-only.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 21:18:22 +02:00
718436a486 Merge pull request 'feat(port): CARGO_CRATES drift check vs Cargo.lock + CI gate' (#111) from feat/port-cargo-crates-drift-check into main
Some checks are pending
CI / rust (push) Waiting to run
CI / markdown (push) Waiting to run
CI / port (push) Waiting to run
Reviewed-on: #111
2026-06-20 17:53:16 +02:00
Sam & Claude
c732a086fe feat(port): CARGO_CRATES drift check vs Cargo.lock + CI gate
Some checks failed
CI / rust (pull_request) Has been cancelled
CI / markdown (pull_request) Has been cancelled
CI / port (pull_request) Has been cancelled
Follow-up to #109 (which generated the 346-crate CARGO_CRATES block). Make that
list self-maintaining so it can't silently drift from the source deps:

- check-cargo-crates.sh: parses Cargo.lock (registry crates only; skips the 13
  workspace-local crates and any git deps) and diffs against the Makefile's
  CARGO_CRATES block. Reports MISSING / STALE, exits non-zero on drift. No
  network, pure tomllib — runs on any host. Independently confirms #109's list
  is complete and correct (346/346 in sync).
- ci.yml: new `port` job (python:3.12) runs the check on every push/PR, so a
  dependency change that forgets `make cargo-crates` fails CI.
- Makefile: replace the stale "Empty in this draft" comment (CARGO_CRATES is now
  populated) with accurate regenerate/verify guidance.
- README: CARGO_CRATES is committed now (only distinfo is build-host-generated);
  document the checker and trim the build steps.

Verified: checker green at 346 crates; both drift directions (missing/stale)
detected in negative tests; ci.yml is valid YAML; port README prettier-clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 17:52:00 +02:00
478d696ef7 Merge pull request 'chore(docs): prettier-fix pre-existing markdown drift' (#110) from fix/markdown-format-drift into main
Some checks are pending
CI / rust (push) Waiting to run
CI / markdown (push) Waiting to run
Reviewed-on: #110
2026-06-20 17:49:37 +02:00
Sam & Claude
20a65ac96d chore(docs): prettier-fix pre-existing markdown drift
Some checks failed
CI / rust (pull_request) Has been cancelled
CI / markdown (pull_request) Has been cancelled
docs/MULTI-AGENT-HOST-PLAN.md and docs/README.md had table-column formatting
drift that fails the markdown CI gate (prettier --check '**/*.md') on main.
Formatting only — pure table-padding re-alignment, no content change. Unblocks
the markdown job so the CI pipeline goes green again.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 17:48:35 +02:00
fa149eabac Merge pull request 'feat(port): generate CARGO_CRATES from Cargo.lock (v0.0.1)' (#109) from feat/cargo-crates into main
Some checks are pending
CI / rust (push) Waiting to run
CI / markdown (push) Waiting to run
Reviewed-on: #109
2026-06-20 17:40:33 +02:00