Files
stack/docs/design/framework-constitution/OPEN-QUESTIONS.md
Jason Woltje c70b217a5c
Some checks failed
ci/woodpecker/push/ci Pipeline failed
docs(design): mosaic framework constitution — expert conference output
Conference of 7 experts (architect/moonshot/contrarian/coder/aiml/devex/steward)
debated layering, sanitization, upgrade-safety, cross-harness robustness.
Artifacts: BRIEF, 7 positions, 7 rebuttals, synthesis-v1, 3 red-team passes,
canonical DESIGN.md, OPEN-QUESTIONS.md, MISSION.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 23:47:49 -05:00

6.5 KiB

Mosaic Framework Constitution — Open Questions for the Human Operator

These require an operator/maintainer decision before or during alpha implementation. Each lists the question, why it can't be auto-resolved, the design's provisional default, and the impact of the decision. DESIGN.md proceeds on the provisional defaults unless overridden.


Q1 — License choice: MIT (provisional) vs Apache-2.0 vs AGPL-3.0

DESIGN.md §6 Phase 0 ships MIT per the synthesis (D8). This is irreversible-ish: the alpha tag fixes the IP status of all prior contributions, and changing the license after external forks exist is hard. MIT maximizes adoption; Apache-2.0 adds an explicit patent grant (relevant if Mosaic tooling touches patentable infra workflows); AGPL protects against closed SaaS forks of an agent framework. Provisional: MIT. Needs an explicit operator yes/no before the LICENSE file lands, because it is the one Phase-0 decision that cannot be cleanly reversed post-tag.

Q2 — Is mosaic init mandatory before any launch, or is bare-launch a supported entrypoint?

The design closes the headless-bootstrap hole by having install.sh run mosaic-init --non-interactive, and relies on checkSoul() for mosaic <harness> launches. But bare claude/codex/opencode (bypassing mosaic entirely) remains a real path that gets base-only overlays, no doctor drift detection, and Tier-3 (weakest) injection. Decision needed: is bare launch a first-class supported entrypoint we guarantee gate-presence for, or a best-effort, caveat-emptor path documented as degraded? This sets how much engineering goes into the self-load fallback vs how loud the "use mosaic <harness>" warning is.

Q3 — Non-interactive persona: fail-closed vs a sanctioned generic default?

DESIGN.md §3.3 makes non-interactive init fail-closed on persona (error unless --agent-name given) to avoid silently shipping an agent named "Assistant" with the Jarvis role string (devex B2). This is safer but means a fully-unattended fleet provision must supply --agent-name in its automation. Decision needed: is fail-closed acceptable for the operator's actual Discord/ orchestrator/CI provisioning flows, or is a deliberately-chosen generic persona (e.g. "Mosaic Agent" with a neutral role) preferred for zero-touch deploys? If the latter, D6's rejection of generic-default persona must be formally amended.

Q4 — Where does the framework .woodpecker.yml live, and is the CI authority Woodpecker?

verify-sanitized.sh, the resident line-count ceiling, and the composer/migration tests must be wired blocking. There is no .woodpecker.yml at the framework package or monorepo root today (only project-template CI under tools/quality/templates/). Decision needed: monorepo-root pipeline vs a framework-package pipeline, and confirmation that Woodpecker (not GitHub Actions / Gitea Actions) is the gate authority for this package. This blocks Phase 1.

Q5 — Overlay scope for the alpha: include STANDARDS.local.md and policy/*.md, or just SOUL/USER?

DESIGN.md §3.2 ships SOUL.local.md + USER.local.md + STANDARDS.local.md and defers policy/*.md composition to v2. The §1.4 split makes policy/ non-load-bearing for gates, so deferral is safe — but if the operator has near-term need for tighten-only operator policy beyond merge-authority, policy/*.md composition moves into the alpha. Decision needed: is deferring policy/ composition acceptable for the alpha's actual use?

Q6 — Migration handling of a user-edited root AGENTS.md: .bak + advisory vs interactive review?

DESIGN.md §3.3 copies a user-edited v2 AGENTS.md to AGENTS.md.pre-constitution.bak and emits a non-blocking advisory — deliberately no interactive merge (would hang headless). This means a user who customized their root contract must manually re-apply intent into CONSTITUTION.md/overlays after upgrade. Decision needed: is "preserved-as-backup + advisory, manual re-apply" the accepted UX, or should mosaic doctor actively diff the .bak against the new structure and suggest where each edit should go? (The latter is more work; flagged because it changes the upgrade UX promise.)

Q7 — OpenBrain URL default in the shipped hook

DESIGN.md §2b changes prevent-memory-write.sh from the hardcoded brain.woltje.com to ${OPENBRAIN_URL:?...} (fast-fail). That makes the memory hook error for any install that hasn't set OPENBRAIN_URL. Decision needed: is fast-fail correct (forces explicit config), or should the hook soft-degrade (skip the OpenBrain nudge, still block the write) when OPENBRAIN_URL is unset? Fast-fail is safer for the maintainer's fleet; soft-degrade is friendlier for first-time OSS adopters who don't run OpenBrain at all.

Q8 — Is collapsing the two installers (install.sh + file-adapter.ts) into one in scope?

DESIGN.md mitigates the dual-installer drift (contrarian R10) by requiring every change in both plus a shared fixture suite — but keeps two implementations. The more durable fix is to collapse to one (bash shells out to the node CLI, or vice versa). That is a larger refactor with its own risk. Decision needed: accept "two installers + shared fixtures" for the alpha (provisional), or fund the collapse now while the Constitution semantics are being added anyway?

Q9 — Pi as an OSS-shippable runtime, or maintainer-internal?

runtime/pi/ and adapters/pi.md describe Pi as "the native Mosaic agent runtime" with no permission restrictions and a TypeScript extension. For a public alpha, is Pi a runtime external adopters can actually install and run, or is it maintainer-internal? This affects whether the cross-harness compliance matrix lists Pi as a supported public target (and whether the "Pi has no hook backstop / resident is its only enforcement" caveat is a public-facing constraint or an internal note).

Q10 — examples/personas/execution-partner.md: ship the sanitized Jarvis persona, or a neutral one?

The design preserves the worked Jarvis persona as a placeholdered example. The persona includes PDA-friendly / accommodation-oriented language (defaults/SOUL.md:23). Decision needed: is shipping that (sanitized, as one example among others) appropriate for a public package, or should the shipped example be a fully neutral persona with the accommodation-specific content kept entirely in the operator's private generated SOUL.md? This is a judgment call about how much of the original persona's character is appropriate as a public template.