mosaic-brain: codify per-estate agent working memory (~/.mosaic) into the installer #1051
Open
opened 2026-08-05 15:48:42 +00:00 by Mos
·
0 comments
No Branch/Tag Specified
main
feat/1050-install-state-machine-red-fixture
fix/1043-pane-git-identity
fix/pr-merge-message-field
feat/1051-mosaic-brain-installer
feat/1045-mosaic-cred
remediation/state
fix/1056-upgrade-rollback-control-race
fix/1019-ci-queue-timeout-harness
next
feat/rm-02-gate-registry
fix/rm-01-reproducible-checkout
remediation/mission-setup
fix/hygiene-inert-format-gate
fix/1019-queue-guard-stdin
feat/mos-ste-writing-standard
fix/1007-suite-hermeticity
fix/991-comment-url-scheme-normalise
feat/push-guard-null-case-verification
mos-comms-live
docs/heartbeat-framework-layering-ms-lead
feat/869-c4-version-coupling
feat/869-c2-install-ordering-guard
feat/869-c5-doctor-activation-check
feat/per-agent-gitea-identity
fix/875-belongs-case-insensitive-slug
fix/ci-queue-wait-404-branch-absent
feat/869-c1-activation-probe
feat/869-c3-broker-supervisor
fix/865-tea-cli-comment-invocation
feat/glpi-skills
fix/860-deflake-mutator-lease-gate
fix/850-detect-platform-port-normalization
fix/856-worktree-deps-preflight
fix/835-pr-review-approve-reject-comment-flag
fix/848-truthful-evidence
fix/812-pr-review-comment
fix/849-recovery-runtime-fixture-race
docs/758-ledger-m5-001-sync
feat/834-tc-server-side-doc
feat/833-constrained-recovery-command
feat/827-gate0-probe
governance/gate0-probe3-amendment
fix/795-codex-pr-diff
fix/795-ci-base-jq
fix/795-ci-base-git
feat/791-pr3-fleet-regen
feat/791-pr2-snapshot-restore
fix/807-glpi-206
fix/808-agent-send-false-sender
feat/791-upgrade-config-protection
feat/790-mosaic-yolo-claudex-pr2
feat/790-mosaic-yolo-claudex
feat/758-v1-v2-migrator
fix/766-exact-fleet-comms
test/758-reconciler-lifecycle-gates
docs/771-kbn101-db-role-split
test/758-example-profile-dispositions
feat/758-shared-role-resolution
feat/mos-logical-identity-fencing
feat/769-kbn100-unified-schema
docs/753-kbn010-threat-gate
feat/758-roster-v2-compiler
feat/756-official-discord-plugin
docs/758-fleet-config-management
fix/mos-option2-qualification-format
docs/issue-758-m0
docs/mos-option2-qualification
mos-comms
feat/tess-interaction-agent
fix/tess-docs-format
draft/mosaic-platform-prd
fix/installer-provider-gate-and-local-gateway-redis
release/mosaic-cli-0.0.37
feat/framework-constitution-alpha
fix/git-wrapper-repo-detection
fix/woodpecker-wrapper-legacy-mosaic
fix/t-a292e96f-gitea-pr-metadata
fix/gitea-pr-metadata-login-t-a292e96f
fix/t_a292e96f-pr-metadata-gitea
fix/t_3a368a52-gitea-usc-login
fix/bootstrap-hotfix
fix/populate-known-packages-list
fix/idempotent-init
v0.0.39-alpha
mosaic-v0.0.31
fed-v0.2.0-m2
fed-v0.1.0-m1
mosaic-v0.0.29
mosaic-v0.0.28
mosaic-v0.0.27
mosaic-v0.0.26
mosaic-v0.0.25
mosaic-v0.0.24
v0.2.0
v0.1.0
v0.0.8
v0.0.7
v0.0.6
v0.0.5
v0.0.4
No labels
Milestone
No items
No Milestone
Projects
Clear projects
No projects
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: mosaicstack/stack#1051
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
Agent working memory currently lives as plain files in no repository. Provisioned by hand once to prove the shape; this issue is to codify it into the installer.
mosaic-brainis a private git repo — one per estate — cloned to~/.mosaic, holding the dynamic content agents accumulate while working. Config stays in~/.config/mosaic; the two have different lifecycles and different blast radius when wrong.The failure this fixes
A lane's continuity artifact — the accumulated operating doctrine of an entire mission — sat unbacked on a filesystem at 96% capacity. It survived seat rotation and would have survived nothing else.
The seats could not fix it themselves. The only substrate available belonged to a different estate, where those seats correctly hold no standing — the boundary working exactly as designed while a real artifact sat unprotected behind it.
Two alternatives were rejected on evidence:
A per-estate brain removes the crossing instead of authorising it, and restores verification to the lane that has to do the verifying.
Requirements for the installer
R1 — Provision the brain. Ensure a per-estate
mosaic-brainexists; clone to~/.mosaic. If it exists, clone — do not re-create.R2 — Derive the estate; never assume it. The brain belongs to the estate of the git host being used, not the host the installer runs on. Hosts straddle — a machine can sit in one estate and push to another. Estate is a property of the target.
R3 — Grant through the credential broker, not a hand-run script. Verify the resulting permission by reading it back with the seat's own credential, not the admin's.
R4 — Assert a postcondition, not "the clone ran".
~/.mosaicexists, is a git repo, has the expected remote, is onmain, and the running identity can read AND write it — proven by round-trip, not exit code.R5 — Negative control in the install test. A seat outside the estate must be REFUSED. An access check that only tests the allowed case cannot fail.
R6 — Never write secrets. Ship the
.gitignore(*.token *.key *.pem .env credentials.json). The broker holds credentials; the brain never does.R7 — Migration, not just creation. Detect pre-existing local-disk state and move it in or report it. A brain that starts empty beside an unbacked directory has not solved the problem it exists to solve.
R8 —
doctormust check it. Missing clone, wrong remote, no write access, or an uncommitted local state directory are defects to surface;doctor --fixshould repair the first three.Open questions for the implementer
Relationship to other work
Depends on the credential broker (#1045) for R3 — the grant path is
mosaic cred, not a script. Related: #1043 (identity never reaching the agent), #1049 (estate boundary enforced only by host-string matching).Reference implementation and full write-up live in the bootstrapped repo at
docs/ADOPTION.md.be-coder-07 referenced this issue2026-08-05 20:10:42 +00:00