Commit graph

438 commits

Author SHA1 Message Date
d46997d0e1 fix: auto-sudo fallback for pkg fetch privilege escalation
Problem: pkg fetch requires access to /var/db/pkg (root-only)
Solution: Implement automatic sudo retry with user-writable cache

Changes:
- Replace privileged pkg config call with hardcoded ABI
- Add PKG_CACHEDIR to ~/.pkg-cache (user-writable, persistent)
- Wrap pkg fetch with error detection → auto-retry with sudo on privilege error
- Wrap pkg repo with same pattern for metadata generation
- First build: one sudo prompt, then caches packages
- Subsequent builds: no privilege escalation needed (cache hits)

Benefits:
- No manual intervention required
- Scales to new agents (same automatic fallback)
- Minimum privilege: only pkg commands elevated
- CI/CD friendly: no interactive sudo needed

Tested: build.sh --skip-fetch completes successfully with 50GB ISO

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-04 20:04:22 +02:00
48ae65070f Add v0.9.0 release notes (Sam & ZAI) 2026-06-04 20:04:22 +02:00
42f0c6922b Bump version to 0.9.0 (Sam & ZAI)
Phase 0 complete: Unified ISO with GPU fix

Changes warrant minor version bump:
- Breaking change: unified ISO (no --target flag)
- Critical fix: GPU driver installation
- New features: desktop detection,- Documentation: sudo unification

Roadmap to v1.0.0:
- v0.9.0: Unified ISO (current)
- v0.9.1: Qt6 GUI Phase 1-2
- v0.9.2: Qt6 GUI Phase 3
- v1.0.0: Qt6 GUI Phase 4
2026-06-04 20:04:22 +02:00
1bffa175c8 Unify ISO and fix GPU installation gap (Sam & ZAI)
BREAKING CHANGE: Removes --target and --gpu-driver flags, unified ISO for all use cases

## Phase 0: GPU Fix + Unified ISO

### Core Changes

**GPU Package Installation (FIXES CRITICAL GAP):**
- Add clawdie_shell_nvidia_install() function to shell-nvidia.sh
- NVIDIA drivers now installed after detection (previously only configured)
- Works offline (USB packages) or online (pkg install)
- Resolves issue where rc.conf was set but driver not installed

**Unified ISO Architecture:**
- Remove --target flag from build.sh (no more vps/baremetal branching)
- Remove --gpu-driver flag from build.sh (runtime detection instead)
- All packages included on every ISO (desktop + all GPU drivers)
- Single image works on VPS, baremetal, and cloud

**Runtime Detection:**
- Add shell-desktop.sh for display detection at firstboot
- VPS/cloud: no display → lightdm disabled (headless)
- Baremetal: display detected → lightdm enabled (Lumina desktop)
- GPU detection always runs, installs correct driver version

**Sudo Unification:**
- Replace all doas references with sudo across entire codebase
- Update AGENTS.md with system configuration guidelines
- Update all documentation (BUILD.md, README.md, REQUIREMENTS.md, etc.)
- Admin panel now uses sudo for privileged operations

### Files Modified

**Core System:**
- build.sh: Remove target/gpu-driver logic, unified package selection
- firstboot/firstboot.sh: Add desktop detection module
- firstboot/shell-nvidia.sh: Add package installation function (+33 lines)

**New Files:**
- firstboot/shell-desktop.sh: Display detection and desktop enablement
- packages/pkg-list-nvidia-all.txt: All three NVIDIA driver versions (390/470/590)
- .opencode/plans/phase0-gpu-fix-unified-iso.md: Implementation plan

**Documentation:**
- PLAN-UNIFY.md: Update Step 3 for unified approach
- REQUIREMENTS.md: Simplify (no target choice), update for sudo
- BUILD.md: Update for unified ISO, sudo commands
- README.md: Update installation instructions
- AGENTS.md: Add system configuration section (sudo standardization)
- ADMIN-PANEL.md: Update privileged operations to use sudo
- CLAWDIE-SHELL.md: Update example commands to sudo
- CLAWDIE-ISO-REFACTORED.md: Update access paths to sudo
- REFACTOR-SUMMARY.md: Update permissions section to sudo

