Skip to content

chore(cardshed): bootstrap @lab/ll-CARDSHED stack contract #143

@w7-mgfcode

Description

@w7-mgfcode

Why

The CARD SHED deterministic core (PRP 2) landed in #139/#140 at @lab/ll-CARDSHED/apps/core/, but the stack lacks a W7-Base contract root:

  • No .w7-meta, compose.yml, .env.example, .gitignore at @lab/ll-CARDSHED/
  • No README.md, CLAUDE.md, AGENTS.md, BLUEPRINT.md
  • No stack-local rules (.claude/rules/)
  • No .stitch/DESIGN.md placeholder (PRP 3 M1 will populate)

Per .shared/W7-CONTRACT.md, every stack one level deep inside a zone needs the contract artifacts. Today cardshed is just a TypeScript library floating under apps/core/ — it's not discoverable via w7 stat and it's not legible to future contributors landing on the repo.

What ships (this PR)

Stack root scaffolding modeled on @lab/ll-RELIQUARY/:

  • README.md — human-facing overview, status, stack tech, quickstart
  • CLAUDE.md — Claude-side project rules (mirrors RELIQUARY shape, cardshed-specific)
  • AGENTS.md — agent-side overview
  • BLUEPRINT.md — index pointing to PRPs/cardshed-{01,02,03}-*.md as source-of-truth
  • .w7-meta — minimal, declares "boilerplate; no live services yet"
  • compose.yml — stub (alpine sleep) so the stack is discoverable; replaced at PRP 3 M1
  • .env.example — placeholder (real env arrives with apps/ui/)
  • .gitignore — adapted from RELIQUARY
  • .claude/rules/ui-design-pipeline.md — stack-local mandatory UI pipeline (mirrors RELIQUARY)
  • .claude/rules/core-determinism.md — stack-local rule encoding PRP 2's purity guarantees
  • .stitch/DESIGN.md — placeholder for PRP 3 M1
  • data/.gitkeep, dogfood-output/.gitkeep, docs/SCREENS/.gitkeep, docs/DECISIONS/.gitkeep

Out of scope

  • apps/ui/, apps/server/ scaffolding (PRP 3 M1+)
  • Stitch generation of the actual design system (PRP 3 M1)
  • Any rules-engine or core changes (PRP 2 is sealed)
  • Updating root README.md active-stacks table (separate PR — same gap exists for RELIQUARY)

Acceptance

  • @lab/ll-CARDSHED/.w7-meta parses; docker compose --env-file .env.example -f @lab/ll-CARDSHED/compose.yml config -q exits 0
  • All three policy scripts (prod-privileged, prod-no-root-mount, zone-ingress-naming) still exit 0
  • Commit message uses chore(cardshed): ... per .claude/rules/commit-format.md
  • No compose.yml privileged: or host root mounts (we're in @lab, but the policy still applies as a stack-shape sanity check)

Reference

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions