From 54c1231280a22705cace0ee14ef376866327d24d Mon Sep 17 00:00:00 2001 From: Jason Woltje Date: Thu, 10 Sep 2026 15:10:20 -0500 Subject: [PATCH] Draft M20 increment 1 charter for owner approval (#1499) --- docs/SESSIONS.md | 2 + .../2026-09-10_m20-increment1-charter.md | 58 +++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 docs/plans/2026-09-10_m20-increment1-charter.md diff --git a/docs/SESSIONS.md b/docs/SESSIONS.md index e34f2532..0cad66f3 100644 --- a/docs/SESSIONS.md +++ b/docs/SESSIONS.md @@ -176,3 +176,5 @@ are never rewritten or removed; corrections are new entries. - 2026-09-10 — darkwing — Gate 7 closed: owner selected refresh mechanism (a) pi auth check --provider; registry draft updated (driver rule, suites note, resolution section). Investigation findings cfab6c00 to be committed after independent review. All ten gates now resolved; implementation still requires a separately chartered increment. - 2026-09-10 — darkwing — GATE7-FINAL-FILBERT-1 APPROVED; gate 7 closed with owner mechanism (a). Six units committed at 86e009dd, pushed, remote verified. Registry plan fully resolved; no implementation authorized without a separate charter. + +- 2026-09-10 — darkwing — #1499 opened; M20 increment-1 charter drafted (docs/plans/2026-09-10_m20-increment1-charter.md): packages/mosaic schema/validation/CLI slice, pi 0.85.1 pin, no materializer/refresh/deployment. Awaiting owner approval; no implementation started. diff --git a/docs/plans/2026-09-10_m20-increment1-charter.md b/docs/plans/2026-09-10_m20-increment1-charter.md new file mode 100644 index 00000000..c5f90c8f --- /dev/null +++ b/docs/plans/2026-09-10_m20-increment1-charter.md @@ -0,0 +1,58 @@ +# M20 packages/mosaic auth/provider/harness — increment 1 charter (#1499) + +Status: DRAFT FOR OWNER APPROVAL. Baseline: commit 21461c8674d25c8cc2fe993f263dfc4263c85448 on refactor. Governing plan: docs/plans/2026-09-03_auth-provider-harness-registry.md (all ten gates owner-resolved 2026-09-10). Nothing in this charter authorizes implementation until Jason approves it. + +## User-visible outcome + +A real `packages/mosaic` module exists with the registry's core schemas, validation, and a fail-closed CLI slice, proven by suites — the foundation every later increment (materializers, harness install, refresh service) builds on. Nothing user-facing in daily flows changes yet. + +## Increment 1 scope (allowed paths) + +- `packages/mosaic/` (new): package scaffolding, TypeScript config, and the auth/provider/harness domain module: + - provider record schema (native + custom-endpoint kinds, `allowInsecureTransport` flag), + - account metadata schema (split `account.json`; credential-file schema shape, not contents), + - settings-profile schema (allowedAccounts, defaultAccounts, providers, models), + - seat selection schema (per-execution semantics, fork-pin field), + - harness manifest schema (id, executable, adapter, version range, materializers), + - validation engine: unknown keys, ID regex `^[a-z0-9][a-z0-9._-]{0,63}$`, path/name match, provider-kind-specific required fields, reference integrity (account under provider, profile references resolvable). +- `packages/mosaic/src/cli/` (new): read-only `registry validate` + `registry list` subcommands operating on a `--registry-root` directory argument (default: configured dataRoot). No mutation commands in this increment. +- `package.json`, `RELEASE`-adjacent pin files: pi dependency moves to exactly `0.85.1` (type tests and offline fixtures updated accordingly; runtime image rebuild is out of scope). +- `scripts/auth.sh`: untouched in this increment (shim conversion is a later increment). +- Suites: `packages/mosaic/tests/` with fixture-based negative/positive cases mirroring the plan's "Registry schemas" acceptance list. + +## Explicitly out of scope + +No materializer, no `auth.json`/`models.json` generation, no OAuth login/refresh execution (the `pi auth check` driver is specified but not wired), no harness detect/install, no seat migration to agentVersion 2, no `mosaic` top-level CLI aliasing beyond the registry subcommands, no container image build/release, no deployment, no live credential use, no writes to `~/.pi` or dataRoot at runtime (validate/list read only), no changes to existing suites' behavior. + +## Roles + +- Author: Darkwing (or delegated to Rocko under a bounded task; charter amendment records any delegation). +- Independent reviewer: Filbert. +- Operator/acceptance: Jason. + +## Test obligations + +- New package suites green: schema acceptance list from the plan (unknown keys, mismatch, symlink/traversal simulation at the validation layer, wrong perms representation, duplicate IDs, missing provider, unsupported credential type, allowInsecureTransport required for plain-http baseUrl). +- Existing suites remain green (config, task, release, conductor, auth, foundation, launcher fixtures). +- Node version pinned per repo canon; no network in tests (fixtures only). +- Secret non-disclosure: fixtures contain fake markers; suites assert they never appear in stdout/JSON output. + +## Rollback + +Single-purpose commits on refactor; revert the increment commits to restore baseline. No data migrations, no runtime state written, so rollback is purely source-level. + +## Protected operations / boundaries + +No credential reads or writes anywhere in this increment. Validation reads registry JSON from a supplied root; malformed input refuses with nonzero exit and no partial writes (there are no write paths at all). + +## Acceptance criteria + +1. `packages/mosaic` typechecks and its suites pass covering the plan's registry-schema acceptance list. +2. `registry validate` exits 0 on a fully valid fixture tree and refuses each invalid fixture with a precise error, no stack-trace spew, no secret echo. +3. `registry list` prints providers/accounts/profiles without any credential-shaped fields. +4. Pi pin is exactly 0.85.1 and all dependent fixtures/tests updated. +5. Independent review APPROVED on the exact candidate; Jason accepts the charter completion before any increment 2 planning. + +## CI note + +No CI workflow exists for this repo; suites run locally per canon. That gap is noted, not widened by this charter.