### Benefits

**Simplicity:**
- One build command: ./build.sh (no flags needed)
- One ISO to test and maintain
- No wrong choices for users
- No documentation explaining target differences

**Flexibility:**
- VPS can use GUI via VNC (wayvnc always available)
- Baremetal can run headless (disable lightdm)
- Repurpose hardware without reinstall
- All GPU drivers available for any hardware

**Technical:**
- Fixes critical GPU driver installation gap
- Runtime detection replaces build-time decisions
- Disk overhead: ~650MB (1-2% of 50GB - acceptable)
- No runtime overhead on VPS (services disabled by detection)

### Testing Required

- [ ] Build unified ISO: ./build.sh
- [ ] Test on VPS (no display): lightdm disabled, packages installed
- [ ] Test on baremetal (display): lightdm enabled, Lumina boots
- [ ] Test on NVIDIA hardware: driver installed and loaded
- [ ] Test sudo commands work without password prompts
- [ ] Verify all doas references removed
2026-06-04 20:04:22 +02:00
95aec991f0 docs: add REQUIREMENTS.md with pre-install checklist (Sam & Claude)
Comprehensive pre-install requirements guide:

Hardware requirements:
- RAM: 8 GB minimum (ZFS + jails), 16 GB recommended, 32 GB for LLM
- Disk: 64 GB USB minimum, 128 GB recommended, 256 GB for LLM
- CPU: 2 cores minimum, 4+ recommended

Network requirements:
- 10+ Mbps internet for fetch phase
- DNS must resolve pkg.FreeBSD.org
- Firewall rules documented

Tailscale setup:
- Inline instructions for auth key generation
- Without-Tailscale warnings
- Security implications explained

Build host requirements:
- FreeBSD 15.0+ (Linux not supported)
- 150 GB free disk space
- curl + doas/sudo packages

Time estimates:
- Fetch: 15-20 min (network dependent)
- Build: 10-15 min (CPU dependent)
- Write: 5-10 min (USB 3.0)
- First boot: 10-15 min
- Total: 40-60 min

USB requirements:
- USB 3.0 recommended (5 min write)
- USB 2.0 works but slower (10-15 min write)
- Quality brands recommended

Additional sections:
- Pre-install checklist
- Target-specific requirements (baremetal vs vps)
- Offline/air-gapped build instructions
- Troubleshooting common issues
- Quick reference for minimal/recommended/LLM setups
2026-06-04 20:04:22 +02:00
c3599469e0 feat: rename cloud→vps, fix domain naming (Sam & Claude)
Breaking changes:
- --target cloud renamed to --target vps
- Default domain changed from "home.arpa" to "${agentname}.home.arpa"

Changes:
- build.cfg: TARGET="vps" (was cloud)
- build.sh: --target vps, error messages updated
- firstboot.sh: AGENT_DOMAIN defaults to ${agentname}.home.arpa
- vps/firstboot-vps.sh: TARGET=vps
- Rename cloud-path-test.sh → vps-path-test.sh
- Update integration-test.sh: clawdie.home.arpa
- Update MODULE-MANIFEST.md, shell-system.sh examples
- Update BUILD.md: "VPS target" (was "VPS/cloud target")

Why:
- "vps" is more precise than "cloud" (VPS != always cloud)
- ${agentname}.home.arpa follows mDNS standard
- .local collides with mDNS (as noted in shell-env.sh)

Migration: Update build scripts from --target cloud to --target vps
2026-06-04 20:04:22 +02:00
033d9ba0f4 feat: recommend Tailscale with optional opt-out (Sam & Claude)
- Change default FEATURE_TAILSCALE from NO to YES
- Add build-time warning if TAILSCALE_AUTHKEY not set
- Update firstboot wizard: Tailscale moves to screen 2
- Add summary screen showing Tailscale status
- Update shell-tailscale.sh to handle missing auth key gracefully
- Update BUILD.md with new recommended/optional flow

