Require the tracked FreeBSD 15.x line during install and environment checks, and align docs and skill compatibility metadata with 15.x only. --- Build: pass Tests: pass — 37 passed (2 files) --- Build: pass | Tests: pass — 2363 passed (701 files)
27 KiB
Changelog
All notable changes to Clawdie Controlplane will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]
Changed
- Harness migration: Codex → Aider+Pi.
src/controlplane-runner.ts(formerlycontrolplane-codex-runner.ts) now invokes Aider as the primary controlplane harness.CONTROLPLANE_RUNNERconfig:'aider' | 'pi'(was'codex'). Aider runner built with--messageflag (one-shot prompt), no JSON streaming. Env vars renamed:CONTROLPLANE_AIDER_*(wasCONTROLPLANE_CODEX_*). Aider+Pi provide superior multi-turn reasoning and are available in both dev (pip install aider-chat) and ISO (venv at/opt/clawdie/venv/aider). Codex, Claude Code, and other CLIs remain installed as optional tools. setup/agent-cli-check.ts: Aider and Pi now listed first in CLI detection order (primary harness preference).- Ops database now provisioned in setup pipeline (
setup/secrets.ts+setup/db.tswith role/database/grants). Split-brain databases now: skills, memory, ops. justfile— All npm package commands now prefixed withnpx:tsc,tsx,prettier,vitest. Fixes FreeBSD PATH issues where npm packages are not globally installed.src/controlplane-aider-runner.tsstream handling: Added guard to prevent race-condition writes after stream end; waits forfinishevent before resolving promise.
Added
src/controlplane-aider-runner.ts— Aider task execution with prompt building (identity + skill + user), argument passing, timeout handling, log streaming, token estimation.src/controlplane-aider-runner.test.ts— 13 tests covering prompt sections, flags, success/error paths, timeout, env passthrough, token math.scripts/glass.shupdated: right pane now launchesaiderinstead of shell.- Better Auth integration for dashboard authentication (
better-auth@^1.6.0). Two modes:local_trusted(no login required on internal network) andauthenticated(email+password sessions for public exposure).src/auth.tscreates a Better Auth instance tied to the existing pg Pool, using custom table names (cp_users,cp_sessions,cp_accounts,cp_verifications) to avoid collisions. CONTROLPLANE_BIND_HOSTconfig — defaults to0.0.0.0(was hardcoded127.0.0.1). Dashboard and API accessible from any jail on the subnet.CONTROLPLANE_AUTH_MODEconfig —local_trusted(default) orauthenticated.BETTER_AUTH_SECRETconfig — required whenauthenticatedmode is active./api/auth/*routes — Better Auth handler mounted in control plane API for sign-in, sign-up, session management./dashboardstatic file serving — built React SPA served fromdashboard/dist/with SPA fallback toindex.html.ControlplaneApiOptions—startControlplaneApinow accepts a structured options object ({ pool, authInstance, dashboardDir? }) instead of a barePool.- Agent bearer token auth (
op:scheme) preserved alongside Better Auth sessions — agents continue to authenticate viaAuthorization: Bearerheader.
Changed
controlplane-api.tsbind address changed from127.0.0.1to0.0.0.0by default. Override withCONTROLPLANE_BIND_HOSTin.env.startControlplaneApi(pool, port)signature changed tostartControlplaneApi(opts, port)— requiresControlplaneApiOptionswith auth instance.
Added (rename completion)
CLAWDIE.md— primary orchestrator identity file (seeded fromSOUL.md).resolveIdentityFile()looks for${AGENT_NAME.toUpperCase()}.mdfirst, then falls back toSOUL.md.buildControlplaneRunCommandnow requiresagentNameand routes throughresolveIdentityFile()instead of hard-codingSOUL.md. Heartbeat caller and tests updated. Removed stalerequire('fs')from ESM module.doc/NAMING-HANDOFF.mddeleted — all checklist items complete (vitest 847/847 green).
Renamed
- Control plane terminology sweep across docs:
CEO/'ceo'→orchestrator,company→system,Paperclip→Control Plane,board→operator. AffectsSYSADMIN_AGENT.md,DB_ADMIN_AGENT.md,GIT_ADMIN_AGENT.md,doc/CONTROLPLANE-*.md,doc/MULTI-PROVIDER-ARCHITECTURE.md,docs/public/architecture/controlplane.md. Code rename landed earlier in061a25f; this catches the doc tail. (doc/NAMING-HANDOFF.mdremaining items:CLAWDIE.mdcreation + wiringresolveIdentityFile()— tracked for follow-up.)
Added
setup/agent-cli-check.ts— fail-fast gate at the top ofsetup onboardrequiring at least one ofclaude,codex,gemini,pionPATH(mirrors Paperclip's per-adapterensureCommandResolvablepattern as a single check)setup/environment.tsnow surfacesCLAUDE/GEMINI/PIalongside the existingCODEXkey insetup verifydoc/AGENT-CLI-VALIDATION.md— end-to-end validation report for all four agent CLIs in a freshly-provisionedclawdieworkerjail (claude 2.1.96, gemini 0.36.0, pi 0.65.2, codex 0.117.0)clawdie-iso/scripts/fetch-npm-globals.sh+clawdie-iso/firstboot/shell-npm-globals.sh— offline npm-globals bundle for claude/gemini/pi installed under~/.npm-globalduring firstbootsetup/jails.tschsh hook — sets the worker jail's root login shell to/usr/local/bin/bashsobastille cmdheredocs and bash-isms work in provisioning scriptsinfra/packages/worker-jail.txt— addsbash,node24,npm-node24,gitto the baseline worker-jail package list
Docs
README.md,CLAWDIE-ISO.md,AGENTS.mdsynced to mention the agent-CLI prereq gate and the npm-globals bundle pathAGENTS.md+ nginx/freebsd-admin skills updated with controlplane dashboard build notes (Paperclip UI) and Tailscale proxy/PF pointers
Added (operator observability + provider fallback, apr.2026)
- Provider fallback layer (
src/provider-fallback.ts) — automatically swaps the configured LLM provider for an operator-defined fallback when the primary hits a usage cap. Detects429 Usage limit reachedfrom pi stderr/stdout, parsesYour limit will reset at YYYY-MM-DD HH:MM:SS, and marks a cooldown until the reset timestamp passes. Cooldowns are in-memory plus persisted to$CLAWDIE_VAR_DIR/provider-cooldowns.json(default$HOME/.clawdie/state/) so a restart inside the cap window does not re-trip the cap. Wired intoagent-runner.ts(main chat) andcontrolplane-heartbeat.ts(specialists). Per-chat overrides (group.jailConfig.provider) are unchanged — only the spawn-time effective values are swapped while the cooldown is live. LLM_FALLBACK_PROVIDER,LLM_FALLBACK_MODEL,LLM_FALLBACK_DEFAULT_COOLDOWN_SECONDSconfig — operator picks the fallback (e.g.openrouter+ a free-tier model). Default cooldown (3600s) is used only when the cap message has no parseable reset stamp.getLlmKeyForProvider(provider)(src/env.ts) — provider-aware secret resolution so the right API key is injected when fallback swaps providers; falls back to first-available when the requested key is absent.- Startup validation: when
LLM_FALLBACK_PROVIDERis set, the matching API key is now in thecriticalConfigwarn list. Warns separately whenLLM_FALLBACK_PROVIDERis set withoutLLM_FALLBACK_MODEL. /clearcooldownadmin command (ops-chat-gated) — lists active cooldowns when called without args; takes<provider>orall. Persists immediately so cleared state survives restart./policynow shows aProvider cooldown: <provider> until <iso> → fallback <provider/model>line for each active cooldown.- Activity payload now records
effective_provider/effective_modelnext toactual_*so for any run you can read configured vs effective vs actual. - Structured operator reports family with consistent
Observed/Interpretation/Operator Notessections —src/reports/{system,disk,tasks,budget,publish,test}-report.ts. Each report is a pure builder + renderer fed by raw inputs (DB rows, command output, JSON status files), tested independently of the wiring layer. /report,/disk,/tasks,/budgetreport,/publishreport,/testreportTelegram commands — the structured-report surfaces.- Test/build status pipeline —
scripts/write-test-build-status.shruns the project'snpm run buildandnpx vitest run --reporter=json --outputFile=..., then writesbuild-status.jsonandtest-status.jsonto the status directory:$AGENT_STATUS_DIR(primary) →$CLAWDIE_VAR_DIR(legacy) →<project-root>/tmp/status(default)./testreportreads these files; missing or stale (>6h) files degrade tounknownwith an action note rather than fabricating success. Pre-commit/post-commit hooks append the latest status to commit messages so reviewers see what was passing at commit time. - Free-text ops routing (
src/report-intent.ts) — bot-addressed phrasings like "disk usage", "are the tests passing", "what tasks do we have", "budget report" are classified byclassifyReportIntent()and routed to the matching structured builder instead of the LLM path. Keeps memory/narrative recall from overriding a fresh probe. isOpsFlavored()— broader pattern matcher used to suppress stale memory injection on ops-flavored prompts so the LLM answers from live tools rather than narrative recall.- Specialist capability gate (
src/agent-capabilities.ts) — pre-flight check that compares the requested skill (and task description) against the assigned jail's installed tools, refusing the run with a clear reason when the agent cannot perform it. - Telegram bot now publishes a proper command menu via
setMyCommandswith separate command lists for private chats vs the ops chat (src/channels/telegram.ts). AGENTS.md§ "Verify Before Claiming Remote State" — convention requiringgit fetchbefore reporting on any remote ref. Born from a real two-agent confusion on 26.apr where staleorigin/multitenantrefs in two worktrees produced contradictory "no new remote work" claims.
Changed (operator observability)
- Many Telegram commands moved from
requireRegistered(ctx)gate to direct chat resolution; per-handlerrequireAdmin/requireOpsChatstill enforce auth. Effect: admins can run read-only ops commands from any chat without registering it first. /statusZFS section caps at 8 lines with a "… N more dataset(s) hidden" footer.parseBastilleListconsolidated to use the sharedbastille-list.tsparser.summarizeZfsRowsextracted as a pure exportable helper.
Fixed (operator observability)
/reportcontrolplane probe: whenCONTROLPLANE_BIND_HOST=0.0.0.0,getControlplaneProbeHost()now derives a reachable host fromBETTER_AUTH_URLinstead of probing the wildcard address. Previously the report would say "controlplane unreachable" even when controlplane was healthy.- Test artifacts now write to repo-local
tmp/instead of system/tmp(perAGENTS.md§ "Temporary File Storage").
[0.10.0] - 2026-04-07
Paperclip Control Plane Integration
Major architectural addition: Paperclip as multi-agent orchestration layer for Clawdie.
Added
doc/PAPERCLIP-INTEGRATION.md— Full architecture, security model, deployment guide, operations, and troubleshooting for Paperclip control planedoc/PAPERCLIP-COMPANY-STRUCTURE.md— Default organization chart (CEO + Sysadmin + DBA + Git Admin), role definitions, skills mapping, decision logic, approval workflowssetup/paperclip.ts— Jail provisioning for Paperclip at 10.0.0.2, company auto-provisioning, skills mounting- Identity files:
SYSADMIN_AGENT.md,DB_ADMIN_AGENT.md,GIT_ADMIN_AGENT.md— Agent role instructions with skill-aware decision logic (alongside existingSOUL.md) - Operational skills:
jail-status,backup-db,disk-usage,service-restart,system-stats,db-migrate,db-vacuum,db-analyze,git-pull,git-merge,git-release-tag,git-branch-protect,git-push-mirror - All 33 skills in
.agent/skills/updated withcompatibility: FreeBSD 15.xmarker in SKILL.md frontmatter - PostgreSQL integration — Paperclip connects to existing PostgreSQL jail at 10.0.0.3, shares database instance with Clawdie
- Skills mounting —
.agent/skills/mounted read-only into Paperclip jail via nullfs for agent discovery
Changed
.agent/skills/*/SKILL.md— All skill files now include platform compatibility marker (e.g.,compatibility: FreeBSD 15.x)
Notes
- Paperclip is separate repository; fork available at https://codeberg.org/Clawdie/Paperclip
- v0.10.0 targets testing phase; v1.0.0 will follow after USB installer validation + end-to-end multi-agent testing
- Security model:
authenticatedmode (login required), board user approvals, agent API keys, encrypted secrets - Agent heartbeat policy: CEO and specialists wake on-demand only (cost-conscious); Sysadmin has daily check-in
- Token budget model: daily allocations, hard-stops at company + per-agent limits
- Future: Option B (v0.11.0+) — Bastille wrapper adapters for per-task jail isolation
[1.0.3] - 04.apr.2026
Domain Defaults Fix
Added
GIT_MIRROR_URLSto mirror additional repos into the git jail; status output now includesMIRROR_EXTRASGIT_JAIL_NAMEto override the git jail ID when Bastille/VNET naming constraints apply
Changed
- Default domains now use
home.arpafor internal names, aligning onboarding and env audit output with<agent>.home.arpa
Fixed
setup/env-audit.tsno longer warns about missingREMOTE_GIT_URLwhen mirror URLs are configured
[1.0.2] - 2026-04-03
Out-of-the-Box Jails + SSH Baseline
Added
setup/db.ts,setup/jails.ts,setup/hostd.ts— previously referencedinstallsteps are now implemented in-treesetup/pf.tsnow writes/etc/pf.warden.confand ensurespf.confincludes it (NAT egress baseline forwarden0)- Ansible:
infra/ansible/playbooks/jails-ssh-baseline.yaml+ optional PF SSH exposure ininfra/ansible/playbooks/host-pf-baseline.yaml(host ports2222..2226) - Docs:
docs/public/reference/multi-agent.md(same-host multi-agent procedure, subnet +warden0/PF notes)
Changed
setup/install.tsplan aligns with the step registry and can run root-only steps viasudowhen invoked as non-root- Default jail naming prefers
{agent}-*(with legacy fallbacks) to avoid collisions when a second agent is added later .env.exampledocumentsSSH_PUBLIC_KEYfor Ansible jail SSH readiness
Fixed
- Temp files/artifacts use
<project-root>/tmp/instead of system/tmp(skills engine + scripts + Telegram voice download)
[0.7.2] - 2026-03-15
Docs Redesign + Skills Artifact Plan
Changed
html/docs-clawdie-si/css/shared.css: full CSS rewrite — soft pastel light theme, sticky top-bar and sidebar in document flow, no backdrop-filter, matches Clawdie brand (Cormorant Garamond + DM Mono,#4fb3ceaccent)- Top-left brand renamed to "Clawdie Docs" across all 12 HTML pages
- Self-referencing "Docs" nav link removed from all pages
- Introduction headline: "Sysadmin Skills in Vector Format — Human Operator in charge from ground up!"
- Introduction copy: FreeBSD-native → FreeBSD based, terminology pass throughout
- All
<code>main</code>branch references in prose now link to Codebergsrc/branch/main - Technical terms linked to external docs (FreeBSD handbook, pgvector, sqlite.org, nodejs.org, etc.)
built-in knowledgelinks todocs/internal/BUILTIN-KNOWLEDGE-SPEC.mdon Codeberginstall.htmlsimplified: quick-start collapsed to 4 lines, Package Note trimmed, duplicate "Simple Onboarding Flow" section removed
Added
docs/internal/SKILLS-ARTIFACT-V1-PLAN.md: SQLite + sqlite-vec architecture for skills artifact, v1 trigger conditions, generation pipeline, size estimates, open questions — embeddings deferred until docs stabilise
[0.7.1] - 2026-03-15
Control Plane Refactoring
Naming consistency pass and observability wiring on top of 0.7.0.
Changed
src/infra.tsrenamed tosrc/controlplane.ts; all exported symbols renamed (runControlPlaneChecks,CONTROLPLANE_CHECK_INTERVAL_MS,ControlPlaneReport,ControlPlaneCheckResult)- Watchdog stores
lastControlPlaneReportand exposes it ascontrolplanein IPC status response - All stale
src/infra.tsreferences eliminated from docs, skills, and HTML
Added
npm run doctornow queries the watchdog IPC socket and printsWATCHDOG_MODE,WATCHDOG_THROTTLED,WATCHDOG_FREE_MEMORY_MB,WATCHDOG_ACTIVE_JAILS,WATCHDOG_QUEUED, and per-checkCONTROLPLANE_*lines; showsWATCHDOG: offlinewhen agent is not running
Documentation
README.md: v0.7.1, simplified "Web Serving" section (was 18 lines of future tense), collapsed step entrypoints list, updated key filesdocs/public/operate/monitoring.md: rewritten with Watchdog and Control Plane layers, check table, updated Doctor sectiondocs/public/operate/security.md: "Host Administration" updated to describe hostd as the implemented executor; architecture diagram gainsclawdie-hostd (root)columndocs/public/architecture/host-operator-model.md: new "Privileged Host Daemon" section with delegation chain and two-entry rc.confdocs/internal/CMS-DEPLOYMENT-PLAN.md: setup refactor checklist updated (✅ pf/cms done, ⏳ Astro/verify pending)html/docs-clawdie-si/: v0.7.1 badge,src/controlplane.tsreferences throughout.agent/skills/nginx/SKILL.md: fully rewritten to cms-jail-centric model; legacy host-edge sections removed.agent/skills/setup/SKILL.md: privilege delegation model section,src/controlplane.tsreference.agent/skills/freebsd-admin/SKILL.md: "Privileged delegation boundary" section
[0.7.0] - 2026-03-15
Privileged Host Daemon + PF Web Edge
Added
clawdie-hostd: root daemon on/var/run/clawdie-hostd.sock(mode 0660, groupclawdie). All privileged host operations go through whitelisted Zod-validated op handlers — bastille start/stop/restart/list, zfs snapshot/rollback/create, pf-reload/enable, service start/stop/restart, pkg-install, sysrc-set, sanoid-snapshot. Agent user callshostd(op, params)fromsrc/hostd/client.ts; never needs sudo at runtimesetup/pf.ts: writes/etc/pf.confwith NAT egress for jail subnet andrdr passrules forwarding port 80/443 to the cms jail; detects external interface from.env,route -n get default, or fallbackvtnet0; validates withpfctl -nf, backs up existing config, enables PFsrc/controlplane.ts(originallysrc/infra.ts): self-healing layer checks hostd reachability, persistent service jails ({agent}-db/git/cms), and PF at startup and every 5 minutes via watchdog; attempts repairs via hostd;process.exit(1)if db jail still down after fix attemptsetup/hostd.ts: setup step that writes the rc.d script, setsclawdie_hostd_enable=YES, starts the daemonnpm run hostd/npm run hostd:devscripts
Changed
src/watchdog.ts:infraTimerfiresrunControlPlaneChecks()every 5 minutessrc/index.ts: runs control plane checks beforeinitDatabase()setup/service.ts:generateRunScript()creates tmux session before exec; openssetupwindow ifPI_PROFILE=setup- Preflight: 15 steps (added
pfat position 3,hostdat position 12) package.json: version 0.6.0 → 0.7.0
Removed
infra/ansible/playbooks/host-nginx.yaml: transitional playbook deleted- Host nginx as a required Clawdie dependency
Infrastructure
.web-staging/pf.conf.txt: updated to PF RDR model (rdr passrules replacing host nginx passthrough).agent/skills/nginx/SKILL.md: updated scope, design direction, and hosted sites table to reflect cms-jail-only model
[0.6.0] - 2026-03-14
db Jail Mandatory + Watchdog + FreeBSD Onboarding
Added
setup/db.ts: db jail is now mandatory (not opt-in); renamed Brain A / Brain B to Agent System Skills / User/Agent Memory throughoutsrc/watchdog.ts: resource watchdog with run modes (auto/slow/fast/permanent) and Unix IPC socket; reads host free memory viasysctl, throttles jail spawns below configurable threshold- Three-mode service autostart:
AUTO(rc.d managed),YES(always),NONE(default — user starts manually); documented with plain-language rc.conf examples feat(setup): add FreeBSD onboarding and baseline sync—npm run wizardnow syncs host package baseline and sets up jail bridge alongside the TUI config flow- Auto-detect host locale from
LANG/LC_ALL/localewithout prompting; apply to~/.login_confafter onboarding feat(freebsd): manage jail hostnames and /etc/hosts— setup writeshostnameinto each jail config and syncs/etc/hostson host and inside jails forhome.arparesolutionfeat(skills): built-in knowledge in default db setup— skills artifact loaded into db duringnpm run setup -- --step db;feat(skills): add host-side runtime lookup— agent resolves built-in knowledge from db at runtime; follow-up jail messages enriched with built-in knowledgefix(split-brain): make verify enforce skills artifact integrity—npm run setup -- --step verifychecks skills artifact version matches dbfeat(cms): add repo-owned Strapi seed bootstrap— Strapi data seeded from committed baseline; secrets generated per-installfeat(doctor): surface split-brain readiness—npm run doctorprintsSPLIT_BRAIN,SKILLS_*, andMEMORY_*linesfeat(setup): make local git a default jail— git jail now created in the standard setup flow, not opt-in
Changed
fix(freebsd): replace clawdie0 leftovers with warden0— last stale bridge references eliminatedfix(db): generate split-brain secrets and remove bootstrap deadlocksrefactor(payments): simplify Stripe integration— remove unused webhook surfacerefactor(setup): unify FreeBSD package baselines— single source of truth for host pkg install linefix(setup): pin uv guidance to Python 3.11
Documentation
- Manifesto: added "Code does not lie" section to Why page
fix(docs): align docs.clawdie.si design with main siteand restore ToC column- FreeBSD onboarding flow diagram added
[0.5.0] - 2026-03-13
docs.clawdie.si Launch + Built-in Knowledge
Added
docs.clawdie.silaunched: split-brain docs, architecture guide, and NanoClaw upstream guide published- Built-in knowledge spec:
docs/internal/BUILTIN-KNOWLEDGE-SPEC.mddefines the skills artifact format, bootstrap flow, and freshness badge contract - NanoClaw upstream toggle (git remote, Option A): operator can pull agent improvements from upstream without a full reinstall
- Stripe (
add-stripe) and ProtonMail (add-protonmail) integration skills added to.agent/skills/ - Deploy helper (
deploy.sh) and freshness badge wired into the docs site
Changed
- BSD-3-Clause license emphasis throughout; license page added to docs site
- Docs redesign (Instrument Codex aesthetic — dark editorial, Cormorant Garamond + DM Mono)
[0.4.0] - 2026-03-13
Host-First Architecture + Multi-Agent Naming
Comprehensive naming refactor to support multi-agent deployments and the host-first runtime model.
Changed
- Four-phase AGENT_NAME refactor: all installer steps, jail config, platform detection, and the orchestrator host migration now read
AGENT_NAMEfrom.envinstead of hardcoded names warden→jailrename throughout runtime;clawdie-cpprefix removedAGENT_SUBNET_BASEconfig: subnet base read from.env, IPs computed automatically- Website redesign: architecture diagram, status badges, Why Clawdie table added to landing page
- Docs redesign (first pass — Instrument Codex aesthetic)
Added
feat: NanoClaw upstream toggle— git remote for pulling upstream agent improvementsfeat: add add-stripe and add-protonmail skills— integration runbooksdocs: built-in knowledge specgroundwork (bootstrap flow, local knowledge definition)
Removed
PI-ZAI-KEY.md— notes absorbed intoREFACTOR-PLAN.md- Hardcoded
clawdie-cpreferences from all playbooks and service configs
[0.3.0] - 2026-03-10
🎉 Milestone Release
This release marks a significant milestone: Clawdie now has a complete FreeBSD bsdinstall-style onboarding wizard, proper resource management, and a clean separation between code and configuration.
Added
Setup Wizard (npm run wizard)
- 11-page curses-style TUI modeled after FreeBSD's
bsdinstall - Deployment profiles: Minimal (controlplane + db), Standard (+ CMS), Full (+ bhyve GUI VM)
- Network configuration with auto-calculated IPs from subnet base
- VMM prerequisites check - validates bhyve support before enabling GUI VM feature
- Protected paths password - auto-generates secure password for
/screenshots/auth - htpasswd generation - creates nginx basic auth file automatically
- Non-interactive mode for CI/CD:
npm run wizard -- --non-interactive
Configuration Management
- Environment-driven Ansible - all IPs read from
.envwith fallback defaults - Feature flags in
.env:FEATURE_CMS,FEATURE_BHYVE_GUI,FEATURE_SANOID - CLAWDIE_TMP_DIR - project-relative temp directory (no more
/tmpusage) - TMP_DIR, TMP_IPC_DIR, TMP_TESTS_DIR, TMP_SKILLS_DIR exports from config.ts
Infrastructure
- jail-resource-limits.yaml playbook - applies ZFS quotas and RCTL memory limits
- CMS resource limits - 20G ZFS quota, 2G memory limit
- Screenshot gallery generator -
setup/screenshot-wizard.ts+ansi-to-html.ts
Changed
- Removed hardcoded IPs from Ansible playbooks (was 51.83.197.1, now reads from env)
- Removed
/tmpusage - all temp files now use<project-root>/tmp/ - Removed redundant
controlplane_jail_namefrom playbook (uses group_vars) - Standardized date format - European format for user-facing, ISO for internal
Fixed
- Protected paths htpasswd is now generated during wizard, not manually
- Wizard preserves existing
.env- only adds missing keys - Shell scripts use project-relative tmp/ instead of system
/tmp
Security
- SCREENSHOTS_PASSWORD auto-generated with 32-char secure random
- htpasswd file created with proper ownership (root:www, mode 640)
- No real IPs or secrets in committed files
Documentation
- Session logs in
docs/internal/sessions/with ISO filename, European content dates - ZFS snapshot naming convention documented (DD.MMM.YYYY)
- VMM prerequisites documented in
freebsd-adminskill
Attribution
This release was made possible with assistance from:
AI Systems: Openclaw, NanoClaw, z.ai, Anthropic Claude, OpenAI Codex, OpenRouter, Deepseek, Groq, Ollama, pi-tui
Human: Peter Steinberger
[0.2.0] - 2026-03-06
Added
- PostgreSQL 17 with pgvector for hybrid memory search
- Memory pipeline scripts (Phase 2)
- AI brain schema with embeddings
- Controlplane operator documentation
- PI coding agent integration
- Test deployment plan
Changed
- Internal IP and domain redesign
- Adopted shared npm service user model
[0.1.0] - 2026-02-28
Added
- Initial FreeBSD jail architecture
- Bastille jail creation playbooks
- Basic Ansible inventory structure
- Telegram bot integration
- Grammy messaging framework