Commit graph

306 commits

Author SHA1 Message Date
ec2a73d267 Merge pull request 'release/iso-0.11.0' (#80) from release/iso-0.11.0 into main
Reviewed-on: #80
2026-06-20 22:26:22 +02:00
Sam & Claude
c5fdb57b78 docs(poudriere): colibri port license is MIT (was AGPLv3 reference)
Match the colibri relicense (AGPL-3.0 -> MIT, same as layered-soul) in the
build-server doc's port key-facts.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 22:06:18 +02:00
Sam & Claude
d8927de671 release: bump Clawdie version to 0.11.0 (unify clawdie-iso + colibri)
- build.cfg: ISO_VERSION 0.10.0 -> 0.11.0; reword the version note — clawdie-iso
  and colibri now share one unified Clawdie release version (zot/clawdie-ai stay
  provenance in build-manifest.json).
- CHANGELOG: [0.11.0] entry (date in EU format DD.mon.YYYY per AGENTS rule)
  covering the versioning unify, operator-session hardening, poudriere
  build-server scripts, and the duplicate-port retirement.

colibri Cargo.toml + port DISTVERSION bump to 0.11.0 lands in the colibri repo
(separate branch). Tags held until both bumps merge.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 21:52:52 +02:00
8fa6e1f3ca Merge pull request 'cleanup: retire duplicate Colibri port; colibri repo owns it' (#79) from cleanup/colibri-owns-the-port into main
Reviewed-on: #79
2026-06-20 21:39:20 +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
2eb2ae06b4 Merge pull request 'cleanup(tmp): remove Clawdie-owned host tmp paths (Sam & Pi)' (#78) from cleanup/prebuild-tmp-and-stale-prs into main
Reviewed-on: #78
2026-06-20 21:15:37 +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
42930b2b52 Merge pull request 'fix(ports): use MASTER_SITES for Forgejo, not GH_ACCOUNT' (#77) from fix/colibri-port-forgejo into main 2026-06-20 17:36:09 +02:00
dd0fbb1fed fix(ports): use MASTER_SITES for Forgejo, not GH_ACCOUNT
- Replace GH_ACCOUNT+GH_PROJECT with MASTER_SITES pointing at
  code.smilepowered.org/clawdie/colibri/archive/
- Fix distinfo to match Forgejo archive naming (v0.0.1.tar.gz)
2026-06-20 17:35:53 +02:00
02897574e2 Merge pull request 'feat(ports): add sysutils/colibri FreeBSD port skeleton (v0.0.1)' (#76) from feat/colibri-freebsd-port into main 2026-06-20 17:35:19 +02:00
92b3ebacdd feat(ports): add sysutils/colibri FreeBSD port skeleton (v0.0.1)
- Makefile: USES=cargo, installs daemon + client + MCP + probe + inventory
- distinfo: SHA256 of v0.0.1 tarball from Forgejo
- files/: colibri_daemon.in + colibri_bridge.in rc.d scripts
- Port needs: colibri repo tagged v0.0.1 (done), CARGO_CRATES generation
  on FreeBSD (make cargo-crates), and a FreeBSD pkg build test
2026-06-20 17:34:47 +02:00
352a1d6da9 Merge pull request 'combined/iso-poudriere-livepower' (#75) from combined/iso-poudriere-livepower into main
Reviewed-on: #75
2026-06-20 17:24:36 +02:00
Sam & Claude
5c5ed57abe docs(live-power): document C3 wake-safety invariant; tidy rcorder block
clawdie_live_power is a one-shot boot script that applies the power_profile
C-state policy once (FreeBSD's power_profile is nostart and otherwise only
runs on a devd AC-line transition). Comment-only clarification — no behavior
change:

- Move the PROVIDE/REQUIRE/BEFORE/KEYWORD rcorder block to the top (convention;
  rcorder scans the whole file, so behavior is identical).
- Document scope explicitly: this selects a CPU C-state/freq profile ONLY —
  never suspend/sleep/blank/DPMS (screen-blank is the separate no-blank stack).
- Record the wake-safety invariant: both AC (0x01) and battery (0x00) branches
  are safe because rc.conf pins performance_cx_lowest AND economy_cx_lowest to
  C3, so neither can select a deeper C-state that breaks USB resume. Guard-rail
  for future editors: do not deepen on the live USB.

sh -n clean; rcorder tags intact.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 17:22:28 +02:00
Sam & Claude
95c0cf879f docs(poudriere): point port section at canonical colibri port; fix MIT→AGPLv3
The inline Makefile example claimed LICENSE=MIT (wrong — colibri is
AGPL-3.0-only) and duplicated what now lives canonically in
colibri/packaging/freebsd/port/. Replace the snippet with a pointer + the
corrected key facts (license, binaries shipped, generated files).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 17:22:28 +02:00
Sam & Claude
8437b6e237 docs(poudriere): retarget plan to mother-build + pkg.clawdie.si; mark done work
v1.0.0 → v2.0.0. Fix stale references and cross resolved items from pending:

- Target: ML350p Gen8 (retired/boot-looping) → mother-build FreeBSD VPS.
- Repo URL: pkg.clawdie.home.arpa → pkg.clawdie.si (signed). Client config now
  uses signature_type pubkey + ships the public key; points at the
  clawdie-repo.conf.in template.
- Phase 1: drop iLO/IPMI/10.0.0.2 boot path (provider-specific now).
- Phase 2/4: marked SCRIPTED — implemented by scripts/poudriere/.
- Phase 6 (bhyve): marked DONE — the ISO-boot test gate already exists
  (scripts/bhyve-test.sh + run-bhyve-test.sh + bhyve-pf-allow.sh).
- Jail/tree example names aligned to the scripts (clawdie-amd64 / clawdie).
- Timeline rebuilt with real status; ML350p sizing kept only as labeled
  reference numbers. .home.arpa LIVE-USB hostname refs left intact (not stale).

Validation: prettier@3 --check '**/*.md' clean.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 17:22:28 +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
05842a533d Merge pull request 'sync(visuals): hardened panel indicator + wallpaper on join from layered-soul' (#74) from sync/iso-visuals-hardening into main
Reviewed-on: #74
2026-06-20 12:17:33 +02:00
45cc57365f sync(visuals): hardened panel indicator + wallpaper on join from layered-soul 2026-06-20 12:16:11 +02:00
9989d5dd31 Merge pull request 'fix(desktop): match Exec path to installed binary (drop .sh suffix)' (#73) from fix/desktop-join-hive-exec into main 2026-06-20 11:41:24 +02:00
a2a0c15c3d fix(desktop): match Exec path to installed binary (drop .sh suffix)
Build installs /usr/local/bin/clawdie-join-hive (no .sh).
Desktop Exec had the .sh suffix — launcher would fail silently.
One-character fix: drop .sh from Exec line.
2026-06-20 11:40:55 +02:00
81a4d7eaa7 Merge pull request 'feat(visuals): panel indicator + identity wallpaper + join-hive launcher' (#72) from feat/iso-visuals into main
Reviewed-on: #72
2026-06-20 11:00:18 +02:00
1f7e94fa4c feat(visuals): panel indicator + identity wallpaper + join-hive launcher 2026-06-20 10:59:07 +02:00
3c4d02a904 Merge pull request 'fix(xfce): replace noisy autostart with start-here note (Sam & Codex)' (#71) from fix/start-here-autostart into main
Reviewed-on: #71
2026-06-20 08:37:28 +02:00
35e5c1d954 fix(xfce): replace noisy autostart with start-here note (Sam & Codex) 2026-06-20 08:24:18 +02:00
30257ad383 Merge pull request 'fix(vault): bake Vaultwarden endpoint defaults into ISO (Sam & Pi)' (#69) from fix/vault-endpoint-defaults into main
Reviewed-on: #69
2026-06-20 07:28:39 +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
14bd7f5255 Merge pull request 'fix(vault-fetch): tolerate 'already logged in' at bw config server' (#68) from fix/vault-fetch-bw-config-when-logged-in into main
Reviewed-on: #68
2026-06-20 07:10:49 +02:00
Sam & Claude
81114491f5 fix(vault-fetch): tolerate 'already logged in' at bw config server
bw config server refuses with 'Logout required before server config update'
when the CLI is already authenticated. The helper treated that as fatal
(exit 1), which broke every repeat run on an already-logged-in host — exactly
the 'refresh .env from vault' case the helper exists for.

The bw login block already tolerates 'already logged in'; mirror that for
bw config: capture stderr/stdout and tolerate 'logout required' /
'already configured' / 'already set', failing only on a real error.

Verified on domedog: fixed helper runs cleanly from the logged-in state
(previously exited 1 at the config step).

Checks: sh -n; git diff --check; ./scripts/check-format.sh (prettier clean).

Co-Authored-By: Hermes & Sam <hello@clawdie.si>
2026-06-20 07:06:44 +02:00
761c9cf9bf Merge pull request 'Vaultwarden secrets + live seed import (5 review concerns addressed)' (#67) from feat/vault-seed-fetch-fixed into main 2026-06-19 18:36:32 +02:00
Sam & Claude
df783f2a59 fix(vault): wire seed bootstrap → vault-fetch path + harden agent dir validation
Address the 5 review concerns on the secrets-out-of-the-box feature:

1. Seed↔fetch path alignment: _seed_split_env routes BW_* creds out of .env
   into ~/.config/vault-bootstrap.env (SEED_VAULT_BOOTSTRAP_REL), the path
   clawdie-vault-fetch actually reads — so 'seed bootstrap → fetch out of
   the box' now lines up without an explicit --bootstrap arg.
2. Drop unused COLLECTION_ID from clawdie-vault-fetch. Items are fetched by
   name via 'bw get password', which is fail-closed on ambiguity; document
   that item names must be unique in the visible vault.
3. Agent dir validation: _seed_agent_name_ok rejects leading-dot dirs
   (.Spotlight-V100, .fseventsd) and traversal; _seed_agent_has_payload
   requires a recognized payload so an empty/stray dir can't become active.
4. No phantom homes: extra agent dirs stage under /var/db/clawdie/seed/<agent>
   only — _seed_stage_agent never writes a home or SSH keys.
5. Bootstrap file mode enforcement: clawdie-vault-fetch now stat-checks the
   bootstrap file and refuses group/world-readable unless
   VAULT_ALLOW_INSECURE_BOOTSTRAP is set.

Also renames _seed_import_env → _seed_merge_env + _seed_split_env and adds
_seed_key_ok to guard env var names.

Checks: sh -n on vault-fetch/live-seed/build.sh; git diff --check;
./scripts/check-format.sh (prettier clean); 5 concerns verified present.

Co-Authored-By: Hermes & Sam <hello@clawdie.si>
2026-06-19 18:24:55 +02:00
Sam & Claude
1af0e62942 Wire encrypted secrets: Vaultwarden fetch + per-agent seed import
Two parallel, additive paths so a host gets its secrets out of the box;
the manual setup wizard stays the floor (no config = no-op).

clawdie-vault-fetch (new): language-neutral bw bridge. Reads a 0600
~/.config/vault-bootstrap.env, pulls keys from the agent-secrets
collection (item name = env var name, value in password field, so no jq),
prints KEY=VALUE or --write-env upserts 0600. Exit codes distinguish
skip (3, no bootstrap) / broken (1) / no bw (4). Pinned
@bitwarden/cli@2026.5.0 for offline bundling; staged in
configure_live_operator_session.

clawdie-live-seed: extend the CLAWDIESEED FAT32 importer from the
authorized_keys allowlist to a per-agent directory convention —
/<agent>/ with env (merged 0600), harness.toml (pi|zot|local), soul/
(staged), ssh/authorized_keys. Live USB single-agent (first dir = active);
extra dirs staged + flagged for deployed multi-agent. Optional
consume-and-shred. Import core is unit-testable via CLAWDIE_SEED_TEST.

README rewritten to document the per-agent contract and the operator
decision to allow plaintext secrets on the seed (seeded sticks are
secret-bearing media; 0600 landing + shred mitigations).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 17:27:01 +02:00
c905e7a31c Merge pull request 'build(iso): upgrade FreeBSD Python 3.11 -> 3.12' (#66) from upgrade-to-python-3-12 into main 2026-06-17 16:17:05 +02:00
79ea3b4590 build(iso): drop py311-only extras from Python 3.12 lane 2026-06-17 14:56:38 +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
b4a1fb9aba Merge pull request 'docs(iso): clean builder handoff terminology (Sam & Codex)' (#64) from docs/clean-builder-handoff-terminology into main
Reviewed-on: #64
2026-06-15 18:52:15 +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
2bddf7d8cc Merge pull request 'docs(iso): build zot with release version (Sam & Codex)' (#63) from fix/zot-release-version-build into main
Reviewed-on: #63
2026-06-15 18:34:26 +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
8a06c0d730 docs: 0.10.0 release build runbook (#62) 2026-06-15 18:16:47 +02:00
9a12702b4f fix(iso): recover dropped manifest-porcelain + rc.conf polish (#61) 2026-06-15 18:07:18 +02:00
f502249378 feat(iso): colibri-live-rebuild helper + image-size guard; bhyve on-demand (#60) 2026-06-15 18:04:32 +02:00
1569a041d6 Merge pull request 'feat/release-gate-whole-stack' (#59) from feat/release-gate-whole-stack into main
Reviewed-on: #59
2026-06-15 17:10:41 +02:00
eaf6a1996b Merge pull request 'feat(iso): product version 0.10.0 + colibri provenance (milestone cut)' (#58) from versioning-product-0.10.0 into main
Reviewed-on: #58
2026-06-15 17:09:49 +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
Sam & Claude
96fc1d3879 feat(build): enforce clean repos on release builds — gate now covers iso/colibri/zot 2026-06-15 16:47:38 +02:00
Sam & Claude
67b6477119 feat(iso): give the image its own product version (0.10.0) + colibri provenance (Sam & Claude)
Decouple the ISO identity from zot and cut the first numbered milestone.

Versioning schema (decided 2026-06-15):
- ISO_VERSION is now an explicit product version (build.cfg: 0.10.0); the
  "auto"/zot-tracking path is removed and a build with no version fails fast.
  The image no longer borrows zot's number — component versions are provenance.
- build-manifest.json: "iso_version_tracks":"zot" -> "version_scheme":"product",
  and add colibri_commit/colibri_dirty (the image stages adjacent colibri
  binaries; record which commit produced them — the main reproducibility gap).

Docs/version consistency (from docs to flashing/testing/skill):
- CHANGELOG: new [0.10.0] "Operator Image" milestone (stable XFCE + colibri
  service fixes + self-rebuild lane); reword the version model and repo table.
- README/BUILD/FLASHING/TESTING/iso-publish: artifact examples 0.2.29 -> 0.10.0;
  version-scheme prose updated to product-version, not zot-tracking.

Stacked on the live-rebuild branch (PR #56); merge after it.

Checks: sh -n build.sh OK; prettier clean on all changed docs.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 10:08:30 +02:00
4963d2d7b3 Merge pull request 'feat(iso): ship git-backed AI source checkouts (Sam & Codex)' (#57) from feat/source-checkouts-and-version-cleanup into main
Reviewed-on: #57
2026-06-15 09:25:16 +02:00
24fdb4fb1f Merge pull request 'feat(iso): live-rebuild lane covers zot + version-model cleanup' (#56) from live-rebuild-zot-and-version-cleanup into main
Reviewed-on: #56
2026-06-15 09:24:49 +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