User experience:
  - With auth key: Tailscale auto-connects (secure)
  - Without auth key: Warning shown, build continues (public SSH)
  - Wizard allows enabling/disabling with clear warnings

No breaking changes - existing builds still work.
2026-06-04 20:04:22 +02:00
aa0aec2d2c feat: port PF module with glasspane VNC (Sam & Claude)
- Add shell-pf.sh module for PF firewall setup
- Add NETWORKING.md with glasspane documentation
- Update MODULE-MANIFEST.md for 8 modules
- Update integration-test.sh for 8 modules
- Update firstboot.sh to source and call PF module

PF features:
  - Block-all default
  - SSH brute-force protection
  - Jail NAT (192.168.0.0/16 supernet)
  - Glasspane VNC (port 5900 via Tailscale only)
  - pf_reload rc.d service for cold boot race
2026-06-04 20:04:22 +02:00
5c36f239cd docs: announce Tailscale mandatory, --target flag, glasspane, repo unification (Sam & Claude)
- README: rewrite for unified iso repo, two targets, mandatory Tailscale pre-req
- BUILD: add Step 0 (auth key), --target flag, --insecure-no-tailscale, first boot Tailscale screen 1
- AGENTS: note clawdie-shell archived, clawdie-iso is canonical, point to PLAN-UNIFY.md
2026-06-04 20:04:22 +02:00
a421084c37 plan: unify clawdie-iso + clawdie-shell, mandatory Tailscale (Sam & Claude)
- Archive clawdie-shell, merge everything into clawdie-iso
- --target vps|baremetal build flag
- Tailscale mandatory: security perimeter, glasspane feature
- Port shell-pf.sh + NETWORKING.md from clawdie-shell
- Full implementation plan for next agent session
2026-06-04 20:04:22 +02:00
0aee135c43 Add EMBED_API_KEY and EMBED_DIMENSIONS to .env pipeline
The .env template was missing two vars that src/config.ts reads at
runtime.  Without them embeddings silently fall back to wrong defaults
(768 dims vs the 1024 the pgvector schema expects).

- shell-env.sh: add EMBED_API_KEY + EMBED_DIMENSIONS to template
- build.cfg: add matching defaults (1024 dims)
- firstboot.sh: export the new vars
- cloud-path-test.sh: add EMBED var checks (now 19 total)

Build: not tested | Tests: PASS (cloud-path 19/19, integration 7/7)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-04 20:04:22 +02:00
81107cd977 Simplify wizard: all jails default, fewer questions
Baremetal wizard reduced from 11 interactions to 5:
  1. Disclaimer
  2. Assistant name
  3. Domain + DNS note
  4. Timezone
  5. SSH key + Tailscale (optional)

Removed questions (now always-on defaults):
  - Agent gender → defaults to "f"
  - Forgejo toggle → always YES (FEATURE_GITEA=YES)
  - Local LLM provider → defaults to "none" (enable post-install)
  - Ollama HPP → NO
  - CODE_HOSTING_MODE → always "gitea"

All jails (db, git/forgejo, cms) provision out of the box.
shell-env.sh defaults aligned: FEATURE_GITEA=YES, CODE_HOSTING_MODE=gitea.

Integration test: PASS | Cloud path test: PASS (17/17)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-04 20:04:22 +02:00
efa64a4574 Add cloud/VPS firstboot path test (17 checks)
Validates the full TARGET=cloud module pipeline:
- pre-baked var validation
- GPU skip on headless
- offline package repo path (SHARE/packages)
- .env generation with quoted values
- hostname, tailscale skip, deploy

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-04 20:04:22 +02:00
18586d3f09 Harden firstboot scripts: POSIX fixes, quoting, offline pkg path
- shell-system.sh: exit → return in sourced module (would kill firstboot)
- maintenance-mode.sh: replace bash += with POSIX concat, fix subshell
  scope in pipe-to-while-read (vdev_status/failed_disks were always
  empty), quote all $POOL_NAME and $disk expansions
