Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 1 addition & 13 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,24 +16,12 @@ jobs:
- name: Install dependencies
run: bun install

- name: Lint
run: bun run lint

- name: Typecheck
run: bun run typecheck

- name: Aggregate quality checks
- name: Quality gates (check:all)
run: bun run check:all

- name: Generated CLI docs are up to date
run: bun run gen:docs:check

- name: Run tests (CI reporter)
run: bun run test:ci

- name: Coverage ratchet
run: bun run check:coverage

- name: Test timing summary
if: always()
run: bun run report:test-timing
Expand Down
2 changes: 2 additions & 0 deletions .mulch/expertise/quality.jsonl
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
{"type":"decision","classification":"tactical","recorded_at":"2026-06-12T05:48:44.323Z","evidence":{"seeds":"pl-a59c","commit":"a2443728bb772cf13238f6666e1321995de8999b"},"title":"Byte-identical check:all runner with biome formatter override","rationale":"The fleet standard freezes scripts/check-all.ts and scripts/check-ci-parity.ts byte-identical; canopy's biome formatter would reformat them, so the sanctioned fix (matching plot/seeds) is a biome.json override disabling the formatter for exactly those two files rather than editing the scripts.","id":"mx-2e4545"}
{"type":"failure","classification":"tactical","recorded_at":"2026-06-12T05:48:44.523Z","evidence":{"commit":"a2443728bb772cf13238f6666e1321995de8999b"},"description":"Template l5-toolkit scripts fail canopy lint as copied: check-all.ts/check-ci-parity.ts violate the biome formatter at lineWidth 100, and the ratchet test files have unsorted imports under organizeImports.","resolution":"Added a biome.json override disabling the formatter for the two byte-identical scripts (fleet pattern from plot/seeds), ran biome check --write on the non-frozen ratchet test files, and upgraded @biomejs/biome 2.4.6 -> ^2.4.14 (resolved 2.4.16) with a matching $schema bump.","id":"mx-42bf1f"}
7 changes: 4 additions & 3 deletions .mulch/mulch.config.yaml
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
version: '1'
domains:
- cicd
- canopy
- architecture
cicd: {}
canopy: {}
architecture: {}
quality: {}
governance:
max_entries: 100
warn_entries: 150
Expand Down
4 changes: 4 additions & 0 deletions .seeds/issues.jsonl
Original file line number Diff line number Diff line change
Expand Up @@ -95,3 +95,7 @@
{"id":"canopy-912f","title":"cn setup pi recipe + pi-aware onboarding marker variant (ONBOARD_VERSION 2→3, :pi suffix)","status":"open","type":"task","priority":2,"plan_step_index":4,"description":"<!-- seeds:plan-backref:start -->\nStep 5 of plan pl-c2a8.\n\nParent seed: canopy-a29b — Build pi-canopy extension — prompts as pi slash commands\nPlan template: feature\nPlan approach: Ship inside `@os-eco/canopy-cli` (Option A from the investigation doc) — adds `extensions/pi/{index.ts, lib/*.ts, README.md}`, plus a `pi` manifest, the `pi-package` keyword, and `peerDependencies` + `peerDependenciesMeta.optional: true`…\n\nRun `sd plan show pl-c2a8` for the full plan (context, alternatives, sibling steps, acceptance criteria).\n<!-- seeds:plan-backref:end -->","createdAt":"2026-05-15T22:04:29.570Z","updatedAt":"2026-05-15T22:04:29.570Z","plan_id":"pl-c2a8","blockedBy":["canopy-94fc"],"blocks":["canopy-4e3d","canopy-a29b"]}
{"id":"canopy-4e3d","title":"Tests + README","status":"open","type":"task","priority":2,"plan_step_index":5,"description":"<!-- seeds:plan-backref:start -->\nStep 6 of plan pl-c2a8.\n\nParent seed: canopy-a29b — Build pi-canopy extension — prompts as pi slash commands\nPlan template: feature\nPlan approach: Ship inside `@os-eco/canopy-cli` (Option A from the investigation doc) — adds `extensions/pi/{index.ts, lib/*.ts, README.md}`, plus a `pi` manifest, the `pi-package` keyword, and `peerDependencies` + `peerDependenciesMeta.optional: true`…\n\nRun `sd plan show pl-c2a8` for the full plan (context, alternatives, sibling steps, acceptance criteria).\n<!-- seeds:plan-backref:end -->","createdAt":"2026-05-15T22:04:29.570Z","updatedAt":"2026-05-15T22:04:29.570Z","plan_id":"pl-c2a8","blockedBy":["canopy-714e","canopy-f6b9","canopy-bb56","canopy-912f"],"blocks":["canopy-a29b"]}
{"id":"canopy-da2c","title":"Cancel pi-canopy extension build before any code lands","status":"open","type":"task","priority":2,"createdAt":"2026-05-17T18:51:12.189Z","updatedAt":"2026-05-17T18:51:12.189Z","description":"Sibling decision to mulch-18e4 (mulch repo, revert) and seeds-2f21 (seeds repo, revert). Canopy is the easy case: no extension code has been written yet — the plan pl-c2a8 is approved with 6 open child seeds (canopy-94fc, canopy-714e, canopy-f6b9, canopy-bb56, canopy-912f, canopy-4e3d) but step 1 (foundation) has not started. Closing them out before any code lands is a clean prevention rather than a rollback.\n\n## Why (decision rationale)\n\nAudit of the mulch pi extension (this session, 2026-05-15) plus a philosophy discussion with the owner concluded that pi extensions are not the right integration surface for any of the three os-eco primitives (mulch / seeds / canopy):\n\n1. **The mulch audit found the install recipe was silently broken** — `ml setup pi` wrote bare `@os-eco/mulch-cli` to .pi/settings.json, but pi's resolver only auto-installs entries with the `npm:` prefix. Verified empirically. The seeds recipe uses the same pattern. The canopy recipe (planned as step 5 of pl-c2a8) would have inherited the same bug. Distribution complexity for pi packages is a real cost we keep paying.\n\n2. **Extensions aren't needed.** CLAUDE.md is the universal substrate — auto-discovered by pi, Claude Code, Cursor, Codex, every coding agent. The canopy CLI is clean (`cn list`, `cn render --json`, `cn emit`); agents are very good at calling CLIs via bash. The qualitative differentiator pi-canopy would have added — `resources_discover` rendering every prompt as a native slash command — is cosmetic; the agent can already run `cn render <name>` itself.\n\n3. **For canopy specifically, the marginal value is lowest of the three.** Mulch had a (weak) case for systemPrompt-cached prime via `before_agent_start`. Seeds had a case for the status widget showing ready/in-progress/blocked counts (human UX). Canopy is a passive prompt library — there is no comparable surface. The plan even acknowledges this: `canopy-a29b` explicitly excludes auto-prime (Appendix A of the investigation doc rejected `cn prime --json`) and explicitly excludes a status widget (alternative #9 in pl-c2a8: 'canopy is a passive library — no work-queue state worth surfacing'). What remains is `resources_discover` + 14 cn_* tool wrappers + 9 slash commands — all of which are reachable via bash + the existing CLI.\n\nThe plan's own framing ('the LLM rarely emits, rarely updates') is a symptom of agents needing better CLAUDE.md prose, not a pi-specific code path. Fix the prose, ship the value uniformly across all runtimes.\n\n## What to do\n\nNo code rollback (no code has landed). Close out the plan and its children with cross-references.\n\n```bash\n# 1. close the 6 child seeds\nsd close canopy-94fc canopy-714e canopy-f6b9 canopy-bb56 canopy-912f canopy-4e3d \\\n --reason 'pi-canopy extension build cancelled; see <this-seed-id>. CLI + CLAUDE.md remain the integration surface for all agent runtimes.'\n\n# 2. close the parent feature seed\nsd close canopy-a29b --reason 'pi-canopy extension build cancelled; see <this-seed-id>'\n\n# 3. handle the plan record\n# sd plan does not currently support a 'cancelled' status — options:\n# (a) sd plan outcome pl-c2a8 --outcome cancelled (if supported)\n# (b) leave pl-c2a8 with status 'approved' and a comment, since all children are closed\n# (c) hand-edit .seeds/plans.jsonl to add an outcome row\n# Verify what's available with: sd plan --help\n```\n\n## What stays in canopy (no work needed)\n\n- `cn prime` continues to work as a tool call agents can invoke from bash.\n- `cn list` / `cn render` / `cn emit` / `cn update` continue to work via bash.\n- The `<!-- canopy:start -->` onboarding snippet in CLAUDE.md remains as-is (non-pi variant).\n- The `cn config` work that landed in pl-f13b (canopy-9e5b) stays — that was useful CLI infrastructure regardless of pi.\n\n## Out of scope (file separately if any of this is wanted)\n\n- **Document the CLAUDE.md-only integration pattern** — same docs work as the sibling rollbacks. Worth doing once across all three primitives in os-eco/docs/ rather than three times.\n- **Improve `cn prime` output** so it carries enough context to nudge agents toward `cn list` / `cn render` workflows. The current prime is terse; making it richer is a higher-leverage move than building an extension.\n- **Drop the `pi-extensions-investigation.md` doc** (in os-eco root) or annotate it with a 'superseded — see <this-seed-id> + mulch-18e4 + seeds-2f21' header.\n\n## Acceptance\n\n- canopy-a29b closed with cross-reference to this seed.\n- All 6 children of pl-c2a8 closed with cross-reference.\n- pl-c2a8 marked cancelled / not in progress (mechanism TBD per `sd plan --help`).\n- No `extensions/` directory exists in canopy/.\n- No `pi` manifest field or peerDependencies in canopy/package.json.\n- No `cn setup` command added (it was step 5 of the plan — leave as future-if-needed).\n- Existing canopy CLI (`cn prime`, `cn list`, `cn render`, etc.) unchanged.\n\n## Sibling references\n\n- mulch-18e4 — Roll back pi extension (mulch repo, revert)\n- seeds-2f21 — Roll back pi-seeds extension (seeds repo, revert)\n- pl-c2a8, canopy-a29b — superseded by this seed","labels":["pi-extension","rollback","audit-followup"]}
{"id":"canopy-9e11","title":"Adopt canonical check:all standard","status":"open","type":"feature","priority":2,"createdAt":"2026-06-12T04:51:00.628Z","updatedAt":"2026-06-12T05:48:19.548Z","plan_id":"pl-a59c"}
{"id":"canopy-3b09","title":"Add the canonical scripts/check-all.ts quiet runner copied byte-identical from templates/l5-toolkit/scripts/check-all.ts, with canopy's exported GATES manifest in the standard's order: lint, typecheck, check:agents, check:dups, check:deps, check:size, check:debt, gen:docs:check, check:coverage, check:ci-parity (last) -- note check:coverage and the conditional gen:docs:check gate must be ADDED to the manifest (they exist as scripts but are absent from the current 5-gate && chain). Replace package.json check:all with `bun scripts/check-all.ts`, add `verify`: `bun run check:all`, and add scripts/check-all.test.ts. If check-debt-markers.ts / check-file-sizes.ts lack co-located tests, add them for parity with the other repos. Confirm the quiet-output contract.","status":"closed","type":"task","priority":2,"plan_step_index":0,"description":"<!-- seeds:plan-backref:start -->\nStep 1 of plan pl-a59c.\n\nParent seed: canopy-9e11 — Adopt canonical check:all standard\nPlan template: feature\nPlan approach: Swap the && chain for the canonical quiet runner with a GATES manifest in the standard's order, adding check:coverage (currently absent from the chain) and the conditional gen:docs:check gate (canopy is a doc generator) slotted before…\n\nRun `sd plan show pl-a59c` for the full plan (context, alternatives, sibling steps, acceptance criteria).\n<!-- seeds:plan-backref:end -->","createdAt":"2026-06-12T04:53:29.073Z","updatedAt":"2026-06-12T05:48:19.434Z","plan_id":"pl-a59c","blocks":["canopy-b9ee","canopy-9e11"],"closedAt":"2026-06-12T05:48:19.434Z"}
{"id":"canopy-b9ee","title":"Add scripts/check-ci-parity.ts (with test) copied from templates/l5-toolkit/scripts, importing the GATES array from check-all.ts; add the check:ci-parity script as the final gate in the manifest. Reconcile any residual non-canonical gate name. Verify check:ci-parity passes against .github/workflows/ci.yml.","status":"closed","type":"task","priority":2,"plan_step_index":1,"description":"<!-- seeds:plan-backref:start -->\nStep 2 of plan pl-a59c.\n\nParent seed: canopy-9e11 — Adopt canonical check:all standard\nPlan template: feature\nPlan approach: Swap the && chain for the canonical quiet runner with a GATES manifest in the standard's order, adding check:coverage (currently absent from the chain) and the conditional gen:docs:check gate (canopy is a doc generator) slotted before…\n\nRun `sd plan show pl-a59c` for the full plan (context, alternatives, sibling steps, acceptance criteria).\n<!-- seeds:plan-backref:end -->","createdAt":"2026-06-12T04:53:29.073Z","updatedAt":"2026-06-12T05:48:19.491Z","plan_id":"pl-a59c","blocks":["canopy-e548","canopy-9e11"],"closedAt":"2026-06-12T05:48:19.491Z"}
{"id":"canopy-e548","title":"Wire .github/workflows/ci.yml to invoke the canonical gates (or `bun run check:all`) so the local manifest matches CI. Run `bun run check:all` and `bun run verify` green end-to-end with the quiet-output contract and a passing check:ci-parity.","status":"closed","type":"task","priority":2,"plan_step_index":2,"description":"<!-- seeds:plan-backref:start -->\nStep 3 of plan pl-a59c.\n\nParent seed: canopy-9e11 — Adopt canonical check:all standard\nPlan template: feature\nPlan approach: Swap the && chain for the canonical quiet runner with a GATES manifest in the standard's order, adding check:coverage (currently absent from the chain) and the conditional gen:docs:check gate (canopy is a doc generator) slotted before…\n\nRun `sd plan show pl-a59c` for the full plan (context, alternatives, sibling steps, acceptance criteria).\n<!-- seeds:plan-backref:end -->","createdAt":"2026-06-12T04:53:29.073Z","updatedAt":"2026-06-12T05:48:19.548Z","plan_id":"pl-a59c","blocks":["canopy-9e11"],"closedAt":"2026-06-12T05:48:19.548Z"}
Loading
Loading