Merge pull request 'docs: rewrite negative patterns to positive actionable instructions' (#88) from docs/positive-language-rewrite into main

Reviewed-on: #88
This commit is contained in:
clawdie 2026-06-21 14:01:59 +02:00
commit 99755fa8b7
4 changed files with 91 additions and 82 deletions

View file

@ -3,16 +3,16 @@
## Agent Identity and Current Role Split ## Agent Identity and Current Role Split
The XFCE operator USB work now uses a git-coordinated split. Agents may review The XFCE operator USB work now uses a git-coordinated split. Agents may review
or suggest across boundaries, but should not silently take over another role's or suggest across boundaries, but must coordinate explicitly before taking over
load-bearing responsibility. another role's load-bearing responsibility.
| Role name | Identity | Owns | Restrictions | | Role name | Identity | Owns | Restrictions |
| ---------------------------------- | ----------------------------------- | -------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | | ---------------------------------- | ----------------------------------- | -------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
| **Pi ISO Developer** | Pi harness (this dev agent) | Source changes, docs, static checks, commits, pushes | Does not start ISO builds or flash media unless explicitly assigned | | **Pi ISO Developer** | Pi harness (this dev agent) | Source changes, docs, static checks, commits, pushes | Does not start ISO builds or flash media unless explicitly assigned |
| **Codex ISO Builder** | codex pkg on the FreeBSD build host | `./build.sh`, mounted-image inspection, publishing, hardware validation | Should avoid broad source refactors; reports exact logs/output back through git or handoff notes | | **Codex ISO Builder** | codex pkg on the FreeBSD build host | `./build.sh`, mounted-image inspection, publishing, hardware validation | Focuses on targeted changes; broad source refactors require prior review; reports exact logs/output back through git or handoff notes |
| **Hermes USB/IMG Deployer** | Hermes on Debian/Linux | Downloading verified published artifacts, USB target identification, flashing | Does not need git-host access; never flashes unverified artifacts or partition paths | | **Hermes USB/IMG Deployer** | Hermes on Debian/Linux | Downloading verified published artifacts, USB target identification, flashing | Only flashes verified artifacts to whole-disk target paths; does not need git-host access |
| **Claude Reviewer / XFCE Tweaker** | Claude (Linux) | Review/plans plus Track E XFCE GUI polish | Cannot build ISO, cannot run FreeBSD-only validation, should mark speculative runtime claims as such | | **Claude Reviewer / XFCE Tweaker** | Claude (Linux) | Review/plans plus Track E XFCE GUI polish | Builds ISO only through Codex ISO Builder; validates with Linux tooling; marks speculative runtime claims as such |
| **Opencode / Z.ai Integrator** | Opencode CLI on Linux | Linux-side Colibri/dashboard experiments plus Pi/DeepSeek v4 provider-lane validation wiring | Cannot claim FreeBSD runtime proof; uses Sam-provided API keys only for provider validation | | **Opencode / Z.ai Integrator** | Opencode CLI on Linux | Linux-side Colibri/dashboard experiments plus Pi/DeepSeek v4 provider-lane validation wiring | Validates on Linux and refers FreeBSD runtime claims to the build host; uses Sam-provided API keys only for provider validation |
| **Operator (Sam)** | Human operator | Product, hardware, acceptance, release judgment | Human approval required for release/tagging decisions | | **Operator (Sam)** | Human operator | Product, hardware, acceptance, release judgment | Human approval required for release/tagging decisions |
## Agent / Codebase Check-In Matrix ## Agent / Codebase Check-In Matrix
@ -64,7 +64,8 @@ If it fails, format only the touched markdown files, then rerun the check:
npx --yes prettier@3 --write path/to/file.md npx --yes prettier@3 --write path/to/file.md
``` ```
Do not hand-align Markdown tables or reflow prose manually. `.prettierrc` uses Use Prettier for all Markdown formatting; rely on tool-owned formatting
rather than manual alignment. `.prettierrc` uses
`proseWrap: preserve` so existing prose line breaks stay intentional, while `proseWrap: preserve` so existing prose line breaks stay intentional, while
Prettier still catches table padding, list spacing, and emphasis drift. Prettier still catches table padding, list spacing, and emphasis drift.
@ -72,8 +73,8 @@ Prettier still catches table padding, list spacing, and emphasis drift.
`private/` is gitignored and may contain operator-private strategy notes or PRDs. `private/` is gitignored and may contain operator-private strategy notes or PRDs.
Agents on this host may read files there only when directly relevant to the Agents on this host may read files there only when directly relevant to the
assigned work. Do not commit, quote, summarize publicly, or copy private content assigned work. Keep private content in `private/`; share to Forgejo only with
to Forgejo unless the operator explicitly approves it. explicit operator approval.
If working on custom ISO / hardware-report monetization, check If working on custom ISO / hardware-report monetization, check
`private/PRD-CUSTOM-ISO.md` when present. Codex ISO Builder should focus first `private/PRD-CUSTOM-ISO.md` when present. Codex ISO Builder should focus first
@ -83,12 +84,12 @@ surface should expose for report collection and review.
### Linux Agent Constraints ### Linux Agent Constraints
Linux agents MUST NOT attempt to build the ISO (`./build.sh`, `./build-vps.sh`). Linux agents route all ISO builds to Codex ISO Builder on the FreeBSD
ISO builds require FreeBSD system tools (`mdconfig`, `mount_msdosfs`, `pkg`). host. ISO builds require FreeBSD system tools (`mdconfig`, `mount_msdosfs`,
Instead, guide Codex ISO Builder with exact commands to run on the FreeBSD `pkg`). Instead, guide Codex ISO Builder with exact commands to run on the
system. FreeBSD system.
Agents on any platform MUST NOT start a new ISO build unless explicitly assigned. Agents on any platform start ISO builds only when explicitly assigned.
Builds are long-running, mutate repo-local caches, and can leave mounted md(4) Builds are long-running, mutate repo-local caches, and can leave mounted md(4)
devices that require cleanup. devices that require cleanup.
@ -110,8 +111,9 @@ the ISO does **not** build Rust while the image is mounted.
the required binaries. Validation images can add the local fake-agent helper the required binaries. Validation images can add the local fake-agent helper
with `COLIBRI_STAGE_TEST_AGENT=YES`. with `COLIBRI_STAGE_TEST_AGENT=YES`.
**Invariant:** do not `cargo clean` `/home/clawdie/ai/colibri` until the ISO **Invariant:** preserve `/home/clawdie/ai/colibri/target/release` until the ISO
preflight/build has consumed `/home/clawdie/ai/colibri/target/release`. preflight/build has consumed it; run `cargo clean` only after the ISO build
completes successfully.
--- ---
@ -120,8 +122,9 @@ preflight/build has consumed `/home/clawdie/ai/colibri/target/release`.
The active branch target is the XFCE live operator USB. Authoritative state The active branch target is the XFCE live operator USB. Authoritative state
lives in `packages/` (what ships) and `PLAN-OPERATOR-USB-NEXT.md` (round-scope lives in `packages/` (what ships) and `PLAN-OPERATOR-USB-NEXT.md` (round-scope
decisions and any "for now" retention notes). Final graphical validation decisions and any "for now" retention notes). Final graphical validation
requires real hardware — do not treat bhyve, nested VMs, or static image requires real hardware — treat bhyve, nested VMs, and static image
inspection as final proof that SDDM/XFCE works. inspection as build gates only; real hardware is the final proof that
SDDM/XFCE works.
--- ---
@ -132,8 +135,8 @@ inspection as final proof that SDDM/XFCE works.
- On the FreeBSD build host, operator-facing commands may use `sudo`. - On the FreeBSD build host, operator-facing commands may use `sudo`.
- Inside the live USB, `sudo` is intentionally absent. - Inside the live USB, `sudo` is intentionally absent.
- Live privileged actions use FreeBSD `mac_do` via `mdo -u root <command>`. - Live privileged actions use FreeBSD `mac_do` via `mdo -u root <command>`.
- Agent runtime code must not shell out to `sudo` for privileged host changes. - Agent runtime code uses the hostd RPC layer for privileged host changes,
- Privileged Clawdie-AI host operations go through the hostd RPC layer. routing through the hostd RPC layer instead of shelling out to `sudo`.
--- ---
@ -148,11 +151,10 @@ PROJECT_TMP="$PROJECT_ROOT/tmp"
mkdir -p "$PROJECT_TMP" mkdir -p "$PROJECT_TMP"
``` ```
Use `$PROJECT_TMP/...` for generated checks, transient logs, extracted manifests, Create all scratch files under `$PROJECT_TMP` for generated checks, transient
image-inspection notes, helper-script test output, and other disposable files. logs, extracted manifests, image-inspection notes, helper-script test output,
Do not create new `/tmp/clawdie-*`, `/tmp/colibri-*`, or ad-hoc `/tmp/...` paths and other disposable files. Use host-global `/tmp` paths only when the operator
from agent work unless the operator explicitly asks for a host-global scratch explicitly asks for a scratch location outside the repo.
location.
Live-USB runtime code usually has no git checkout/project root. In that case, Live-USB runtime code usually has no git checkout/project root. In that case,
prefer an app-owned cache/state path such as `$XDG_CACHE_HOME/clawdie`, prefer an app-owned cache/state path such as `$XDG_CACHE_HOME/clawdie`,
@ -191,10 +193,10 @@ ISO builds use repo-local `tmp/` for large caches and output artifacts:
- `tmp/output` — generated `.img.xz` artifacts and checksums - `tmp/output` — generated `.img.xz` artifacts and checksums
- `tmp/packages` — fetched package archives - `tmp/packages` — fetched package archives
`tmp/cache/mnt` is an ISO-builder-specific mountpoint exception. Do not mount `tmp/cache/mnt` is an ISO-builder-specific mountpoint exception. Use `tmp/`
unrelated datasets, recovery filesystems, or scratch filesystems elsewhere under mounts only for ISO builder work (cache/mnt); mount unrelated datasets,
repo `tmp/`. If a build is interrupted, use the `iso-build-cleanup` skill before recovery filesystems, or scratch filesystems elsewhere. If a build is
retrying. interrupted, use the `iso-build-cleanup` skill before retrying.
--- ---
@ -209,8 +211,8 @@ Clawdie spans three repos. Changes often require coordinated updates.
| `Colibri` | Cross-platform Rust control plane core | `git@code.smilepowered.org:clawdie/colibri.git` | | `Colibri` | Cross-platform Rust control plane core | `git@code.smilepowered.org:clawdie/colibri.git` |
Primary remote: `code.smilepowered.org` (self-hosted Forgejo, SSH via local host Primary remote: `code.smilepowered.org` (self-hosted Forgejo, SSH via local host
config). Codeberg is the public mirror only; do not treat it as the source of config). Treat `code.smilepowered.org` as the source of truth for agent
truth for agent coordination or branch-state claims. coordination and branch-state claims; Codeberg is the public mirror only.
When changes span both repos, create a handoff doc in the secondary repo When changes span both repos, create a handoff doc in the secondary repo
listing what needs updating. See `Clawdie-AI/AGENTS.md` for full protocol. listing what needs updating. See `Clawdie-AI/AGENTS.md` for full protocol.

View file

@ -55,7 +55,8 @@ from the running USB with `mdo -u root tailscale up`.
### Colibri artifacts ### Colibri artifacts
The operator USB stages Colibri as the live control plane. It expects prebuilt The operator USB stages Colibri as the live control plane. It expects prebuilt
FreeBSD release binaries; it does not compile Rust while the image is mounted. FreeBSD release binaries; Rust compilation takes place before image mounting,
and only prebuilt binaries land on the mounted image.
Default adjacent-checkout flow: Default adjacent-checkout flow:
@ -119,8 +120,8 @@ Installed/deployed system
No current ISO build flag stages `service clawdie`. That name is reserved for No current ISO build flag stages `service clawdie`. That name is reserved for
installed/deployed systems until the real persistent host service is chosen. The installed/deployed systems until the real persistent host service is chosen. The
baseline live USB uses Colibri directly and must not ship the old mini-binary as baseline live USB ships Colibri directly and excludes the old mini-binary
if it were the final deployed service. intended for the final deployed service.
--- ---
@ -166,7 +167,8 @@ sudo dd if=tmp/output/clawdie-quindecim-0.10.0.img of=/dev/daX bs=1M status=prog
sync sync
``` ```
Use the whole USB device (`/dev/daX`), not a partition. See [FLASHING.md](FLASHING.md) Target the whole USB device (`/dev/daX`); flashing to a partition is unsafe and
unsupported. See [FLASHING.md](FLASHING.md)
for Linux commands, checksum verification, and stale-label cleanup. for Linux commands, checksum verification, and stale-label cleanup.
--- ---
@ -262,7 +264,7 @@ Current implementation:
**Distribution-safety note:** public keys are public, so baking one in is **Distribution-safety note:** public keys are public, so baking one in is
not a confidentiality issue — but anyone with the image file can SSH into a not a confidentiality issue — but anyone with the image file can SSH into a
live boot of it. For dev/test builds that's the right tradeoff. For public live boot of it. For dev/test builds that's the right tradeoff. For public
release images, do not pass `--ssh-key` at all; operators add a key release images, omit `--ssh-key` entirely; operators add a key
themselves after first boot or build their own image. The dedicated themselves after first boot or build their own image. The dedicated
`clawdie-live-usb` key avoids leaking personal keys into shareable images. `clawdie-live-usb` key avoids leaking personal keys into shareable images.
@ -302,9 +304,9 @@ The implementation contract:
**Scope discipline:** mDNS is **only** for LAN discovery of the live **Scope discipline:** mDNS is **only** for LAN discovery of the live
USB itself. Clawdie's internal service names continue to live under USB itself. Clawdie's internal service names continue to live under
`home.arpa` (`ai.home.arpa`, `cms.home.arpa`, `git.home.arpa`, `home.arpa` (`ai.home.arpa`, `cms.home.arpa`, `git.home.arpa`,
`<tenant>.home.arpa`). Do not switch internal services to `.local` `<tenant>.home.arpa`). Keep internal service names under `home.arpa`;
RFC 6762 reserves `.local` for mDNS, and mixing the two namespaces reserve `.local` exclusively for mDNS — RFC 6762 reserves `.local` for
breaks both. mDNS, and mixing the two namespaces breaks both.
**Network caveat:** some corporate networks, hotel Wi-Fi, and isolated **Network caveat:** some corporate networks, hotel Wi-Fi, and isolated
guest VLANs block multicast traffic. In those environments guest VLANs block multicast traffic. In those environments
@ -319,10 +321,10 @@ open, inbound limited to SSH, mDNS, ICMP, DHCP-client, and Tailscale's
UDP 41641. The actual access restriction on SSH is carried by `sshd` UDP 41641. The actual access restriction on SSH is carried by `sshd`
auth policy (pubkey only), not PF interface scoping. auth policy (pubkey only), not PF interface scoping.
**No logging stack on disk or in memory by default.** `pflog_enable` **PF logging stack is opt-in by default.** `pflog_enable`
and `pflogd_enable` are both left at their `NO` defaults. The ruleset and `pflogd_enable` remain at their `NO` defaults. The ruleset
has no `log` keywords, so there is nothing to capture anyway. When has no `log` keywords, so nothing is captured by default. When
debugging from a booted live USB, the operator brings the stack up by debugging from a booted live USB, the operator enables the stack by
hand: hand:
```sh ```sh
@ -471,8 +473,8 @@ path (fetched, not installed on live), but different long-term homes:
ffmpeg/libpulse/mesa-libs/boost surface would partially un-do the ffmpeg/libpulse/mesa-libs/boost surface would partially un-do the
lean-rootfs payoff we want during the early hardware-validation lean-rootfs payoff we want during the early hardware-validation
cycle. **Long-term home: back on the live USB** once dependency cycle. **Long-term home: back on the live USB** once dependency
surface is audited and operator workflow exists. Do not categorise surface is audited and operator workflow exists. Classify it as
it as desktop-spin cruft in a future audit. roadmap-essential in all future audits, not desktop-spin cruft.
**Intent:** keep this table as the authoritative "what we will deploy **Intent:** keep this table as the authoritative "what we will deploy
to disk" reference so the work is not lost between commits. The to disk" reference so the work is not lost between commits. The
@ -609,9 +611,8 @@ When OSA gets tight on disk, prefer deleting **repo-local build artifacts**
(`tmp/packages`, `tmp/cache/work.img`, cached FreeBSD memstick images, old output (`tmp/packages`, `tmp/cache/work.img`, cached FreeBSD memstick images, old output
artifacts) over pruning host packages. artifacts) over pruning host packages.
Do **not** treat the remaining host-side graphics/media stack as disposable "old Preserve the remaining host-side graphics/media stack; it supports current
X11". On OSA it is not a full desktop environment anymore; it is a shared runtime operator tooling and validation lanes, not an old X11 desktop:
closure that supports current operator tooling and validation lanes:
- `ffmpeg` + `py311-pillow` back the Hermes/image-render and screenshot path. - `ffmpeg` + `py311-pillow` back the Hermes/image-render and screenshot path.
- `gtk3`, `cairo`, `pango`, `fontconfig`, `libX11`, `mesa-*`, `wayland`, - `gtk3`, `cairo`, `pango`, `fontconfig`, `libX11`, `mesa-*`, `wayland`,

View file

@ -16,9 +16,9 @@ Live boot has cleared the "does it come up at all on real hardware" gate.
| NVIDIA | Pending | Laptop candidate arriving; not validated yet | | NVIDIA | Pending | Laptop candidate arriving; not validated yet |
**Load-bearing decision: keep SDDM as the live display manager.** **Load-bearing decision: keep SDDM as the live display manager.**
SDDM is the validated live display-manager path for Intel and AMD GUI boot. Do SDDM is the validated live display-manager path for Intel and AMD GUI boot.
not replace it without equivalent real-hardware proof. SDDM is now part of the Retain SDDM until equivalent real-hardware proof validates any replacement.
operator-USB contract. SDDM is now part of the operator-USB contract.
Other now-stable pieces from recent commits worth not regressing: Other now-stable pieces from recent commits worth not regressing:
@ -97,8 +97,8 @@ hook so regressions are caught on the next build.
- `operator-workflow` (firefox, codex, pi tools, tmux, ...) - `operator-workflow` (firefox, codex, pi tools, tmux, ...)
- `diagnostic` (btop, hw-probe, dmidecode, ...) - `diagnostic` (btop, hw-probe, dmidecode, ...)
- `candidate-to-defer` (used rarely or replaceable by a base tool) - `candidate-to-defer` (used rarely or replaceable by a base tool)
Write the result as comments next to each line; do NOT remove anything Write the result as comments next to each line; categorize first and
yet — categorization first, removal in a follow-up. defer removal to a follow-up round after the data is in.
2. **Size accounting.** For each line, add the pkg + flat size as a 2. **Size accounting.** For each line, add the pkg + flat size as a
trailing comment (`# 12M / 38M`). Use `pkg info -s <name>` on the trailing comment (`# 12M / 38M`). Use `pkg info -s <name>` on the
FreeBSD build host. This makes future "is X cheap to add" calls honest FreeBSD build host. This makes future "is X cheap to add" calls honest
@ -108,7 +108,8 @@ hook so regressions are caught on the next build.
- SDDM is enabled in `rc.conf`. - SDDM is enabled in `rc.conf`.
- `clawdie-live-gpu` rc.d service is enabled. - `clawdie-live-gpu` rc.d service is enabled.
- Required kmods present in `/boot/modules` for Intel/AMD; NVIDIA - Required kmods present in `/boot/modules` for Intel/AMD; NVIDIA
kmods are _present in the offline repo but NOT loaded by default_. kmods are \textit{available in the offline repo} and remain unloaded
unless explicitly configured.
- Live operator pkg-list contents are actually installed in the image. - Live operator pkg-list contents are actually installed in the image.
- Panel module gates (`xfce4-mixer`, `clipman`) honor their runtime - Panel module gates (`xfce4-mixer`, `clipman`) honor their runtime
conditions (audio backend up, X session up). conditions (audio backend up, X session up).
@ -148,7 +149,7 @@ This round does **not** ship a full installer. It sets up the plumbing.
built image in bhyve, runs the disk-install path with built image in bhyve, runs the disk-install path with
`CLAWDIE_PROFILE=xfce`, and asserts `blender` (the roadmap-essential `CLAWDIE_PROFILE=xfce`, and asserts `blender` (the roadmap-essential
member of disk-install-extras) ends up installed on the target disk. member of disk-install-extras) ends up installed on the target disk.
Bhyve is fine for plumbing; per `AGENTS.md` it's NOT proof for Bhyve is suitable for plumbing verification; use real hardware for
graphical validation — leave that for Track A/E on real hardware. graphical validation — leave that for Track A/E on real hardware.
**Definition of done:** **Definition of done:**
@ -241,8 +242,8 @@ contract between agents.
them. them.
- FreeBSD safety remains local: builds, mounts, flashes, watchdog checks, - FreeBSD safety remains local: builds, mounts, flashes, watchdog checks,
and privileged host actions are not delegated to a remote chat agent. and privileged host actions are not delegated to a remote chat agent.
- Do not add a separate dashboard/pane-fabric dependency to the live USB for - Rely on Colibri as the sole control-plane surface for this track; add no
this track; Colibri is the control-plane surface. separate dashboard/pane-fabric dependency to the live USB.
- Cross-host coordination starts with small JSON manifests and summaries; - Cross-host coordination starts with small JSON manifests and summaries;
raw logs, screenshots, and pcaps move only on demand. raw logs, screenshots, and pcaps move only on demand.
- Skills should be additive and runnable without an interactive dashboard. The - Skills should be additive and runnable without an interactive dashboard. The
@ -631,9 +632,9 @@ folder so `$HOME` stays uncluttered:
**Implementation notes:** **Implementation notes:**
- Seed clean checkouts or source snapshots only; do not copy API keys, - Seed clean checkouts or source snapshots only; include only code and exclude
`.env` files, SSH private keys, build caches, package caches, `tmp/`, or API keys, `.env` files, SSH private keys, build caches, package caches,
other private host state. `tmp/`, and other private host state.
- Prefer the exact branch/commit used by the image build, recorded in - Prefer the exact branch/commit used by the image build, recorded in
`/usr/local/share/clawdie-iso/build-manifest.json` and visible from `/usr/local/share/clawdie-iso/build-manifest.json` and visible from
`hw-report`. `hw-report`.
@ -644,8 +645,9 @@ folder so `$HOME` stays uncluttered:
- If full `.git` history is too large, use shallow clones or archive snapshots - If full `.git` history is too large, use shallow clones or archive snapshots
plus a small manifest that records remote URL, branch, commit, and modified plus a small manifest that records remote URL, branch, commit, and modified
state. state.
- This is a live-debug aid, not a build-host replacement: Linux agents still do - This is a live-debug aid, not a build-host replacement: Linux agents direct
not build the ISO, and real hardware proof remains operator/Codex-owned. build commands to Codex ISO Builder on the FreeBSD host, and real hardware
proof remains operator/Codex-owned.
**Why it matters:** when Colibri, XFCE, rc.d, input, or package-list bugs only **Why it matters:** when Colibri, XFCE, rc.d, input, or package-list bugs only
show up on real hardware, a local Pi session can read `/var/log`, `hw-report`, show up on real hardware, a local Pi session can read `/var/log`, `hw-report`,
@ -743,8 +745,8 @@ I accept the **Codex ISO developer** role for this round:
- docs/static checks - docs/static checks
- commits and pushes - commits and pushes
I do not treat GUI success as proven without Pi Builder / hardware output, and I treat GUI success as proven only with Pi Builder / hardware output, and
I do not start ISO builds or flash media unless explicitly assigned. I start ISO builds or flash media only when explicitly assigned.
--- ---
@ -753,7 +755,7 @@ I do not start ISO builds or flash media unless explicitly assigned.
- VSCode or Cursor on the live image. Both deferred per project memory. - VSCode or Cursor on the live image. Both deferred per project memory.
VSCode is a candidate for disk-install extras _later_, after Track B VSCode is a candidate for disk-install extras _later_, after Track B
gives us a real size + dep budget. gives us a real size + dep budget.
- Replacing SDDM. Load-bearing; do not touch. - Replacing SDDM. Load-bearing; SDDM stays as-is for this round.
- KDE profile content. Track C only scaffolds the selector; KDE pkg list - KDE profile content. Track C only scaffolds the selector; KDE pkg list
comes in a later round. comes in a later round.
- Linuxulator integration of any kind. - Linuxulator integration of any kind.

View file

@ -9,8 +9,9 @@ Use this skill for the normal FreeBSD host build path from the checked-out
`clawdie-iso` repo. This is the current repo-local operator workflow, not the `clawdie-iso` repo. This is the current repo-local operator workflow, not the
older “clone elsewhere and publish to nginx” flow. older “clone elsewhere and publish to nginx” flow.
Only run an ISO build when the operator explicitly assigns it. If the task is Run ISO builds only when the operator explicitly assigns one. For planning,
planning, docs, package-list edits, or static inspection only, do not build. docs, package-list edits, or static inspection tasks, use static checks
instead of building.
## Current operator-USB expectations ## Current operator-USB expectations
@ -18,7 +19,7 @@ planning, docs, package-list edits, or static inspection only, do not build.
- Live browser: Firefox, not Chromium - Live browser: Firefox, not Chromium
- SDDM interactive login as `clawdie`; no live autologin - SDDM interactive login as `clawdie`; no live autologin
- `CLAWDIESEED` exists as FAT32 slice 3 for post-flash, pre-boot seed import - `CLAWDIESEED` exists as FAT32 slice 3 for post-flash, pre-boot seed import
- Live CLI policy: ship `codex`, `pi`, `gemini`; do not ship `claude` - Live CLI policy: ship `codex`, `pi`, `gemini`; omit `claude` from the live image
- Operator editors: `mousepad`, `geany`, and `micro` - Operator editors: `mousepad`, `geany`, and `micro`
- Hardware/custom-ISO report collector: `hw-report` - Hardware/custom-ISO report collector: `hw-report`
- Vulkan diagnostic tool: `vulkaninfo` from `vulkan-tools`; Zed remains deferred - Vulkan diagnostic tool: `vulkaninfo` from `vulkan-tools`; Zed remains deferred
@ -53,7 +54,8 @@ conventions.
- Prefer `tmux` for long builds - Prefer `tmux` for long builds
- Use an elevated shell in the tmux pane so the build command itself runs - Use an elevated shell in the tmux pane so the build command itself runs
without a `sudo` prefix without a `sudo` prefix
- Run one command at a time; do not hide failures behind chained shell commands - Run each command individually so failures are visible and attributable;
chain commands only when a prior success is required and verified
- Fetch before reporting remote state or starting a build - Fetch before reporting remote state or starting a build
- If disk is tight, the image build was interrupted, or `tmp/cache/mnt` is - If disk is tight, the image build was interrupted, or `tmp/cache/mnt` is
still mounted, use `iso-build-cleanup` first still mounted, use `iso-build-cleanup` first
@ -81,7 +83,8 @@ tmux capture-pane -pt clawdie:3.1 -S -30
ps auxww | egrep '[b]uild.sh|[s]cript -q tmp/operator-usb-.*-build.log' ps auxww | egrep '[b]uild.sh|[s]cript -q tmp/operator-usb-.*-build.log'
``` ```
If a build is still active, do not clobber it. Stop or wait deliberately. If a build is still active, preserve it — stop it deliberately or wait for
completion before reusing the pane.
### 3. Start clean after a failed attempt ### 3. Start clean after a failed attempt
@ -133,11 +136,11 @@ switch to `iso-build-cleanup`.
The operator USB uses Colibri as its lightweight live control plane. The ISO The operator USB uses Colibri as its lightweight live control plane. The ISO
build stages FreeBSD-native Colibri artifacts from `/home/clawdie/ai/colibri`; build stages FreeBSD-native Colibri artifacts from `/home/clawdie/ai/colibri`;
it does **not** build Rust while the image is mounted. Validation builds should it does **not** build Rust while the image is mounted. Validation builds should
ship `colibri_daemon_enable=YES`; the rc.d service starts after LOGIN and must ship `colibri_daemon_enable=YES`; the rc.d service starts after LOGIN and
not block SDDM/XFCE startup. completes before SDDM/XFCE are user-facing, avoiding any startup delay.
Build Colibri on the FreeBSD/OSA host, not on Debian/Linux. Do not cross-ship Build Colibri on the FreeBSD/OSA host first; fall back to cross-shipping from
from debby unless the native OSA build fails. debby only if the native OSA build fails.
Run this before the ISO build: Run this before the ISO build:
@ -185,10 +188,10 @@ sh -n build.sh
sh -n scripts/stage-colibri-iso.sh sh -n scripts/stage-colibri-iso.sh
``` ```
Important cleanup timing: **do not run `cargo clean` immediately after the Important cleanup timing: **preserve Colibri artifacts until the ISO build
Colibri build.** The ISO preflight/build consumes `/home/clawdie/ai/colibri/target/release`. consumes them.** The ISO preflight/build reads from
Only clean Colibri after the ISO build or after deciding those artifacts are no `/home/clawdie/ai/colibri/target/release`. Clean Colibri only after the ISO
longer needed: build or after deciding those artifacts are no longer needed:
```sh ```sh
cd /home/clawdie/ai/colibri cd /home/clawdie/ai/colibri
@ -206,16 +209,17 @@ should be verified with the required binaries.
`service clawdie` is reserved for installed disk/server targets, but the current `service clawdie` is reserved for installed disk/server targets, but the current
operator USB does not stage a `clawdie` rc.d service or mini-binary. The live USB operator USB does not stage a `clawdie` rc.d service or mini-binary. The live USB
uses `colibri_daemon` directly. Add deployed-system service packaging only after uses `colibri_daemon` directly. Add deployed-system service packaging only after
the real persistent host service implementation is chosen; do not repurpose the the real persistent host service implementation is chosen; keep the old
old Colibri-side mini-binary as the final service by default. Colibri-side mini-binary for reference only until then.
### Next build: carry the XFCE operator-USB fixes ### Next build: carry the XFCE operator-USB fixes
The next operator-USB image must retain the proven XFCE/live-GUI fixes The next operator-USB image must retain the proven XFCE/live-GUI fixes
(`PLAN-OPERATOR-USB-NEXT.md`, `doc/AMD-ASUS-XFCE-LIVE-USB-FINDINGS.md`): (`PLAN-OPERATOR-USB-NEXT.md`, `doc/AMD-ASUS-XFCE-LIVE-USB-FINDINGS.md`):
- **SDDM remains the supported live display manager** — load-bearing; do not - **SDDM remains the supported live display manager** — load-bearing; retain
replace without equivalent real-hardware proof for Intel + AMD live GUI boot. SDDM until equivalent real-hardware proof validates any replacement for
Intel + AMD live GUI boot.
- **`clawdie-live-gpu`** pre-SDDM rc.d KMS pick (conservative; NVIDIA/AMD safe). - **`clawdie-live-gpu`** pre-SDDM rc.d KMS pick (conservative; NVIDIA/AMD safe).
- **Hardened USB-root power policy** (`b9290ab`): `powerdxx`, C3 C-state default, - **Hardened USB-root power policy** (`b9290ab`): `powerdxx`, C3 C-state default,
`hw.usb.no_suspend=1`, boot-time `power_profile`. `hw.usb.no_suspend=1`, boot-time `power_profile`.