- build-vps.sh: portable _sed_i() wrapper for FreeBSD/Linux
- firstboot.sh: set -eu; set USB_PKG_PATH to SHARE/packages so offline
  package repo works after HDD boot (was defaulting to /mnt/media)
- firstboot-vps.sh: remove plaintext password log, check loader.efi
  exists before EFI copy

Integration test: PASS (7/7 modules)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-04 20:04:22 +02:00
4c78af00f9 Tests pass for tmp/ restructuring; fix sparse-copy size display
Integration test: PASS (7/7 modules, state handoff OK)
Build --skip-fetch: PASS (7.3GB image at tmp/output/, DOS/MBR valid)

Add sync before du -sh so sparse image size reports correctly
instead of showing 512B.

Build: PASS | Tests: PASS (integration + build --skip-fetch)

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
33bcb648de Harden upgrade staging: validate, propagate failures, safe copy
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-04 20:04:22 +02:00
2ea21ddc9e Deploy: branch on boot mode, preserve customizations on upgrade (Sam & Claude)
shell-deploy.sh now branches on CLAWDIE_BOOT_MODE:
- install: existing fresh path (extract tarball, seed .env, install-all)
- upgrade: extract to staging dir, run skills-engine applyUpdate()
  for three-way merge preserving customizations, restore existing
  .env, then install-all for db migrations. Falls back to overwrite
  + migrateExisting() if no .nanoclaw/ present.

Overwrite fallback preserves data/, store/, logs/, groups/,
.nanoclaw/, node_modules/ across the upgrade.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-04 20:04:22 +02:00
7ae1e694f9 Align VPS firstboot with modular pipeline (Sam & Claude)
Rewrite vps/firstboot-vps.sh as phase-1 only: partition disk,
create ZFS pool "clawdie", install FreeBSD base, inject firstboot
payload, install bootloader, reboot. On first HDD boot the standard
firstboot.sh modular pipeline runs (zfs detect, wizard, gpu, pkg,
ssh, env, system, tailscale, deploy).

Pre-baked clawdie.conf values get written to build.cfg with
TARGET=cloud so the wizard is skipped. Pool named "clawdie"
(not zroot) for pool detection compatibility.

Remove duplicate clawdie-vps-setup.sh.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-04 20:04:22 +02:00
8cc7b2dcaf Wire ZFS pool detection into firstboot pipeline (Sam & Claude)
New shell-zfs.sh module: detects existing clawdie pool, presents
boot mode menu (install/upgrade/maintenance/shell). Runs as first
step in firstboot.sh before wizard. Upgrade mode loads existing
.env and skips wizard. Maintenance mode exec's to maintenance-mode.sh.

Also: fix POSIX herestrings in maintenance-mode.sh, fix paren
mismatch in snapshot age calc, add nda (NVMe) to disk detection
patterns across all ZFS scripts for FreeBSD 15.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-04 20:04:22 +02:00
5e0649dcdc Wire skills-engine init into install pipeline (Sam & Claude)
Add .nanoclaw/ and bootstrap artifact checks to shell-deploy.sh
post-install verification. Complements the new skills-init step
added to clawdie-ai's install pipeline.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-04 20:04:22 +02:00
8e280cb40c Merge origin/main: ZFS pool migration, VPS support, Syncoid docs (Sam & Claude)
Resolve conflicts keeping modular shell-*.sh firstboot architecture
from implementation branch. New from main:
- firstboot/zfs-pool-detect.sh, zfs-pool-migrate.sh, maintenance-mode.sh
- vps/ directory (build-vps.sh, migration scripts)
- docs/SYNCOID-SETUP.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-06-04 20:04:22 +02:00
74e7b583d0 Clarify Tailscale auth key prompt (Sam & Codex)
Explain reusable key for host + jails and seed auth key into .env.

---

Build: FAIL — not run

