Commit graph

53 commits

Author SHA1 Message Date
76f82565e3 feat: hermes-bsd source snapshot + zot harness + telegram token
- Stage hermes-bsd as shallow clone in /home/clawdie/ai/ (next to colibri/zot)
- Switch default harness from pi to zot (COLIBRI_PI_BINARY=zot)
- Add TELEGRAM_BOT_TOKEN placeholder to provider.env and sample
- Removes stale zot-rpc-driver blocker comment (colibri#143 resolved)
2026-06-23 11:07:54 +02:00
7300fec1e2 0.12.0: hw-probe + model fixes + mother MCP infra
Combined from three feature branches:
- feature/hw-probe-agent-bootstrap: JSON hardware probe (clawdie-hw-probe),
  remove desktop icon, update START-HERE.txt
- chore/0.12.0-model-fix-bump: deepseek-v4-pro model names, version 0.12.0
- feature/mother-mcp-infra: build-colibri.sh MCP tool, colibri-mcp-ssh wrapper
2026-06-23 10:49:38 +02:00
2af8a65cae chore(zot): pin operator image to zot v0.2.42 (Sam & Pi)
Update the ISO default Zot pin and build docs from v0.2.29 to v0.2.42 so the next image stages the current rebuilt FreeBSD zot binary instead of recording a mismatched checkout/binary pair. Also refresh the release runbook's 0.11.0 examples.\n\nValidation: ./scripts/check-format.sh; sh -n build.sh scripts/stage-zot-iso.sh; BUILD_CHANNEL=dev build.cfg default check; git diff --check.
2026-06-22 06:08:42 +02:00
871b04ed7a docs(stage): cite colibri#143 in the zot autospawn guardrail
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 22:31:19 +02:00
eb919a435f docs(stage): guardrail comment — zot needs rpc driver before autospawn
The spawner uses stdin(Stdio::null()); zot's --json and rpc modes
both require input. Pi's --mode json is autonomous. Document the
blocker inline so nobody tries the pi→zot config flip without the
driver. Ref: colibri issue zot-rpc-driver + ADR-agent-harness-consolidation.md.
2026-06-21 22:28:41 +02:00
a788d99967 feat(iso): wire Colibri OOTB defaults + opt-in Mother MCP link
Workstream C of the next ISO rebuild.

C1 — Auto-spawn lit up out of the box:
  provider.env now ships COLIBRI_AUTOSPAWN_PI="YES", so colibri#137 fires on
  the booted image once a DeepSeek key is present (pulled by Join Hive, A).

C2 — External MCP registry staged:
  /usr/local/etc/colibri/external-mcp.json shipped as {"servers":{}} at the
  path colibri-mcp reads by default. Empty = mother off by default.

C3 — Opt-in "Enable Mother Link" (clawdie-enable-mother + desktop entry):
  Direction is "our Pi calls mother's tools" — colibri-mcp dials OUT to mother
  over SSH-stdio and proxies mother's tools to the Pi via its external-call
  path. The toggle:
   - provisions an SSH identity for the colibri service account
     (/var/db/colibri/.ssh — the daemon and its Pi run as `colibri`),
   - writes the mother entry into external-mcp.json (ssh -i <key> ... mother),
   - upserts COLIBRI_MCP_EXTERNAL_CALL=1 into provider.env,
   - restarts the daemon and prints colibri's pubkey to authorize on mother.

provider.env.sample documents the new toggles. sh -n clean on all scripts;
the empty default and the emitted mother entry validate as JSON and match the
ExternalMcpRegistry {servers:{command,args,env}} shape.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 18:53:41 +02:00
14248b6a20 feat(colibri): gate test-agent staging by build mode (Sam & Pi)
Add COLIBRI_STAGE_TEST_AGENT with dev/release defaults so validation builds can include colibri-test-agent while production/release operator USB images omit it by default. Keep poudriere guidance test-friendly and document binary roles in BUILD.md.\n\nValidation: sh -n build.sh scripts/stage-colibri-iso.sh live/operator-session/colibri-live-rebuild; ./scripts/check-format.sh; ./scripts/test-release-gate.sh; build.cfg default/override checks.
2026-06-21 07:55:24 +02:00
Sam & Claude
d9a469a418 cleanup: retire duplicate Colibri port; colibri repo owns it
The canonical Colibri FreeBSD port lives in the colibri repo
(packaging/freebsd/port/sysutils/colibri), kept with the code it builds and
guarded by a CARGO_CRATES drift check in colibri CI. The copy here was a
divergent duplicate (wrong LICENSE=MIT vs AGPLv3, CARGO_BUILD=no skeleton that
could not build, different binary set) that the drift check could not protect.

- delete ports/sysutils/colibri/ (no longer maintained here)
- build.sh release gate: fail if ports/sysutils/colibri/ reappears, pointing at
  the canonical location — keeps the cleanup structural, not just one-time
- docs/POUDRIERE-BUILD-SERVER.md + scripts/poudriere/README.md: state colibri
  owns the port, copy it into the ports tree, this repo keeps no duplicate

Validation: build.sh sh -n clean; release-gate self-test passes; guard fires on
a reintroduced dir; markdown gate clean. Nothing references the deleted path.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 21:37:47 +02:00
65015b0c70 cleanup(tmp): remove Clawdie-owned host tmp paths (Sam & Pi)
Broaden prebuild cleanup by documenting project-local tmp policy, syncing the hardened wallpaper/join-hive helpers, moving vault/no-blank scratch under runtime/cache dirs, and keeping release-gate scratch under repo tmp.\n\nValidation: ./scripts/check-format.sh; sh -n build.sh live/operator-session/clawdie-join-hive.sh live/operator-session/clawdie-wallpaper-gen.sh live/operator-session/clawdie-vault-fetch live/operator-session/clawdie-noblank-guard.sh scripts/test-release-gate.sh; ./scripts/test-release-gate.sh; clawdie-wallpaper-gen output test under repo tmp.
2026-06-20 21:07:05 +02:00
Sam & Claude
2dac2d108d feat(poudriere): lean scripts for first-party pkg.clawdie.si build server
Turns the manual Phase 2–3 runbook (docs/POUDRIERE-BUILD-SERVER.md) into
repeatable, idempotent steps for the mother-build host — the package half of
the trusted supply chain (layered-soul HIVE-ONBOARDING §10).

- poudriere-setup.sh: verify-then-act setup. Validates root, FreeBSD version
  format, pkg/openssl, and that the ZFS pool exists BEFORE acting; then installs
  poudriere, generates the repo signing key (0400), writes poudriere.conf (only
  if absent), and creates the build jail + ports tree. Re-running skips anything
  already present.
- poudriere-build.sh: validates jail, ports tree, and each origin (category/name
  + Makefile present) before `poudriere bulk`; repo is signed automatically via
  PKG_REPO_SIGNING_KEY.
- clawdie-repo.conf.in: client repo template (signature_type pubkey) + the
  first-party-only priority note.
- README.md: the three-step flow and conventions.

Style matches live/operator-session/hw-report: POSIX sh, set -u, fixed PATH,
strict arg parsing, minimal checks (only what is acted upon). Host provisioning
(ZFS/base/network) stays in the runbook — these assume a FreeBSD host with a
pool. sh -n clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 17:22:28 +02:00
e70ea171b3 fix(vault): bake Vaultwarden endpoint defaults into ISO (Sam & Pi)
Stage a non-secret /usr/local/etc/colibri/provider.env with the Clawdie Vaultwarden endpoint so operators only add BW bootstrap credentials. Also teach clawdie-vault-fetch to honor BW_SERVER and fail closed if an existing bw login points at a different server.\n\nChecks: sh -n live/operator-session/clawdie-vault-fetch scripts/stage-colibri-iso.sh; ./scripts/check-format.sh; git diff --check; COLIBRI_REPO=/home/clawdie/ai/colibri scripts/stage-colibri-iso.sh <tmp>
2026-06-20 07:27:51 +02:00
e2e74e8418 build(iso): upgrade FreeBSD Python 3.11 -> 3.12
Standardize the ISO on the agreed Python 3.12 floor (operator + Hermes +
Claude consensus; see layered-soul/docs/TOOLCHAIN.md).

- pkg lists: python311->python312, py311-{pip,aider_chat,pillow}->py312-*
- build.sh: derive the installed python3.N for the python3/python symlink so a
  future bump needs only a pkg-list change, never an edit here
- shell-deploy.sh: create the Aider venv with 'python3 -m venv' (resolves via
  the symlink) instead of a hardcoded python3.11
- import-clawdie-skills.sh: python3 fallback instead of python3.11
- BUILD.md: doc references

Aider kept (bumped, not dropped): redundant coding tooling is intentional per
the agent matrix.

Pre-merge gate: confirm FreeBSD pkg coverage on osa —
  pkg search '^py312-aider_chat' '^py312-pygobject'
(common modules pillow/pip are safe).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 14:38:20 +02:00
54f9fb4a0b docs(iso): clean builder handoff terminology (Sam & Codex)
Replace stale colibri-smoke-agent references with colibri-test-agent, mark colibri-tui optional/desirable, update image-name comments, and avoid smoke wording in current build handoff docs.\n\nChecks: sh -n build.sh; sh -n scripts/test-release-gate.sh; ./scripts/check-format.sh; git diff --check.
2026-06-15 18:50:16 +02:00
f87dc1d38f docs(iso): build zot with release version (Sam & Codex)
Use zot's Makefile VERSION hook in release/live rebuild instructions and preflight hints so the staged binary reports 0.2.29 instead of the local-build 0.0.0 default.\n\nChecks: sh -n build.sh; sh -n scripts/stage-zot-iso.sh; sh -n scripts/stage-colibri-iso.sh; ./scripts/check-format.sh; git diff --check; stage-zot-iso dummy-artifact smoke; VERSION=0.2.29 make build in zot produced 'zot 0.2.29'.
2026-06-15 18:31:10 +02:00
Sam & Claude
b959b64d21 chore(iso): rename provenance "dirty" → "modified" (Sam & Claude)
Drop the "dirty" terminology in favor of "modified" (same boolean sense:
true = working tree has uncommitted or untracked changes). Pure rename — no
logic change. Safe now: nothing consumes these keys yet (checked colibri too).

- build-manifest.json keys: zot_dirty/colibri_dirty/iso_repo_dirty
  → zot_modified/colibri_modified/iso_repo_modified
- .clawdie-source.json: dirty_at_build → modified_at_build
- iso-publish manifest (write-artifact-manifest.sh): repo_dirty → repo_modified
- gate messages, comments, shell vars, and docs (BUILD/CHANGELOG/ISO-MANIFESTS/
  PLAN) reworded.

Checks: sh -n on all three scripts; release-gate smoke test PASS; prettier clean
on changed docs.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 17:06:17 +02:00
Sam & Claude
42ec7b5ab1 fix(build): repair + harden the release gate (Sam & Claude)
Codex's release gate (96fc1d3) had the right idea but two issues that the
verified gates (sh -n / prettier / git diff) structurally could not catch,
because none exercise the BUILD_CHANNEL=release path:

1. Blocker: check_release_gate was *called* at line ~105 but *defined* (and its
   resolve_* dependencies defined) far below. In POSIX sh that's a call before
   definition — with `set -e`, a release build aborted at exit 127
   ("check_release_gate: not found") before the gate ran. Moved the invocation
   into the preflight section, after all helpers are defined.

2. Unsatisfiable + asymmetric: the gate required clawdie-ai to be on a vX.Y.Z
   tag, but clawdie-ai has no v-tag and is being pruned — so release was
   impossible. Replaced with reproducibility-by-record: every staged source
   (clawdie-iso, clawdie-ai, colibri, zot) must be a clean, committed tree; the
   manifest's recorded commits then fully describe the artifact. A recorded SHA
   is as pinned as a tag. Dropped the tag requirement.

Also:
- "clean" now uses `git status --porcelain`, so untracked files (which a
  diff-only check misses but which still change the build) fail the gate.
- Factored the repeated resolve+dirty boilerplate into assert_clean_repo.
- New scripts/test-release-gate.sh smoke test: asserts the porcelain semantics
  and that the gate is invoked after its definition (guards the exit-127
  regression). A 5-line test that the three "verified gates" could not provide.

Checks: sh -n build.sh; sh -n + run scripts/test-release-gate.sh (PASS);
git diff --check.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 16:56:55 +02:00
d9ade004f6 fix(iso): align live rebuild staging with rc.d audit (Sam & Codex)
Accept the PR #75 colibri_daemon rc.d contract, write colibri_daemon_cost_mode, and update the live rebuild doc now that /home/clawdie/ai sources are shallow git checkouts.\n\nChecks: sh -n build.sh; sh -n scripts/stage-colibri-iso.sh; ./scripts/check-format.sh; git diff --check; scripts/stage-colibri-iso.sh dummy-artifact smoke against Colibri PR #75 rc.d.
2026-06-15 09:10:52 +02:00
c45360864a feat(iso): stage colibri test agent and provider key help (Sam & Codex)
Switch ISO staging/docs from colibri-smoke-agent to colibri-test-agent, include rust/pkgconf for live Colibri rebuilds, stage provider.env.sample, wire the provider env rc.conf path, and document LLM key setup on the Firefox bootstrap page.\n\nChecks: npx --yes prettier@3 --check docs/LIVE-COLIBRI-REBUILD.md live/operator-session/bootstrap.html BUILD.md TESTING.md README.md; sh -n scripts/stage-colibri-iso.sh; sh -n build.sh; fake Colibri staging + sh -n staged rc.d script; git diff --check.
2026-06-15 07:49:43 +02:00
1f8e1f0614 docs: remove legacy rc wording from staging checks (Sam & Codex)
Keep staging validation focused on the current rc.d contract and avoid legacy variable references in the live rebuild lane branch.\n\nChecks: sh -n scripts/stage-colibri-iso.sh; fake Colibri staging + sh -n staged rc.d script; git diff --check.
2026-06-14 23:25:22 +02:00
e5aceb4756 docs: keep live rebuild lane action-focused (Sam & Codex)
Remove historical fix-it wording from the live rebuild runbook and make ISO staging validate the corrected Colibri rc.d contract directly instead of rewriting older variants.\n\nChecks: npx --yes prettier@3 --check docs/LIVE-COLIBRI-REBUILD.md; sh -n scripts/stage-colibri-iso.sh; fake Colibri staging + sh -n staged rc.d script; git diff --check.
2026-06-14 23:24:41 +02:00
db7d8fe3f9 fix(iso): accept corrected colibri rc source (Sam & Codex)
Keep ISO staging compatible with Colibri rc.d sources that already use colibri_daemon_binary and include pid/socket chmods. This lets the source rc.d file be copied directly for live USB repair while preserving compatibility with older Colibri sources.\n\nChecks: sh -n scripts/stage-colibri-iso.sh; fake staging against old and corrected Colibri rc sources; sh -n staged rc.d scripts; git diff --check.
2026-06-14 22:09:54 +02:00
9a5bfced83 Merge pull request 'fix(iso): avoid corrupting staged colibri rc script (Sam & Codex)' (#49) from fix/colibri-rc-sed-corruption into main
Reviewed-on: #49
2026-06-14 21:48:40 +02:00
04fe519814 fix(iso): avoid corrupting staged colibri rc script (Sam & Codex)
Replace fragile BSD sed append usage with awk when adding poststart chmods to the staged colibri_daemon rc.d script. The previous sed form appended the socket chmod after every line, corrupting the live USB service script.\n\nChecks: sh -n scripts/stage-colibri-iso.sh; fake COLIBRI_ARTIFACT_DIR staging; sh -n staged usr/local/etc/rc.d/colibri_daemon; git diff --check.
2026-06-14 21:45:08 +02:00
Sam & Claude
f3f47c8cdd docs/skills: switch published image + flashing from .gz to .xz
Smaller downloads that Rufus/balenaEtcher/RPi-Imager still read directly (zstd
would break Windows flashers). Switches the image artifact, flashing commands
(xz -dc | dd, xz -t, unxz), publish flow (xz -T0 -c), the artifact-manifest
script, and all skills + docs to .img.xz. Adds a Windows (Rufus/Etcher) flashing
section + README pointer. Source tarballs (clawdie-ai *.tar.gz) unchanged.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 12:04:56 +02:00
368e663965 Stage colibri-mcp in operator USB by default (Sam & Codex)
Makes colibri-mcp a required Colibri artifact for the live operator USB, copies it into the image, documents the read-only default and explicit trusted COLIBRI_MCP_WRITE profile, and updates ISO build handoff docs.\n\nChecks: ./scripts/check-format.sh; sh -n build.sh scripts/stage-colibri-iso.sh; git diff --check
2026-06-13 19:29:31 +02:00
0e6d8cbe53 Drop unresolved Clawdie service staging from USB (Sam & Codex)
Keeps service clawdie as a deployed-system contract only, removes the old mini-binary FEATURE_CLAWDIE staging lane from the ISO build, and adds explicit Linux-vs-FreeBSD proof boundaries for provider/runtime claims.\n\nChecks: ./scripts/check-format.sh; git diff --check; sh -n over scripts/ firstboot/ live/operator-session/ executables
2026-06-13 12:12:34 +02:00
6d0290d07e Clarify Colibri live and Clawdie deploy service split (Sam & Codex)
Removes stale Herdr references, reserves service clawdie for deployed disk/server targets, and keeps the live USB on colibri_daemon. Drops the baseline live rc.d/clawdie wrapper so the mounted-image contract matches the docs.\n\nChecks: ./scripts/check-format.sh; git diff --check; sh -n over scripts/ firstboot/ live/operator-session/ executables
2026-06-13 12:00:57 +02:00
Sam & Claude
7704fae717 feat(iso): stage zot agent (pinned) + populate ZOT_HOME/auth.json (Sam & Claude)
First concrete step of the zot consolidation (colibri ADR). Opt-in FEATURE_ZOT
(default NO; Pi stays default during migration).

- build.cfg: FEATURE_ZOT, ZOT_VERSION (pinned v0.2.29), ZOT_REPO,
  ZOT_ARTIFACT_DIR, ZOT_DEEPSEEK_KEY (optional bake).
- scripts/stage-zot-iso.sh: install the prebuilt zot binary -> /usr/local/bin/zot;
  populate the operator's $ZOT_HOME (~/.local/state/zot) with auth.json
  ({"deepseek":{"api_key":...}}, 0600) when a key is given, else an
  auth.json.sample template + README (telegram via `zot telegram-bot setup`).
- build.sh: status line, resolve_zot_paths, preflight_zot_artifacts (errors with
  the GOOS=freebsd go-build hint — zot has no FreeBSD release), install_zot_agent
  (+ chown operator state), wired into preflight + install sequences.

zot is built on the FreeBSD host from the pinned tag:
  (cd $ZOT_REPO && git checkout v0.2.29 && GOOS=freebsd GOARCH=amd64 \
     go build -trimpath -o bin/zot ./cmd/zot)

sh -n clean; staging smoke-tested (binary staged, auth.json 0600 valid).
Credentials use zot's own resolution (--api-key -> env -> auth.json), replacing
baked-into-binary keys. Default build unchanged (FEATURE_ZOT=NO).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 10:33:37 +02:00
Sam & Claude
667ebdc210 fix(bhyve): EU display dates (DD.mmm.YYYY) per AGENTS date rule (Sam & Claude)
User-facing timestamps in run-bhyve-test.sh used the ambiguous numeric form
%Y-%m-%d. Switch to European display (date +%d.%b.%Y %H:%M:%S). Log filename
keeps sortable ISO 8601 basic (machine artifact, per the rule's internal-storage
exemption).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 12:05:32 +02:00
Sam & Claude
58443b0f8c feat(bhyve): QA gate in run-bhyve-test.sh — assert clean boot, fail on regressions (Sam & Claude)
bhyve-test.sh captures the guest serial console; this adds a QA gate over that
log so the harness can be used as a build gate (appliance runbook §3):

- CRITICAL (gate the exit): no kernel panic, no reboot loop, boot reached
  login/sddm, and no "permission denied" (regression guard for the colibri
  socket EACCES we just fixed).
- INFO (best-effort console markers): colibri socket ready, no store-open panic,
  clawdie-live-gpu ran.
- Prints the deeper in-guest checklist (socket mode, glasspane query, GPU
  branch) that lives in guest logs, not the console.

Exit is non-zero if the boot harness failed OR any critical assert failed.
Also pass-through args to bhyve-test.sh (ISO path / --name).

sh -n clean; gate logic unit-tested (clean boot → pass/exit0; panic+EACCES+no-login
→ fail). INFO/CRITICAL patterns should be confirmed against a real boot console
on first run.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 11:45:58 +02:00
7ba92ed116 Standardize ISO build checkouts under /home/clawdie/ai (Sam & Codex) 2026-06-05 00:39:37 +02:00
e3b2a5fdcd Merge pull request 'Fix colibri CLI for clawdie user' (#26) from fix/colibri-cli-clawdie-access into main 2026-06-04 20:04:23 +02:00
24b86ea106 Merge pull request 'Import clawdie-ai skills into colibri catalog at build time' (#20) from fix/import-clawdie-skills into main 2026-06-04 20:04:23 +02:00
ee79110250 Merge pull request 'Enable DeepSeek cache warming + HTTP/2 compression' (#17) from fix/deepseek-cache-warming-http2 into main 2026-06-04 20:04:23 +02:00
3bc802bc66 Merge pull request 'Fix colibri daemon rc.d — 4 bugs resolved (v0.9.1)' (#16) from fix/colibri-rc-d-bugs into main 2026-06-04 20:04:23 +02:00
5faeae821c Merge pull request 'fix(clawdie): pin clawdie_db_path in staged rc.conf for visibility' (#8) from fix/clawdie-db-path-rcconf into main 2026-06-04 20:04:23 +02:00
a0884351ee Merge pull request 'feat: stage the simplified clawdie agent into the ISO (Sam & Claude)' (#5) from feat/clawdie-staging-onto-live-boot into main
Reviewed-on: #5
2026-06-04 20:04:23 +02:00
8febb8e506 Merge pull request 'pi/main-live-boot-xfce-colibri-fixes' (#4) from pi/main-live-boot-xfce-colibri-fixes into main
Simplifying Clawdie service
2026-06-04 20:04:23 +02:00
949ddbdeca Merge xfce-operator-usb: Colibri ISO staging (Sam & Claude)
# Conflicts:
#	AGENTS.md
2026-06-04 20:04:23 +02:00
b163cf1014 Merge xfce-operator-usb: Track F Colibri, DeepSeek smoke, LLM provider harness 2026-06-04 20:04:23 +02:00
b03e740fb7 Pin ISO npm global CLI versions
Use packages/npm-globals.txt as the source of truth for offline npm CLI tarballs, update Pi to 0.75.5, and keep Claude Code out of the XFCE USB path.

---

Build: not run — ISO build not requested

Tests: pass — sh -n fetch-npm-globals and shell-npm-globals; pinned npm pack smoke passed
2026-06-04 20:04:23 +02:00
71878992fe Bundle current pi package and enable evdev 2026-06-04 20:04:23 +02:00
07f315d730 feat(iso): bundle claude/gemini/pi npm CLIs for offline first-boot install
Ships @anthropic-ai/claude-code, @google/gemini-cli, and
@mariozechner/pi-coding-agent as prebuilt .tgz tarballs on the install
media so the agent runtime has its CLI dependencies on first boot
without network access.

Critical: installs to /home/clawdie/.npm-global to match the
npm_config_prefix set by shell-system.sh in /etc/profile.d/clawdie.sh,
so the clawdie user's PATH (and the agent's commandExists() probes)
actually resolve the binaries.

- scripts/fetch-npm-globals.sh: npm pack the 3 CLIs into tmp/npm-globals/
- firstboot/shell-npm-globals.sh: offline install as clawdie user with
  matching prefix, runs between pkg setup and deploy
- build.sh: fetch + bundle into ${SHARE}/npm-globals/
- firstboot.sh: source module and run_step before deploy

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-04 20:04:22 +02:00
60c35361a0 Make ISO builds cleaner by default (Sam & Codex)
---

Build: FAIL | Tests: FAIL — not run (deferred)
2026-06-04 20:04:22 +02:00
fdacdb0327 Harden bhyve tests and home.arpa defaults (Sam & Codex)
---

Build: not run | Tests: not run
2026-06-04 20:04:21 +02:00
6da6e6e9fa fix(bhyve): isolate VM network on dedicated bhyve0 bridge (10.99.0.0/24)
Moves bhyve VMs off warden0 (jail bridge) to avoid ARP/routing conflicts
with running agent jails. Auto-picks unused tap interface, adds PF NAT
idempotently, cleans up tap on exit.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-04 20:04:21 +02:00
9817a04a2c Clarify vmm device checks in host preflight (Sam & Codex) 2026-06-04 20:04:21 +02:00
15962d782e Add host preflight for bhyve readiness (Sam & Codex) 2026-06-04 20:04:21 +02:00
e46d955527 feat: make firstboot agent-name-agnostic for multi-agent deployments
Derive AGENT_NAME from ASSISTANT_NAME instead of hardcoding "clawdie".
Database names, users, and identity vars now follow the agent name.

Add configurable fields to build.cfg and shell-env.sh:
- AGENT_GENDER, PI_TUI_PROVIDER, PI_TUI_MODEL
- ZAI_API_KEY, OPENROUTER_API_KEY, EMBED_BASE_URL, EMBED_MODEL
- TELEGRAM_BOT_TOKEN, FEATURE_TELEGRAM (pre-bakeable for cloud)

Add gender selection to baremetal wizard (bsddialog radiolist).
Update bhyve-test.sh with --name flag, tap0/bridge auto-setup,
sparse disk reuse, and reduced default disk size (25G).

Tested: dry-run env generation produces correct Mevy config
(agent_name=mevy, db=mevy, provider=zai, model=glm-5).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-04 20:04:21 +02:00
46028a7e6d fix: locale-safe date in build.sh + dynamic ISO detection in bhyve-test.sh
- build.sh: force LC_TIME=C so date +%b always outputs "Mar" not "Mar."
  Prevents double-dot filenames (e.g. 30.mar..2026.img) on sl_SI locale
- bhyve-test.sh: auto-detect newest baremetal .img or accept path as $1
  Removes hardcoded filename that breaks after each new build

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-04 20:04:21 +02:00