jason.woltje
db330c12c7
feat(release): self-determination - ensure at launch, drift warnings, M20 packages/* decision ( #38 )
...
- release.sh ensure: aligned no-op; drift -> package-if-needed + health-gated
activate (M3 gate-then-flip, automated)
- ensure_release_aligned in common.sh: invoked by hello/verify/agent;
MOSAIC_ENSURE_SKIP guards recursion; run-task warns on drift without
auto-aligning (workers/suites never trigger builds or model gates)
- ROADMAP: M20 decision recorded - v2 adopts packages/* monorepo at usurpation
- BUILD-LOG Phase 20 + tool-race process note
Live-verified: post-reset pointer loss auto-restored via health-gated
ensure; drift warning fires on desired-version bump; idempotent no-op on
aligned state.
Closes #38
2026-09-03 14:42:09 -05:00
jason.woltje
8eb81ebec1
feat(onboard): user onboarding - no default USER.md, guided creation ( #37 )
...
- bootstrap no longer creates user/USER.md (owner direction)
- scripts/onboard.sh: name REQUIRED (interactive loop or --name),
optional fields prompted (profession, marital, age, gender, education,
location, timezone, skillset, interests, hobbies, pets); flag-driven
non-interactive mode for automation
- templates/USER.md: canon skeleton, placeholder rendering, unfilled
optional = (not provided)
- agent.sh: auto-runs onboarding when profile missing (TTY gate);
headless run-task warns and continues without user context
- user profile dispatched to all launches (M14 layer)
Closes #37 (onboarding requirements from owner layout review)
2026-09-03 12:30:42 -05:00
jason.woltje
9bd4f1c405
feat(agents): agent seats - per-agent SOUL, role, definitions dir ( #36 )
...
- agents/<name>/ holds agent.json (strictly validated: version, name,
role?, capabilities?, workspace?, session?) + SOUL.md (persona prose)
- agent.sh: definition loading (quote-safe node defaults file), runtime
SOUL copy to dataRoot/agents/<name>/, MOSAIC_AGENT_SOUL_FILE ->
loader fills the SOUL slot from the seat's persona (contract SOUL =
default persona; governance never overridden)
- seat.json written once at instantiation (seatVersion, name, role, at)
- identity section gains agent role; compose passthrough for role+SOUL
- live user context (M14) + seat SOUL compose the full persona:
governance -> persona -> identity -> user -> mission
- RELEASE -> 0.0.10; packaged and health-gated activated
- example seat committed: agents/researcher
Closes #36
2026-09-03 11:56:38 -05:00
jason.woltje
bb5cecb348
feat(adapters): adapter contract, dispatch, pi + mock adapters ( #16 )
...
- adapters/README.md: the harness boundary contract (env in, response on
stdout, diagnostics stderr, exit 0 success)
- adapters/pi: extracted current invocation unchanged
- adapters/mock: deterministic MOSAIC_MOCK_RESPONSE echo (test-only)
- run-agent.sh: name-validated dispatch to adapters/<name>/adapter.sh
- config: optional execution.adapter (pi|mock), default pi, configVersion
stays 1 — existing configs remain valid; selection authority is the
config file (load_config exports it)
- compose: MOSAIC_ADAPTER / MOSAIC_MOCK_RESPONSE passthrough; Containerfile
installs adapters read-only; RELEASE -> 0.0.5
Verified: hello unchanged; mock verbatim via config; unknown adapter and
path-traversal names refused in-container; invalid adapter exits 2.
Closes #16
2026-09-02 21:18:07 -05:00
jason.woltje
a35ea62ab1
feat(release): RELEASE identity + image tag single-sourcing ( #10 )
...
- RELEASE file: single source of release version (0.0.X until declared stable)
- common.sh load_release(): validates version, derives
MOSAIC_IMAGE_TAG=mosaic-poc-agent:<pi>-r<release> from the pinned pi dep
- compose.yaml: image tag is required env; build/hello/verify call load_release
- verify.sh derives the image name instead of hardcoding it
- package.json version aligned to the same 0.0.X line
Closes #10
2026-09-02 20:18:17 -05:00
jason.woltje
81f58b15c8
fix(launcher): ensure configured data root before verify mount; docs for M1 ( #4 )
...
- verify.sh now calls bootstrap_runtime_dir after load_config; previously a
reset-then-verify flow let Docker auto-create a root-owned mount source
- common.sh: fail with clear guidance when data root exists but is not writable
- README: configuration section, bootstrap usage, selftest entry point
- BUILD-LOG: Phase 5 entries with corrections
E2E (clean slate): 20/20 selftests; bootstrap idempotent; config-driven
hello/verify MOSAIC_HELLO_OK; negative marker exit 1; reset + rerun green;
config checksum unchanged across the entire flow.
Closes #4
2026-09-02 18:32:50 -05:00
jason.woltje
900a506c1f
feat(config): wire launcher scripts and compose to config.json ( #2 )
...
- common.sh: load_config() exports MOSAIC_DATA_ROOT/PROVIDER/MODEL; fails closed
- compose.yaml: dataRoot mount and provider/model are required env (:? errors)
- build/hello/verify load config before any mutation; no silent bootstrap
- reset.sh: target resolved from configured dataRoot; all safety checks kept
Verified: compose fails without launcher env; verify/reset fail on missing
config; config-driven hello+verify pass; symlink refusal with sandboxed
config (canary survived); config checksum unchanged across reset+rerun.
Closes #2
2026-09-02 18:30:08 -05:00
jason.woltje
c2365ae519
chore: baseline container POC and atomic foundation plan
...
- Containerized Pi hello-world proof (image mosaic-poc-agent:0.84.4, non-root)
- Four immutable contract fixtures loaded into a generated system prompt
- build/hello/verify/reset scripts with exact-match gating and reset safety
- Documented Pi discovery (v0.84.4, -p mode, --system-prompt, container auth)
- Append-only BUILD-LOG with corrections; deferred layers in LAYERS.md
- Architecture plan: docs/plans/2026-09-02_atomic-mosaic-foundation.md
2026-09-02 18:24:36 -05:00