Tests: FAIL — not run
2026-06-04 20:04:22 +02:00
d65ef7c33f Add Tailscale firstboot module (Sam & Codex) 2026-06-04 20:04:21 +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
16252fb67c iso: sync clawdie-ai v1.0.2 + codex baseline (Sam & Codex) 2026-06-04 20:04:21 +02:00
536f9ea90c docs: update integration env var count 2026-06-04 20:04:21 +02:00
28f2100a47 feat: add local LLM choice and model seeding 2026-06-04 20:04:21 +02:00
780a3a3c7f docs: expand git/forgejo checks in testing 2026-06-04 20:04:21 +02:00
4559e6fc5c docs: add forgejo checks to testing 2026-06-04 20:04:21 +02:00
c3c6a74879 docs: add forgejo port detail 2026-06-04 20:04:21 +02:00
f1a7f5b8b4 docs: note optional forgejo in firstboot 2026-06-04 20:04:21 +02:00
93a690db85 feat: enable forgejo by default in firstboot 2026-06-04 20:04:21 +02:00
e3a2b1113a Document isolated bhyve bridge for tests (Sam & Codex) 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
92873b5203 Link fresh-install checklist from testing guide (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
ed09223233 Add commit attribution policy (C&C) 2026-06-04 20:04:21 +02:00
74752134c1 feat(build): bake new agent config vars into ISO image
build.cfg now uses ${VAR:-} pattern so env vars take precedence,
enabling cloud builds with arbitrary agent config via environment.

build.sh step 6 now injects all new fields (AGENT_GENDER,
PI_TUI_PROVIDER, PI_TUI_MODEL, API keys, Telegram, embeddings)
into the baked build.cfg inside the image.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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
702909c3c7 feat(scripts): add build-and-log.sh — build ISO + publish HTML log
Wraps build.sh, captures stdout+stderr with tee, generates a styled
HTML page matching the site's dark theme (DM Mono terminal block,
status badge, duration). Publishes two copies:
  - /docs/iso-build-log.html  (always latest)
  - /docs/iso-build-YYYY-MM-DD.html  (dated archive permalink)

Usage: sudo ./scripts/build-and-log.sh [build.sh args...]

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-04 20:04:21 +02:00
0caa9004f6 feat(firstboot): resume/reset flags, checkpoint guards + move bhyve scripts
firstboot.sh:
- Set SHELL_{GPU,NVIDIA,PKG,ENV,DEPLOY}_TEST=1 before sourcing modules
  (prevents double-execution on source — same bug fixed in integration-test)
- Add --resume: run_step() skips steps already recorded in progress file
- Add --reset: clears progress file, starts over from scratch
- Add --help
- Wizard tracked as checkpoint so --resume skips re-prompting the user
- run_step() helper: guard → run → mark done in one call

scripts/bhyve-test.sh (was tmp/bhyve-test-setup.sh):
- Moved to tracked scripts/ directory (tmp/ is gitignored)
- Timeout 300→1800s (full install is 20–25 min, not 5)

scripts/run-bhyve-test.sh (was tmp/run-bhyve-test.sh):
- Moved to scripts/, log output redirected to logs/ (also gitignored)

BUILD.md, TESTING.md, IMPLEMENTATION-PLAN.md:
- Update all bhyve script references to scripts/bhyve-test.sh

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-04 20:04:21 +02:00
ec69aa817d fix(test): suppress double-execution and mock tarball in integration test
Each shell module guards auto-run with SHELL_*_TEST env vars but the
integration test wasn't setting them, causing every module to execute
twice (once on source, once on explicit call).

Fixes:
- Set SHELL_{ENV,PKG,GPU,NVIDIA,SYSTEM,DEPLOY}_TEST=1 before sourcing
- Mock CLAWDIE_TARBALL with a real tar.gz of the pre-populated test dir
  so the deploy module can extract + verify without needing the ISO
- Redirect shell-system stdout+stderr to /dev/null (service enables
  write "does not exist" to stdout on a headless host)

