4 Status
Chad Russell edited this page 2026-10-15 11:56:35 -04:00

Status

Phase 0 (spike), 1 (runtime), 2 (composition + nvim decomposed: rg/fd composed not vendored), 3 (binary cache: pull + push, verified against isolated MinIO with cross-package blob sharing) — DONE. Bash retired.

Distribution — DONE: multi-cache pull, install (URL/nickname/bare + default-entrypoint fetch), entrypoint layering (deep_merge(default ⊕ override)), config cat/edit, push --entrypoint.

Source/cache unification — DONE: source (local + git, form-inferred) replaces the old remote --kind git + env-var + symlink escape hatches; cache (HTTPS/S3) replaces remote --kind cache. build resolves Containerfiles + default entrypoints from registered sources. Verified end-to-end (source add → config cat → build → run, single + multi-package compose; install forms + multi-cache fallback unchanged). The cn link-entrypoints recipe is deleted (replaced by a one-time bubblebox source add personal <cn>/…/bubblebox).

Devshells — DONE (Phase 4 v1): composable, stackable dev environments via bubblebox shell — reusable base shells + per-project bubblebox.toml overlays, base inheritance with append-merge, an opt-in constrained init hook, and the bubblebox-enter-shell helper. See Devshells.

Home management — DONE (Phase B/C): declarative [[files]]/[[units]] in profile.toml; apply hashes file contents into the store and symlinks $HOME/<dst> → the blob (units land in ~/.config/systemd/user/ + optional systemctl --user enable --now). Replaces the old cjust link/cjust units. Rollback restores a previous file set (generations switch). See Home-Management-Plan (wiki).

Profile-in-place (v0.3.0) — DONE: --profile / BUBBLEBOX_PROFILE; a symlinked default profile resolves next to its target, and the lock is mirrored beside an out-of-config profile. The thinkpad is a pure consumer: it runs the pinned release engine (cjust bubblebox-install), applies the profile in place from cn, and pulls only from the signed CI-published cache. See GC-and-Generations §5 Phase 2.

Flatpak provider (v0.4.0) — [flatpak]: declarative per-user (default) or system flatpak apps + remotes; ownership/extras/prune, heals manual uninstalls, generations switch re-converges the declared set, plan --json gains a flatpak section. See Decisions #14.

Deferred (low priority): config export (fork a baked config — needs in-image config-path decision); GC / generations / rollback / lockfiles / upgrade/remove — mostly landed (see GC-and-Generations; Phase 1 digest-addressed descriptors, Phase 2 declarative apply/generations + profile.toml/profile.lock, Phase 3 gc, list/info introspection, and the plan dry-run (--json for machines) implemented; only the install/remove/upgrade sugar over profile.toml remains); devshell multi-base (transient pull-on-entry + per-project bubblebox.lock landed — see Devshells §7); authenticated pull; per-blob content verify; ed25519 descriptor signing; multi-arch (x86_64 only).

Git

Remote: ssh://git@git.crussell.io:2222/chad/bubblebox.git (origin on both thinkpad + bee since 2026-09-09; this instance is the single source of truth — the bee/thinkpad divergence was reconciled via a -s ours merge f4dda2a that keeps thinkpad's tree and records bee's subsumed Phase B/C commits in ancestry). Commit messages follow <area>: <imperative summary> — see git log --oneline. bubblebox and cn are separate repos; a change that spans both (e.g. a new entrypoint + the tool that consumes it) lands as one commit per repo.

Commit policy (maintainer preference, 2026-08-26): commit early and often. Agents should save their work in small, well-scoped commits as they go instead of banking a large uncommitted diff, and should not ask before committing — committing is always safe here. The single hard exception: never trigger automatic rebuilds/deploys of nix configs against live machines (the cn repo's deploy surface). Committing to bubblebox/bubblebox-pkgs never does that; if a change touches deployment automation, leave the deploy itself to the maintainer.