All 6 modules now execute exactly once, cleanly.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-04 20:04:21 +02:00
26010f0e41 fix: sync integration-test and docs to shell-*.sh rename
integration-test.sh still sourced old clawdie-shell-*.sh names after
the rename in 66484dc. BUILD.md and TESTING.md referenced /tmp/ (system)
instead of ./tmp/ (repo-local) for bhyve-test-setup.sh. Add /tmp/ to
.gitignore.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-04 20:04:21 +02:00
5f99178683 docs: Complete documentation for v0.9.0 shell modules
Updated IMPLEMENTATION-PLAN.md:
- Mark Phase 1 (shell modules) complete: 26.mar.2026
- Mark all 5 tasks (1.1-1.5) as  COMPLETE
- Add Phase 2 status section (integration & testing)
- Reference TESTING.md for test procedures

Created TESTING.md (comprehensive guide):
- Level 1: Module integration test (5 min, offline)
- Level 2: Full bhyve boot test (20-25 min, interactive)
- Boot sequence & expected output
- Troubleshooting guide (VM won't boot, bsdinstall hangs, etc)
- Test results checklist
- CI/CD integration notes

Created SHELL-MODULES.md (implementation reference):
- Module index (7 modules, 1,500 LOC)
- Detailed documentation for each module:
  * shell-gpu.sh (Intel/AMD/NVIDIA/VMware detection)
  * shell-nvidia.sh (Driver version selection)
  * shell-pkg.sh (Repo config + USB cache seeding)
  * shell-env.sh (.env generation + secrets)
  * shell-system.sh (rc.conf + hostname + services)
  * shell-ssh.sh (SSH keys + passwords)
  * shell-deploy.sh (Tarball extraction + install-all)
- Execution order and state handoff
- POSIX compliance notes
- Individual module testing examples

Updated BUILD.md:
- Add "Testing the Built ISO" section
- Link to TESTING.md for procedures
- Note module integration test and bhyve boot test

This completes the documentation for v0.9.0 Phase 1
(implementation) and provides clear guidance for Phase 2 (testing).

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-04 20:04:21 +02:00
d28d38b49f impl: Complete all 5 shell modules for v0.9.0 installer
Implements critical firstboot orchestration:
- shell-gpu.sh: GPU detection (Intel i915kms, AMD amdgpu, NVIDIA, VMware vmwgfx)
- shell-nvidia.sh: NVIDIA driver version selection (590/470/390 per GPU)
- shell-pkg.sh: Package repository config + Bastille cache seeding
- shell-env.sh: .env generation with secrets and jail IP allocation
- shell-deploy.sh: Clawdie-AI tarball extraction + npm run install-all

All modules:
- POSIX-compliant (no bash-isms)
- Proper error handling and validation
- Comprehensive logging to /var/log/clawdie-firstboot.log
- Progress tracking to /var/log/clawdie-firstboot.progress
- Environment variable overrides for testing

Unblocks firstboot.sh which was calling undefined functions.
Ready for end-to-end installation testing on bhyve VM.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-04 20:04:21 +02:00
01cbe6e962 refactor: replace XFCE/MATE/KDE with Lumina across all files
- Create packages/pkg-list-lumina.txt with Lumina desktop environment packages
- Delete pkg-list-xfce.txt, pkg-list-mate.txt, pkg-list-kde.txt
- Remove desktop-installer from pkg-list-desktop-base.txt
- build.cfg: DEFAULT_DESKTOP=lumina (sole supported DE)
- build.sh: use pkg-list-lumina.txt instead of pkg-list-xfce.txt
- BUILD.md: update DEFAULT_DESKTOP comment
- CLAWDIE-ISO.md: add deprecation notice, update all DE references to Lumina only

Lumina is the sole supported FreeBSD-native desktop environment as per
LUMINA-INTEGRATION.md and CLAWDIE-ISO-REFACTORED.md specifications.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-06-04 20:04:21 +02:00
53d83b26c0 chore: Switch default domain from .local to .internal, bump to v0.9.0
- Update default agent domain: clawdie.local → clawdie.internal
- Avoids mDNS conflicts and uses RFC-compliant .internal TLD
- Update baremetal wizard prompt to show .internal example
- Bump CLAWDIE_VERSION from 0.8.2 to 0.9.0 (cloud/baremetal + SSH support)

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