@friedbotstudio/create-baseline 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -3
- package/obj/template/.claude/commands/grant-push.md +19 -0
- package/obj/template/.claude/commands/init-project.md +26 -4
- package/obj/template/.claude/hooks/consent_gate_grant.mjs +107 -0
- package/obj/template/.claude/hooks/git_commit_guard.mjs +224 -0
- package/obj/template/.claude/hooks/harness_continuation.sh +101 -34
- package/obj/template/.claude/hooks/lib/common.mjs +283 -0
- package/obj/template/.claude/hooks/lib/common.sh +1 -1
- package/obj/template/.claude/hooks/memory_session_start.sh +20 -6
- package/obj/template/.claude/hooks/memory_stop.sh +161 -2
- package/obj/template/.claude/hooks/spec_approval_guard.sh +1 -1
- package/obj/template/.claude/hooks/swarm_approval_guard.sh +1 -1
- package/obj/template/.claude/hooks/tests/fixtures/ac008_byte_equal_reference.txt +7 -7
- package/obj/template/.claude/hooks/tests/fixtures/memory_stop_landmark_baseline.txt +21 -0
- package/obj/template/.claude/hooks/tests/fixtures/regenerate-ac008.sh +47 -0
- package/obj/template/.claude/hooks/tests/memory_session_start_test.sh +7 -3
- package/obj/template/.claude/hooks/tests/memory_stop_intent_test.sh +329 -0
- package/obj/template/.claude/hooks/tests/regenerate_ac008_test.sh +99 -0
- package/obj/template/.claude/memory/README.md +8 -3
- package/obj/template/.claude/memory/backlog.md +12 -0
- package/obj/template/.claude/project.json +6 -1
- package/obj/template/.claude/settings.json +3 -4
- package/obj/template/.claude/skills/audit-baseline/audit.sh +39 -21
- package/obj/template/.claude/skills/audit-baseline/tests/fixtures/_pending_opener_only.md +3 -0
- package/obj/template/.claude/skills/audit-baseline/tests/fixtures/preamble_full_empty_body.md +4 -0
- package/obj/template/.claude/skills/audit-baseline/tests/fixtures/preamble_full_with_entries.md +9 -0
- package/obj/template/.claude/skills/audit-baseline/tests/fixtures/preamble_no_opener.md +3 -0
- package/obj/template/.claude/skills/audit-baseline/tests/fixtures/preamble_opener_only.md +3 -0
- package/obj/template/.claude/skills/audit-baseline/tests/preamble_check_test.sh +147 -0
- package/obj/template/.claude/skills/chore/SKILL.md +5 -3
- package/obj/template/.claude/skills/commit/SKILL.md +5 -4
- package/obj/template/.claude/skills/copywriting/LICENSE +21 -0
- package/obj/template/.claude/skills/copywriting/NOTICE +23 -0
- package/obj/template/.claude/skills/copywriting/SKILL.md +1 -1
- package/obj/template/.claude/skills/design-ui/SKILL.md +23 -5
- package/obj/template/.claude/skills/design-ui/references/design-vs-development.md +26 -5
- package/obj/template/.claude/skills/design-ui/references/orchestration.md +1 -0
- package/obj/template/.claude/skills/design-ui/references/state-machine.md +5 -3
- package/obj/template/.claude/skills/documentation/LICENSE +202 -0
- package/obj/template/.claude/skills/documentation/NOTICE +22 -0
- package/obj/template/.claude/skills/google-analytics/SKILL.md +129 -0
- package/obj/template/.claude/skills/google-analytics/references/audiences.md +389 -0
- package/obj/template/.claude/skills/google-analytics/references/bigquery.md +470 -0
- package/obj/template/.claude/skills/google-analytics/references/custom-dimensions.md +355 -0
- package/obj/template/.claude/skills/google-analytics/references/custom-events.md +383 -0
- package/obj/template/.claude/skills/google-analytics/references/data-management.md +416 -0
- package/obj/template/.claude/skills/google-analytics/references/debugview.md +364 -0
- package/obj/template/.claude/skills/google-analytics/references/events-fundamentals.md +398 -0
- package/obj/template/.claude/skills/google-analytics/references/gtag.md +502 -0
- package/obj/template/.claude/skills/google-analytics/references/gtm-integration.md +483 -0
- package/obj/template/.claude/skills/google-analytics/references/measurement-protocol.md +519 -0
- package/obj/template/.claude/skills/google-analytics/references/privacy.md +441 -0
- package/obj/template/.claude/skills/google-analytics/references/recommended-events.md +464 -0
- package/obj/template/.claude/skills/google-analytics/references/reporting.md +397 -0
- package/obj/template/.claude/skills/google-analytics/references/setup.md +344 -0
- package/obj/template/.claude/skills/google-analytics/references/user-tracking.md +417 -0
- package/obj/template/.claude/skills/harness/SKILL.md +3 -1
- package/obj/template/.claude/skills/humanizer/LICENSE +21 -0
- package/obj/template/.claude/skills/humanizer/NOTICE +21 -0
- package/obj/template/.claude/skills/impeccable/LICENSE +202 -0
- package/obj/template/.claude/skills/impeccable/NOTICE +24 -0
- package/obj/template/.claude/skills/memory-flush/SKILL.md +20 -4
- package/obj/template/.claude/skills/memory-flush/sweep.py +74 -6
- package/obj/template/.claude/skills/memory-flush/tests/run.sh +300 -1
- package/obj/template/.claude/skills/optimize-seo/SKILL.md +313 -0
- package/obj/template/.claude/skills/optimize-seo/scripts/pagespeed.mjs +197 -0
- package/obj/template/.claude/skills/pagespeed-insights/LICENSE.md +37 -0
- package/obj/template/.claude/skills/pagespeed-insights/SKILL.md +446 -0
- package/obj/template/.claude/skills/pagespeed-insights/reference.md +50 -0
- package/obj/template/.claude/skills/tdd/SKILL.md +2 -1
- package/obj/template/.claude/skills/tdd/drift_check.py +180 -0
- package/obj/template/.claude/skills/tdd/tests/drift_check_test.sh +190 -0
- package/obj/template/.claude/skills/tdd/tests/run.sh +21 -0
- package/obj/template/.claude/skills/technical-tutorials/LICENSE +21 -0
- package/obj/template/.claude/skills/technical-tutorials/NOTICE +23 -0
- package/obj/template/.claude/skills/technical-tutorials/SKILL.md +1 -1
- package/obj/template/.claude/skills/triage/SKILL.md +8 -3
- package/obj/template/CLAUDE.md +37 -26
- package/obj/template/docs/init/seed.md +38 -23
- package/obj/template/manifest.json +80 -33
- package/package.json +1 -1
- package/src/CLAUDE.template.md +37 -26
- package/src/memory/backlog.template.md +12 -0
- package/src/project.template.json +6 -1
- package/src/seed.template.md +38 -23
- package/src/settings.template.json +3 -4
- package/obj/template/.claude/hooks/consent_gate_grant.sh +0 -89
- package/obj/template/.claude/hooks/git_commit_guard.sh +0 -93
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
**Mandatory binding language.** Each numbered section (§) below specifies a binding requirement for the baseline. Implementations SHALL conform; `CLAUDE.md` Articles SHALL reference the corresponding §; project amendments (per `CLAUDE.md` Art. X) SHALL NOT contradict any § here.
|
|
13
13
|
|
|
14
|
-
The baseline turns soft engineering rules (no unauthorized commits, no stubs, no mocks of internal code, no self-approved specs) into structural guarantees enforced by write-boundary hooks. Eleven workflow phases plus one stripped-down chore track (skips TDD; runs verify + archive mandatorily, simplify/integrate/document conditionally), seventeen write/run-boundary guards plus four lifecycle hooks plus one input-boundary hook (twenty-two `.sh`
|
|
14
|
+
The baseline turns soft engineering rules (no unauthorized commits, no stubs, no mocks of internal code, no self-approved specs) into structural guarantees enforced by write-boundary hooks. Eleven workflow phases plus one stripped-down chore track (skips TDD; runs verify + archive mandatorily, simplify/integrate/document conditionally), seventeen write/run-boundary guards plus four lifecycle hooks plus one input-boundary hook (twenty-two hook scripts total — twenty `.sh` + two `.mjs` after the JS-port pilot), thirty-six skills, one subagent, and four consent gates. Decisions live in main context; the lone subagent (`swarm-worker`) executes pre-decided recipes in parallel worktrees during `/swarm-dispatch`. Every artifact is archived; every third-party API is looked up against live docs. Project memory accumulates across sessions in `.claude/memory/` — auto-extracted by a Stop hook, curated in main context via `/memory-flush`, self-healing via re-verification.
|
|
15
15
|
|
|
16
16
|
---
|
|
17
17
|
|
|
@@ -109,9 +109,9 @@ Applies to every language. Mappings for TSX, Node, Python, Go, Rust ship inside
|
|
|
109
109
|
│ ├── hooks/ # 22 hook scripts: 17 write/run-boundary guards + 4 lifecycle hooks + 1 input-boundary hook (bash + python3, no jq)
|
|
110
110
|
│ │ └── lib/common.sh # shared helpers
|
|
111
111
|
│ ├── agents/ # 1 subagent: swarm-worker (rendered from src/agents/swarm-worker.template.md)
|
|
112
|
-
│ ├── commands/ #
|
|
112
|
+
│ ├── commands/ # 5 consent/bootstrap gates (user-only — structurally)
|
|
113
113
|
│ ├── skills/ # 36 skills: artifact (4) + phases (10) + workers (5) + spec helpers (4) + orchestration (3) + memory (1) + shared globals (7) + audit (1) + alt tracks (1)
|
|
114
|
-
│ ├── memory/ # project memory:
|
|
114
|
+
│ ├── memory/ # project memory: 7 canonical files + _pending.md (gitignored body) + README.md
|
|
115
115
|
│ └── state/ # runtime: workflow.json, approvals, swarm plans, verdicts, logs
|
|
116
116
|
├── src/ # pristine ship-time templates (overlay source for `npx @friedbotstudio/create-baseline`)
|
|
117
117
|
│ ├── CLAUDE.template.md
|
|
@@ -120,7 +120,7 @@ Applies to every language. Mappings for TSX, Node, Python, Go, Rust ship inside
|
|
|
120
120
|
│ ├── .mcp.template.json
|
|
121
121
|
│ ├── settings.template.json
|
|
122
122
|
│ ├── agents/swarm-worker.template.md
|
|
123
|
-
│ └── memory/<
|
|
123
|
+
│ └── memory/<7 canonical>.template.md
|
|
124
124
|
└── docs/
|
|
125
125
|
├── init/seed.md # this file
|
|
126
126
|
├── intake/ brd/ scout/ research/ specs/ rca/ security/ site/
|
|
@@ -140,13 +140,13 @@ Applies to every language. Mappings for TSX, Node, Python, Go, Rust ship inside
|
|
|
140
140
|
|
|
141
141
|
Each is an independent bash script that reads a JSON payload on stdin and emits a structured decision. Ordering within a `matcher` block matters only when one hook's decision should take precedence. The four lifecycle hooks (`memory_session_start`, `memory_stop`, `memory_pre_compact`, `harness_continuation`) are best-effort and never block; they maintain project memory, the cross-session resume snapshot, and the harness auto-continuation signal (`harness_continuation` reads `.claude/state/harness_state` on every Stop event and emits a `decision:block` directive when the harness has left `state: "continue"` AND the session-scoped marker `.claude/state/.harness_active` exists, so the next phase fires on the same turn; `memory_session_start` deletes that marker at every session boundary so yesterday's `continue` never ghost-resumes today).
|
|
142
142
|
|
|
143
|
-
The single input-boundary hook (`consent_gate_grant`, on `UserPromptSubmit`) runs **before** Claude is invoked on every user turn. When the user types one of the
|
|
143
|
+
The single input-boundary hook (`consent_gate_grant`, on `UserPromptSubmit`) runs **before** Claude is invoked on every user turn. When the user types one of the four consent-gate slash commands (`/approve-spec <slug|path>`, `/approve-swarm <slug>`, `/grant-commit [note]`, `/grant-push [note]`), this hook parses the prompt and writes a short-lived consent marker to `.claude/state/.<gate>_grant`. The PreToolUse approval guards (`spec_approval_guard`, `swarm_approval_guard`, `git_commit_guard`) read these markers as the structural source of consent: a Claude write to an approval token is allowed only when a fresh, slug-matched marker is on disk; the marker is single-use (deleted on the allowed write) and expires after `consent.gate_marker_ttl_seconds` (default 120). Slug derivation is centralized in `lib/common.sh → canonical_slug` (strip directory prefix + trailing `.md`) so the marker and the expected slug always agree — `docs/specs/foo.md`, `foo.md`, and `foo` all reduce to the bare slug `foo`. This is what makes Article IV's gates structurally un-invokable by Claude — Claude cannot reach the UserPromptSubmit code path, and the PreToolUse guards block Claude from writing the markers themselves.
|
|
144
144
|
|
|
145
145
|
| Hook | Event / matcher | Enforces |
|
|
146
146
|
|---|---|---|
|
|
147
147
|
| `setup_guard` | PreToolUse / Write\|Edit\|MultiEdit\|NotebookEdit | Advisory. When `configured: false`, emits a one-shot reminder (rate-limited to 10 minutes) that the baseline is in project-agnostic mode and `/init-project` hasn't run. Does not block writes — bypass is intentional. The user gets baseline-only behaviour (test/lint runners in guide mode, no stack-specific tailoring) until `/init-project` runs. |
|
|
148
148
|
| `destructive_cmd_guard` | PreToolUse / Bash | Hard-blocks catastrophic commands (`rm -rf /`, fork bombs, `dd of=/dev/sd*`, `mkfs`, `shutdown`). Asks on risky ones (`rm -rf <path>`, `git reset --hard`, `drop table`). Patterns sourced from `project.json → destructive`. |
|
|
149
|
-
| `git_commit_guard` | PreToolUse / Bash + Write\|Edit\|MultiEdit | Bash matcher: requires fresh
|
|
149
|
+
| `git_commit_guard` | PreToolUse / Bash + Write\|Edit\|MultiEdit | Bash matcher: enforces branch-aware policy. `git commit` on a protected branch (per `project.json → git.protected_branches` glob list; `null` = all branches protected) requires fresh `commit_consent` (`/grant-commit`, 5-min TTL); `git push` on a protected branch requires fresh `push_consent` (`/grant-push`, 5-min TTL); both proceed without consent on non-protected branches. `git.branch_pattern` regex (optional) gates commits on naming. Detached HEAD denies both. Hard-blocks remaining forbidden flags: `git commit --amend`, `--no-verify`, `--no-gpg-sign`, `git reset --hard`, `git clean -f`, `git checkout --`, `git branch -D`, `git config`, `git rebase -i`, `git add -A`, `git add .`. Write matcher: blocks Claude from writing `.claude/state/.commit_consent_grant` / `.push_consent_grant` (markers — only `consent_gate_grant` writes those) and gates writes to `.claude/state/commit_consent` / `push_consent` on a fresh marker. Implemented in `.claude/hooks/git_commit_guard.mjs` (Node ESM; JS-port pilot). |
|
|
150
150
|
| `env_guard` | PreToolUse / Write\|Edit\|MultiEdit\|NotebookEdit | Blocks writes to `.env*`. Allows obvious templates (`.env.example`, `.env.sample`). |
|
|
151
151
|
| `spec_approval_guard` | PreToolUse / Write\|Edit\|MultiEdit | Validates a fresh `.claude/state/.spec_approval_grant` marker (slug-matched, ≤ `consent.gate_marker_ttl_seconds`) before allowing Claude to write under `.claude/state/spec_approvals/`. Blocks Claude from writing the marker file itself. Blocks `Status: Approved` / `Approved: true` lines in spec markdown. |
|
|
152
152
|
| `swarm_approval_guard` | PreToolUse / Write\|Edit\|MultiEdit | Symmetric to `spec_approval_guard` for gate B: validates `.claude/state/.swarm_approval_grant` before allowing writes under `.claude/state/swarm_approvals/`. Blocks Claude from writing the marker. |
|
|
@@ -165,7 +165,7 @@ The single input-boundary hook (`consent_gate_grant`, on `UserPromptSubmit`) run
|
|
|
165
165
|
| `memory_stop` | Stop | At end of every assistant turn, reads the transcript, extracts memory candidates (touched source paths → landmarks; context7 queries → libraries), appends to `.claude/memory/_pending.md`, and refreshes `.claude/memory/_resume.md` for next session. Passive collector — never writes to canonical memory files. |
|
|
166
166
|
| `memory_pre_compact` | PreCompact (manual\|auto) | Fires before context compaction. Walks the still-intact transcript and writes `.claude/memory/_resume.md` so the next `SessionStart` (source: `compact`) can re-inject the snapshot. Best-effort; never blocks compaction. |
|
|
167
167
|
| `harness_continuation` | Stop | Auto-continues multi-phase workflows across non-gated boundaries. Reads `.claude/state/harness_state` (written by the harness skill on every tick) and `.claude/state/.harness_active` (session-scoped marker; created by the harness skill on `state: "continue"`, deleted on `yielded`/`done`, cleaned unconditionally by `memory_session_start.sh` on session boundary). Three-rung gate — all must pass to emit a decision: (1) `stop_hook_active` flag absent on payload; (2) `.harness_active` marker exists; (3) `harness_state.state` equals `"continue"`. When all pass, emits `{"decision":"block","reason":"…invoke Skill(harness)…"}` so the model resumes the harness on the same turn. Sanity rail: if the marker's slug content disagrees with `workflow.json → slug`, log one `WARN` line to `harness_continuation.log`; mismatch does not change the decision. Silent on any rung fail (`yielded`/`done`/missing marker/missing state/malformed). Treats every internal error as silence. Never writes consent markers; never bypasses Article IV gates. |
|
|
168
|
-
| `consent_gate_grant` | UserPromptSubmit | Runs **before** Claude is invoked on every user turn. Detects the
|
|
168
|
+
| `consent_gate_grant` | UserPromptSubmit | Runs **before** Claude is invoked on every user turn. Detects the four consent-gate slash commands (`/approve-spec <slug\|path>`, `/approve-swarm <slug>`, `/grant-commit [note]`, `/grant-push [note]`) at the start of the user's prompt and writes a short-lived consent marker (`.claude/state/.spec_approval_grant`, `.swarm_approval_grant`, `.commit_consent_grant`, or `.push_consent_grant`). Slugs are canonicalized through `canonicalSlug` (strip directory + trailing `.md`) so the marker matches whatever shape the approval guards derive from the approval filename. The marker is single-use and expires after `consent.gate_marker_ttl_seconds` (default 120). Because this hook fires outside Claude's tool boundary, Claude cannot reach this code path — the marker is structurally unforgeable by the model. Implemented in `.claude/hooks/consent_gate_grant.mjs` (Node ESM; JS-port pilot). |
|
|
169
169
|
|
|
170
170
|
All hooks source `.claude/hooks/lib/common.sh` for payload parsing, project-config reads, and decision emitters (`emit_allow`, `emit_block`, `emit_ask`, `emit_info`).
|
|
171
171
|
|
|
@@ -203,6 +203,7 @@ Each at `.claude/skills/<name>/SKILL.md`, frontmatter `name` + `description`, pl
|
|
|
203
203
|
- `integrate` — Phase 9. Full suite + `verify` re-adjudication.
|
|
204
204
|
- `document` — Phase 10. Orchestrator. Delegates technical reference to `documentation`, tutorials to `technical-tutorials`, and **all prose** to the `prose` skill (which applies `humanizer` mandatorily).
|
|
205
205
|
- `archive` — Phase 10.5. Moves `<slug>`-matched artifacts to `docs/archive/<YYYY-MM-DD>/<slug>/`. `workflow.json` is held back and archived by `/commit`.
|
|
206
|
+
- `memory-flush` — Phase 10.6. Curates `_pending.md` candidates with full workflow context (or fast-paths on empty pending while still running canonical Step 0 sweeps). Canonical memory writes ship in the same commit as the work that motivated them.
|
|
206
207
|
- `commit` — Phase 11. First step archives `workflow.json`; then stages named paths and commits.
|
|
207
208
|
|
|
208
209
|
**Phase workers (5)** — execute pre-decided recipes; each mandatorily invokes a sub-skill. Caller (a phase skill) provides explicit inputs; the worker executes without picking architecture, register, or scope:
|
|
@@ -228,13 +229,15 @@ Each at `.claude/skills/<name>/SKILL.md`, frontmatter `name` + `description`, pl
|
|
|
228
229
|
|
|
229
230
|
**Shared globals (7)** — skills the baseline *uses* heavily; vendored into `.claude/skills/` so they travel with the repo and have no external runtime dependency:
|
|
230
231
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
- `
|
|
234
|
-
- `
|
|
235
|
-
- `
|
|
236
|
-
- `
|
|
237
|
-
- `
|
|
232
|
+
Each vendored shared global ships with its own `LICENSE` + `NOTICE` alongside the skill, recording the upstream URL and any local changes:
|
|
233
|
+
|
|
234
|
+
- `claude-automation-recommender` — Apache 2.0, vendored from Anthropic's `claude-code-setup` plugin. Mandatory first step (§0); analyzes a target project and surfaces stack-specific tweaks for `/init-project`.
|
|
235
|
+
- `code-structure` — MANDATORY on every code-generation step. Written for this baseline (Friedbot Studio); the repo license applies. Language-agnostic three-layer model (Orchestration / Domain / Foundation). See §2.6.
|
|
236
|
+
- `humanizer` — MIT, vendored from [`blader/humanizer`](https://github.com/blader/humanizer). Strips AI-writing tells (em-dash overuse, rule of three, inflated symbolism, AI vocabulary, superficial -ing, filler, hedging). Invoked by `prose` on every draft.
|
|
237
|
+
- `documentation` — Apache 2.0, vendored from Anthropic's `claude-code-setup` plugin. Technical reference writing (API docs, architecture, runbooks). Delegate target from `/document`.
|
|
238
|
+
- `technical-tutorials` — MIT, vendored from [`jonathimer/devmarketing-skills`](https://github.com/jonathimer/devmarketing-skills). Step-by-step / quickstart / walkthrough. Delegate target from `/document`. Audience-context shape lives in this skill's `references/audience-context.md` (consolidated from the upstream `developer-audience-context` skill on 2026-04-28).
|
|
239
|
+
- `copywriting` — MIT, vendored from [`coreyhaines31/marketingskills`](https://github.com/coreyhaines31/marketingskills). Persuasive user-facing copy (landing, pricing, feature, hero, CTA). Invoked by `prose` when register is persuasive.
|
|
240
|
+
- `impeccable` — Apache 2.0, vendored from [`pbakaus/impeccable`](https://github.com/pbakaus/impeccable). Production-grade frontend interface design. Loads `PRODUCT.md` / `DESIGN.md`, picks register (brand vs. product), applies shared design laws (OKLCH color, typography rhythm, layout cadence, motion tied to physics, copy with specificity). Stays untouched per Article IX. Inside workflow phases, `design-ui` orchestrates `impeccable` (per Article X.2) — every UI design move is an `impeccable` subcommand invocation chosen and run from main context.
|
|
238
241
|
|
|
239
242
|
**Drift defender (1)**:
|
|
240
243
|
|
|
@@ -252,10 +255,11 @@ Files at `.claude/commands/<name>.md`. Commands differ from skills in exactly on
|
|
|
252
255
|
|---|---|
|
|
253
256
|
| `approve-spec` | Human approval of a spec draft. Accepts a bare slug, a filename, or a full path; canonicalizes via `lib/common.sh → canonical_slug` and writes `.claude/state/spec_approvals/<slug>.approval`. Only sanctioned path — `spec_approval_guard` blocks all other routes. |
|
|
254
257
|
| `approve-swarm` | Human approval of a swarm plan. Writes `.claude/state/swarm_approvals/<slug>.approval`. Required before `swarm-dispatch` runs. |
|
|
255
|
-
| `grant-commit` | Opens a 5-minute consent window for `git commit
|
|
258
|
+
| `grant-commit` | Opens a 5-minute consent window for `git commit` on a protected branch. Writes `.claude/state/commit_consent`. Enforced by `git_commit_guard`. |
|
|
259
|
+
| `grant-push` | Opens a 5-minute consent window for `git push` on a protected branch. Writes `.claude/state/push_consent`. Enforced by `git_commit_guard`. Not a workflow-phase gate — a runtime consent for the branch-aware policy (§11). |
|
|
256
260
|
| `init-project` | One-time bootstrap. Detects stack, proposes `.claude/project.json` (test cmd, lint cmd, TDD globs, destructive patterns, artifact required sections, swarm config). Flips `configured: true`. |
|
|
257
261
|
|
|
258
|
-
**Adding a
|
|
262
|
+
**Adding a sixth command requires answering yes to both:** "does a human need to press this?" and "is 'user-only via frontmatter flag' too weak a guarantee?" Otherwise make it a skill.
|
|
259
263
|
|
|
260
264
|
### §4.5 MCP servers (3)
|
|
261
265
|
|
|
@@ -273,6 +277,7 @@ Runtime-only; gitignore or keep out of commits per project policy.
|
|
|
273
277
|
|---|---|---|
|
|
274
278
|
| `workflow.json` | `/triage` | `track_guard`, every phase skill, `/harness` |
|
|
275
279
|
| `commit_consent` | `/grant-commit` | `git_commit_guard` |
|
|
280
|
+
| `push_consent` | `/grant-push` | `git_commit_guard` |
|
|
276
281
|
| `spec_approvals/<slug>.approval` | `/approve-spec` | `tdd`, `swarm-plan`, `/harness` |
|
|
277
282
|
| `swarm_approvals/<slug>.approval` | `/approve-swarm` | `swarm-dispatch`, `/harness` |
|
|
278
283
|
| `swarm/<slug>.json` | `swarm-plan` | `swarm-dispatch`, `swarm_merge.sh` |
|
|
@@ -315,6 +320,7 @@ Phases are fixed ordering; `/triage` picks the entry and may mark phases as exce
|
|
|
315
320
|
9 integrate
|
|
316
321
|
10 document
|
|
317
322
|
10.5 archive
|
|
323
|
+
10.6 memory-flush
|
|
318
324
|
11 /grant-commit — human consent gate C
|
|
319
325
|
11b commit
|
|
320
326
|
```
|
|
@@ -332,14 +338,15 @@ Phases are fixed ordering; `/triage` picks the entry and may mark phases as exce
|
|
|
332
338
|
|
|
333
339
|
## §6 — Consent model
|
|
334
340
|
|
|
335
|
-
**
|
|
341
|
+
**Four consent gates + one bootstrap gate.** All are slash commands, not skills. Commands live in `.claude/commands/`; Claude cannot invoke them via the Skill tool. The guarantee is structural (file location), not flag-based. Three of the four gates are workflow-phase gates (A: `/approve-spec`, B: `/approve-swarm`, C: `/grant-commit`); the fourth (`/grant-push`) is a Bash-time consent for the branch-aware push policy in §11.
|
|
336
342
|
|
|
337
343
|
| Gate | When it fires | Unlocks |
|
|
338
344
|
|---|---|---|
|
|
339
345
|
| `/init-project` | Once per repo, before any work | Flips `configured: true`; silences the `setup_guard` advisory and lets `test_runner` / `lint_runner` move out of guide mode |
|
|
340
346
|
| `/approve-spec <path>` | After `/spec` produces a draft | Writes approval token; downstream phases proceed |
|
|
341
347
|
| `/approve-swarm <slug>` | After `/swarm-plan` produces a plan | Writes approval token; `swarm-dispatch` may run |
|
|
342
|
-
| `/grant-commit` | Before `/commit` | Writes 5-min consent token; `git_commit_guard` allows next commit |
|
|
348
|
+
| `/grant-commit` | Before `/commit` | Writes 5-min consent token; `git_commit_guard` allows next commit on a protected branch |
|
|
349
|
+
| `/grant-push` | Before `git push` on a protected branch | Writes 5-min consent token; `git_commit_guard` allows next push on a protected branch (non-protected branches need no consent) |
|
|
343
350
|
|
|
344
351
|
Harness yields at each gate. User re-invokes `/harness` to resume.
|
|
345
352
|
|
|
@@ -461,7 +468,7 @@ Claude may run `git add <named paths>` and `git commit` only when the user has a
|
|
|
461
468
|
|
|
462
469
|
The following are forbidden unless the user names the exact operation in their current request:
|
|
463
470
|
|
|
464
|
-
- `git push` (
|
|
471
|
+
- `git push --force`, `--force-with-lease` (the bare `git push` is governed by the branch-aware policy below, not by this list).
|
|
465
472
|
- `git commit --amend` — always create a new commit.
|
|
466
473
|
- `--no-verify`, `--no-gpg-sign`, or any flag that skips hooks/signing.
|
|
467
474
|
- `git reset --hard`, `git clean -f`, `git checkout --`, `git branch -D`.
|
|
@@ -469,6 +476,13 @@ The following are forbidden unless the user names the exact operation in their c
|
|
|
469
476
|
- `git rebase -i`, `git add -i` (interactive).
|
|
470
477
|
- `git add -A`, `git add .` — name the paths to avoid sweeping in secrets or unrelated dirty files.
|
|
471
478
|
|
|
479
|
+
**Branch-aware consent policy.** `git_commit_guard` reads the current branch via `git rev-parse --abbrev-ref HEAD` on every `git commit` / `git push` invocation and routes per:
|
|
480
|
+
|
|
481
|
+
- `project.json → git.protected_branches` — glob list. `null` (default) means every branch is protected. Set e.g. `["main", "release/*"]` to limit consent enforcement.
|
|
482
|
+
- `project.json → git.branch_pattern` — regex, optional. When set, commits on off-pattern branches are denied with the pattern surfaced in the error.
|
|
483
|
+
|
|
484
|
+
On a **protected branch**, commit requires fresh `commit_consent` (`/grant-commit`), push requires fresh `push_consent` (`/grant-push`). On a non-protected branch, both proceed without consent. **Detached HEAD** (`git rev-parse` returns the literal `HEAD`) denies both — branch-aware policy needs a named branch.
|
|
485
|
+
|
|
472
486
|
`git_commit_guard` enforces these; bypassing requires editing the hook, which is itself a visible change.
|
|
473
487
|
|
|
474
488
|
---
|
|
@@ -525,8 +539,9 @@ Seed-level requirement: no stale workflow artifacts in the working tree after co
|
|
|
525
539
|
1. `/triage "<test request>"` → writes `workflow.json`.
|
|
526
540
|
2. Write a spec at `docs/specs/test.md` with all 6 diagrams → `spec_diagram_presence_guard` + `plantuml_syntax_guard` allow.
|
|
527
541
|
3. Write a spec missing a diagram → guard denies with named missing kinds.
|
|
528
|
-
4. Attempt `git commit` without `/grant-commit` → `git_commit_guard` denies.
|
|
529
|
-
5. Attempt `git push` →
|
|
542
|
+
4. Attempt `git commit` on a protected branch without `/grant-commit` → `git_commit_guard` denies.
|
|
543
|
+
5. Attempt `git push` on a protected branch without `/grant-push` → denied. Same `git push` on a non-protected branch (when `git.protected_branches` is set to e.g. `["main"]` and current branch is `feat/foo`) → allowed without consent.
|
|
544
|
+
6. Attempt `git commit` or `git push` while detached (`git checkout <sha>`) → denied with explicit "Detached HEAD" message.
|
|
530
545
|
|
|
531
546
|
---
|
|
532
547
|
|
|
@@ -576,9 +591,9 @@ Until `/init-project` runs, this section stays empty. Once populated, every fiel
|
|
|
576
591
|
|
|
577
592
|
## §17 — Skill provenance and the baseline manifest
|
|
578
593
|
|
|
579
|
-
|
|
594
|
+
A skill at `.claude/skills/<slug>/SKILL.md` is **baseline-owned** iff its YAML frontmatter declares `owner: baseline`. Baseline-owned skills are those that ship with the baseline; every other skill on disk — those without an `owner:` field, or those declaring `owner: user` — is user/third-party and out-of-scope of baseline audit checks. Absence-of-`owner` is the deliberate default so a project that already has its own skills can install the baseline without annotating any of those files. The build script `scripts/build-manifest.mjs` reads each `owner:` value at release time and emits the canonical baseline-skill set into `obj/template/manifest.json` under `owners.skills` (a JSON object mapping slug → `"baseline"`). The CLI mirrors this manifest verbatim to `<target>/.claude/.baseline-manifest.json` on `freshInstall`/`forceInstall`/`merge`.
|
|
580
595
|
|
|
581
|
-
The audit at `.claude/skills/audit-baseline/audit.sh` consumes `manifest.owners.skills` as the canonical baseline-skill enumeration (replacing the previous hard-coded `EXPECTED_SKILLS` set). For every baseline-owned skill, the audit re-derives sha256 hashes from `manifest.files` and compares against on-disk content; a mismatch is reported as `hash mismatch at <path>` against the named slug. A baseline skill present in the manifest but absent from disk is reported as `baseline skill missing`. A SKILL.md
|
|
596
|
+
The audit at `.claude/skills/audit-baseline/audit.sh` consumes `manifest.owners.skills` as the canonical baseline-skill enumeration (replacing the previous hard-coded `EXPECTED_SKILLS` set). For every baseline-owned skill, the audit re-derives sha256 hashes from `manifest.files` and compares against on-disk content; a mismatch is reported as `hash mismatch at <path>` against the named slug. A baseline skill present in the manifest but absent from disk is reported as `baseline skill missing`. A SKILL.md whose `owner:` field is present but carries an invalid value (anything other than `baseline` or `user`) is reported as `invalid owner=<value>`. SKILL.md files without an `owner:` field are treated as user/third-party and silently skipped — they are excluded from the baseline count, the names-match check, and the hash-drift check, so installing the baseline into a project that already has its own skills never breaks the audit.
|
|
582
597
|
|
|
583
598
|
The audit also verifies constitutional citation: CLAUDE.md SHALL contain the literal string "Article XI" and a reference to the manifest, and `docs/init/seed.md` SHALL contain "§17" and a manifest reference. Missing citations trigger FAIL with `CLAUDE.md missing Article XI citation` or `seed.md missing §17 citation`.
|
|
584
599
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"manifest_version": 2,
|
|
3
|
-
"generated_at": "2026-05-
|
|
3
|
+
"generated_at": "2026-05-17T19:24:12.190Z",
|
|
4
4
|
"files": {
|
|
5
5
|
".claude/agents/swarm-worker.md": "1735a220f268c9765cb22e0567b728803f2edd7776cbde51dd017a9f062ae41f",
|
|
6
6
|
".claude/bin/LICENSE": "a8dcf2775ab71a58c7d4cc935e3a8e9974e87bb7d6082ee25ef52f8140be8e07",
|
|
@@ -8,51 +8,64 @@
|
|
|
8
8
|
".claude/commands/approve-spec.md": "aef2b6b0d71692bba71ae691ff1a4405557806c8ccd64107bc197238d6ec359f",
|
|
9
9
|
".claude/commands/approve-swarm.md": "77467e3962792d8cdc2db7947e4a7c16481d5d27bf378f6dc0e415935a02680d",
|
|
10
10
|
".claude/commands/grant-commit.md": "92409e2ff76bb3db4707d6deffab35877f06ecd38af2b12ca103eb7333eb7b92",
|
|
11
|
-
".claude/commands/
|
|
11
|
+
".claude/commands/grant-push.md": "770e8bc3bf1097ecdf92b86dcf6e0cf7ef3a3251b73bf35cc0385f2e2d552319",
|
|
12
|
+
".claude/commands/init-project.md": "222f02f65ea639c904c43114642f11422a56d8dab8c1c2786b5876e17d3b0155",
|
|
12
13
|
".claude/hooks/artifact_template_guard.sh": "1592700602c98c8cb733ae3ce9638bf7c3414c5e5ef4fd566528e47765be3f39",
|
|
13
|
-
".claude/hooks/consent_gate_grant.
|
|
14
|
+
".claude/hooks/consent_gate_grant.mjs": "308704139bf6f090fa11fdb0668810351c70dfb102eb06138a6f4031efed3b5b",
|
|
14
15
|
".claude/hooks/destructive_cmd_guard.sh": "ec62ffeef60e07332766ecb93b9121c59e5f8aa695ba3d2def26072d9d18f63c",
|
|
15
16
|
".claude/hooks/env_guard.sh": "76ffc98fa9a2709526715132981699e46043183e2b1d043a05744a40384d1361",
|
|
16
|
-
".claude/hooks/git_commit_guard.
|
|
17
|
-
".claude/hooks/harness_continuation.sh": "
|
|
18
|
-
".claude/hooks/lib/common.
|
|
17
|
+
".claude/hooks/git_commit_guard.mjs": "95449912110be43635c8130f06ff87d851fc0ebec89fda17b3290671710dfbf6",
|
|
18
|
+
".claude/hooks/harness_continuation.sh": "6ceca513b9f63cae021e93c0cb1e444627d94ed0aadf38d4b3da1f5a440b2204",
|
|
19
|
+
".claude/hooks/lib/common.mjs": "d3ad8d607d161bf11f1814f13aeb764a23de2565fcdc3ef39c85a1cad191a51f",
|
|
20
|
+
".claude/hooks/lib/common.sh": "c6d4501a1480ea34aafcd7c4b4a53cadcf75bff8def2d5d5370c098574382748",
|
|
19
21
|
".claude/hooks/lib/resume_writer.py": "9592fb72de966cb797e51322fbf0160a6784de34934bd6587768689a34bd03b5",
|
|
20
22
|
".claude/hooks/lint_runner.sh": "267e08dbd9af246c0af124c32ad4aeac48dfe20ac926244ed89855deb7ff7940",
|
|
21
23
|
".claude/hooks/memory_pre_compact.sh": "930a7d1e02a1214037ff8c5ab47b4fc4a76193536f75a1fd6f323ed8dc46292e",
|
|
22
|
-
".claude/hooks/memory_session_start.sh": "
|
|
23
|
-
".claude/hooks/memory_stop.sh": "
|
|
24
|
+
".claude/hooks/memory_session_start.sh": "76625781d6cec1dc0d069926adad65c30010b07b1c0e24a2ac441c2981d2ecb5",
|
|
25
|
+
".claude/hooks/memory_stop.sh": "0e9473706d670830004b180e0cd25a0956149df2960ac0bdb35987c24b995c4a",
|
|
24
26
|
".claude/hooks/plantuml_syntax_guard.sh": "92e4e27377cd3d8b7036f4fae76c3be4a486b419bce9bfbcb8fef741e55138b5",
|
|
25
27
|
".claude/hooks/process_lifecycle_guard.sh": "1342df1cb0ca0d5ce54f254651092c4054903003070b328e9d2aca62e4d1a9a9",
|
|
26
28
|
".claude/hooks/setup_guard.sh": "119675c2b3b00414016958a9eebd6884578822f46695d2e636003e4ba0b7098b",
|
|
27
|
-
".claude/hooks/spec_approval_guard.sh": "
|
|
29
|
+
".claude/hooks/spec_approval_guard.sh": "062f80c36deac29217fb5add50aadb807ce9774f3a9703da9095237c2ce74a1c",
|
|
28
30
|
".claude/hooks/spec_design_calls_guard.sh": "6fd5d508c40beed47973ee783a8c7a43683f6e34e8a41ca010f0058bf0e37f11",
|
|
29
31
|
".claude/hooks/spec_diagram_presence_guard.sh": "786d720412c5ff9e3706961f0ffa1235f8c67f87c90e6917b041b916aabe6a12",
|
|
30
|
-
".claude/hooks/swarm_approval_guard.sh": "
|
|
32
|
+
".claude/hooks/swarm_approval_guard.sh": "537869ae8143ccddc90803fd182ed8d4e00d5709710343c86174f2d3f502b98a",
|
|
31
33
|
".claude/hooks/swarm_boundary_guard.sh": "b8e4278ada1e187acc4ceefe4af3c4a083510a6dbc44c762f6977fe271f37b9e",
|
|
32
34
|
".claude/hooks/tdd_order_guard.sh": "b2325f53a9ecaea9e614f3f4888d02e8540a76dfba359ab86b9f82d297eccfcf",
|
|
33
35
|
".claude/hooks/test_runner.sh": "acabe2ec8096f2e54fc321f7561c4d3232c67e06b27a5c8b8f135c0fbf47a3f5",
|
|
34
|
-
".claude/hooks/tests/fixtures/ac008_byte_equal_reference.txt": "
|
|
35
|
-
".claude/hooks/tests/
|
|
36
|
+
".claude/hooks/tests/fixtures/ac008_byte_equal_reference.txt": "da3150ef2419899b2ff2df65acb7886f508e9136080bb72addf9ad9de892340f",
|
|
37
|
+
".claude/hooks/tests/fixtures/memory_stop_landmark_baseline.txt": "bf975e5d50c9ebfdce2f0ed49754213fe82dbac3d2c3335e74f696f34314c5a7",
|
|
38
|
+
".claude/hooks/tests/fixtures/regenerate-ac008.sh": "80b55fe7bdec492aefb9eaf32868c871d8da34a3cf31225ea51cf2bc12857bc0",
|
|
39
|
+
".claude/hooks/tests/memory_session_start_test.sh": "858eead3865aab364f2307a5ef2b74d772ca8c35ce2bbcbee96c762559f98f93",
|
|
40
|
+
".claude/hooks/tests/memory_stop_intent_test.sh": "9b32b906648bbdc2bb8cb51cd8bb609e6093f31bb45f99c9292cfc6105b6faae",
|
|
41
|
+
".claude/hooks/tests/regenerate_ac008_test.sh": "977ab5e3a0a43419bcd4ec9cbd5fbc54a107667d4acee5ac8c317ee6506e6b9f",
|
|
36
42
|
".claude/hooks/track_guard.sh": "cd79823bf4c24a35133ee6fc072e8c39bdfbc49042c698dcbeb2c36986f15c5f",
|
|
37
43
|
".claude/hooks/verify_pass_guard.sh": "a3aba3821ff7318499012032b82279ab6d04c1287e935d3a8b1bbf38b905c79f",
|
|
38
|
-
".claude/memory/README.md": "
|
|
44
|
+
".claude/memory/README.md": "af088415c3430eab6353433ca9ad8c318324965ac0b9e5550adacebbf6b91503",
|
|
39
45
|
".claude/memory/_pending.md": "ae6407956aadd998c17ad5ad7150dbb21ccf49cc3375efe25b2d2ffb61c0a92a",
|
|
40
46
|
".claude/memory/_resume.md": "7ef4da663edc2ea35d19167f776e94b3f925072e9d8388841c42c5c6b81fc2f5",
|
|
47
|
+
".claude/memory/backlog.md": "4e124b7ecee5aa0918fd6d9a3bb232a68c7feff6fcf916b8562ed6513715db71",
|
|
41
48
|
".claude/memory/conventions.md": "3f3c6baedde55483acc75da4eb3f6e6b6b59ecba6e9b6334f0181a6dccc33e1e",
|
|
42
49
|
".claude/memory/decisions.md": "384984c8b67e2949f19c510b3c4c0d502dde9012063ee4c0e6dfb5fec3fb32af",
|
|
43
50
|
".claude/memory/landmarks.md": "e79626511e304654658e44e71c56f9316836481c6a4a0f0a0a2c1277c84143aa",
|
|
44
51
|
".claude/memory/landmines.md": "9df9b39bbcb91623f21caa506f69a71be888e2f728f93de29e5ffab5f6e5f923",
|
|
45
52
|
".claude/memory/libraries.md": "0ed3f69945c54825908143ca7c504a9b92529eddce63df8c70a9309293d4644a",
|
|
46
53
|
".claude/memory/pending-questions.md": "4b1d8be633b5f05eff66550b8fc98d6482bdf89536f21d6b975a1d8570b484b9",
|
|
47
|
-
".claude/project.json": "
|
|
48
|
-
".claude/settings.json": "
|
|
54
|
+
".claude/project.json": "a81f9c1341a15831fe8dd558e376dfe38d5fd938aac6291a4c59529637a8d2c7",
|
|
55
|
+
".claude/settings.json": "feb7d2c004b6c12cef6410d54db8ad0abc818b2aa16b1942cfdb72808c21b30d",
|
|
49
56
|
".claude/skills/archive/SKILL.md": "5174e8b72ab1e830912c231052d1e535023d58f0808434fe1d4abce305b80318",
|
|
50
57
|
".claude/skills/archive/archive.sh": "29f5b3c8870d0665ce624c6d1b5770f691f1d19f82a201767d5685fc3b0a0b58",
|
|
51
58
|
".claude/skills/audit-baseline/SKILL.md": "86e9955a99ade89074571320b2b9b0780bc033d201968f62edcca35d9e25f7cb",
|
|
52
|
-
".claude/skills/audit-baseline/audit.sh": "
|
|
59
|
+
".claude/skills/audit-baseline/audit.sh": "8b8a7db4db2aba0e0dd9948e4472feabe568e06a5f4e752c10dcd3da655bedf3",
|
|
60
|
+
".claude/skills/audit-baseline/tests/fixtures/_pending_opener_only.md": "9c64d7ef0b3be48b3e87acd89f9ac638db956f2c7cc5adf569d9d97d16f18163",
|
|
61
|
+
".claude/skills/audit-baseline/tests/fixtures/preamble_full_empty_body.md": "b757223c9b4954882b7f4ac828de7d83a105f74ba0cdf0951fbbe19c07ae892d",
|
|
62
|
+
".claude/skills/audit-baseline/tests/fixtures/preamble_full_with_entries.md": "9fcd049b006a7474d182a04420df6b3af08e3b6777a2ec5b4031d661ba2f4c82",
|
|
63
|
+
".claude/skills/audit-baseline/tests/fixtures/preamble_no_opener.md": "ef189e0e9997598874b2e26ca9e626311cc7cb99d9460ac9ca36773fff42522e",
|
|
64
|
+
".claude/skills/audit-baseline/tests/fixtures/preamble_opener_only.md": "d5042563a9f2ae9aaf4a5a75ed3d8af3d63d2ae0a451fed67ffb7ee6b0463239",
|
|
65
|
+
".claude/skills/audit-baseline/tests/preamble_check_test.sh": "73239378e51528c37f7843ff540ddfed2cd0ee1b8259589bc7cdaefd71424d95",
|
|
53
66
|
".claude/skills/brd/SKILL.md": "260e5d18396de21b6842ad0bc5fe74b0e124f3c2e2a4ac2867eeb543c7c2c0a3",
|
|
54
67
|
".claude/skills/brd/template.md": "be4095b4bed70fcebc821ad92b0217db4fee1afb9a341a9e704d2c1869ec6f43",
|
|
55
|
-
".claude/skills/chore/SKILL.md": "
|
|
68
|
+
".claude/skills/chore/SKILL.md": "3479c4ef4c7706928b54ed89678c3526c790e2aeb629674bd60e5a9e4b90d80d",
|
|
56
69
|
".claude/skills/claude-automation-recommender/LICENSE": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30",
|
|
57
70
|
".claude/skills/claude-automation-recommender/NOTICE": "2076093d5af61a10b585562e3b40fd76ce178c56e5eebde93efdc08b3c6bb81a",
|
|
58
71
|
".claude/skills/claude-automation-recommender/SKILL.md": "3e151ae30a9e364175a1d2d9914950cf8e766f1d021d3a4d26996052b3b6e5ab",
|
|
@@ -62,22 +75,46 @@
|
|
|
62
75
|
".claude/skills/claude-automation-recommender/references/skills-reference.md": "b4b57d953526a07146d5757ca5332034b9b4b4eeba839e4bb08111398c94556f",
|
|
63
76
|
".claude/skills/claude-automation-recommender/references/subagent-templates.md": "7f9a107d8619ff96fea07d5a17da31b269cec0ee343e5a9ff643c0d6cb4ba944",
|
|
64
77
|
".claude/skills/code-structure/SKILL.md": "4fa79beb83f9171e973cd2373af12f007aeaf95d156edf3a8e7cf3e9c2c22ace",
|
|
65
|
-
".claude/skills/commit/SKILL.md": "
|
|
66
|
-
".claude/skills/copywriting/
|
|
78
|
+
".claude/skills/commit/SKILL.md": "27efe44a50096be2a00e6ee2e7e4d7b158b3f0e8ed3bf18d65d5f03c02d0f8d1",
|
|
79
|
+
".claude/skills/copywriting/LICENSE": "3d015bf779e8f6f4b9366e0862c0d560aa60979bbe8d90426cede05528dc5390",
|
|
80
|
+
".claude/skills/copywriting/NOTICE": "ffd65b16660e4e9cbf42c5ff9bdf67b482815ebedfb515bedb65c6eb54930a15",
|
|
81
|
+
".claude/skills/copywriting/SKILL.md": "4631aae3a65204a1dac89fbe7606481b867b30ae3f64482d337c1e6bd5b4c902",
|
|
67
82
|
".claude/skills/copywriting/evals/evals.json": "bb2958b15648d180d04b676a42a22b7e2317c8c3314a71a6b56612164f7550c5",
|
|
68
83
|
".claude/skills/copywriting/references/ai-writing-detection.md": "4a4bf54c70b8b81d851f6c65ca69f83e3388d8d6970f6eab131cbf4287f0f860",
|
|
69
84
|
".claude/skills/copywriting/references/copy-frameworks.md": "f387b6ed4b510efa9f0d3c459f4898971c8b0176e8c34185040cb264eca50186",
|
|
70
85
|
".claude/skills/copywriting/references/natural-transitions.md": "4ff23f8943af2f65b072f26f1c53ce55f19cc26d7be211c11cae8e34b43e859f",
|
|
71
|
-
".claude/skills/design-ui/SKILL.md": "
|
|
72
|
-
".claude/skills/design-ui/references/design-vs-development.md": "
|
|
86
|
+
".claude/skills/design-ui/SKILL.md": "d7b1b95dc3ea1cac0f6bfd9b001b251fec3ec1ddc3b30ee7e7e3dfad5a669fb8",
|
|
87
|
+
".claude/skills/design-ui/references/design-vs-development.md": "7506f0f79e5edb0c12fcea327625f1716db0d2229f020e2a2fc74d88392ff54f",
|
|
73
88
|
".claude/skills/design-ui/references/intent-table.md": "56237061047a80dd242c3f0753e7d8c416a58272a9d4cb7d05f7ecc368df6674",
|
|
74
|
-
".claude/skills/design-ui/references/orchestration.md": "
|
|
75
|
-
".claude/skills/design-ui/references/state-machine.md": "
|
|
89
|
+
".claude/skills/design-ui/references/orchestration.md": "a3bb05a804427f00f857d2e23524cc644041ba49ef67bc05c60a673f9dbaa928",
|
|
90
|
+
".claude/skills/design-ui/references/state-machine.md": "4d31ecdbca0ba114bdf83f6575724467ce3b260479160a8c8791c2eede8fe27f",
|
|
76
91
|
".claude/skills/document/SKILL.md": "7345488fe50923c273dfdf3277ec7251fee9184bc7de1a12192255b5ad183fda",
|
|
92
|
+
".claude/skills/documentation/LICENSE": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30",
|
|
93
|
+
".claude/skills/documentation/NOTICE": "c201f68939a610c948a4d0e6bebbcb8f8df370cfe41ceb6e5861c20ab4044d06",
|
|
77
94
|
".claude/skills/documentation/SKILL.md": "456160c1a3398cfece91b6696d0c7f1fcb1196ea5e101acb9a0e3050f2462a5d",
|
|
78
|
-
".claude/skills/
|
|
95
|
+
".claude/skills/google-analytics/SKILL.md": "f5d8c52c103e4e1bdbb6bfdda962aad198064ced701c20df753d77ba4603547c",
|
|
96
|
+
".claude/skills/google-analytics/references/audiences.md": "cdae62b0f40e82a60f96a6bd0e77798c6118beaebe812961e8c9d4c3242b227f",
|
|
97
|
+
".claude/skills/google-analytics/references/bigquery.md": "fadc3efdd200a0bc43df4b698d46bc93e82111d8553b363d1e49ceb15bcdffce",
|
|
98
|
+
".claude/skills/google-analytics/references/custom-dimensions.md": "ac9e88c69fd8eb2a0bf1ae8f3daac42c6d92caa338ce2fa77a50bf2fe947dbc4",
|
|
99
|
+
".claude/skills/google-analytics/references/custom-events.md": "442ce8c1e7d89cb2206a85b02b287748e3e226d67cab571bc6f2a3ea520bc434",
|
|
100
|
+
".claude/skills/google-analytics/references/data-management.md": "1f9e80e0855937dc082d63535188fc1e7547273e626d0a3ef03c0487b42045bb",
|
|
101
|
+
".claude/skills/google-analytics/references/debugview.md": "f2b050db37b7927de99b0196deb7cb94d8ecb1a6668c9e08bec4f57816646e90",
|
|
102
|
+
".claude/skills/google-analytics/references/events-fundamentals.md": "acdeb349be2f468ba634d686691aeda0ce932db93b4872b9cd35685dcd3f31cf",
|
|
103
|
+
".claude/skills/google-analytics/references/gtag.md": "bef0556071bc645656d0634c26c3bad20d39517cb14689bb11e9d9bedf4f6ab8",
|
|
104
|
+
".claude/skills/google-analytics/references/gtm-integration.md": "3c95c7b64fbbd688907cd558c3c4d265b99c7178284b97e376334d802d11c860",
|
|
105
|
+
".claude/skills/google-analytics/references/measurement-protocol.md": "a5b644a5ca586173e399c229a47aad571991389232320a0f9e6baf1d4be619fb",
|
|
106
|
+
".claude/skills/google-analytics/references/privacy.md": "09e2db4ce4d990f4f1ff51c0e3bca08a364cba711f83f48103f69f9db427fa18",
|
|
107
|
+
".claude/skills/google-analytics/references/recommended-events.md": "0dccd2084060bfb3fd28476b9c0c9a6e2b8f51ce57ecf4fc32d7f82a8964b1b4",
|
|
108
|
+
".claude/skills/google-analytics/references/reporting.md": "37cb7cfd1dd547e86a41664ffe13893ef138194a2288d1a2c43c9195e8ec609f",
|
|
109
|
+
".claude/skills/google-analytics/references/setup.md": "26743b72341a5658e73c1f070b924de0f11b1681af06164cb13c19f2047a1087",
|
|
110
|
+
".claude/skills/google-analytics/references/user-tracking.md": "5a945df2a575291c6b35d24830b497915c82a843a93ee133577f1deda93f6d75",
|
|
111
|
+
".claude/skills/harness/SKILL.md": "84c4498e51b9e1c098ddaa99e7b150ab015b8e5c341a2e57300dbafe812acf4d",
|
|
112
|
+
".claude/skills/humanizer/LICENSE": "5dd2bb7cb6b254edd93a87718efbfef8b81c8ef90e3f9180f06723683d7733a3",
|
|
113
|
+
".claude/skills/humanizer/NOTICE": "5bdb69381ab078e7fbb5fb910f10253baa6fe9dabb88143c6f613959e131cbb3",
|
|
79
114
|
".claude/skills/humanizer/SKILL.md": "398beef0cabe34df435972a13fb9ef21be74d942f93321b220a5dd393d554e40",
|
|
80
115
|
".claude/skills/humanizer/references/ai-writing-detection.md": "e896c1b31f7af57b8cda81df6ded6e9d7e9ab742a0f5fdfc73f88a6be2e78f2b",
|
|
116
|
+
".claude/skills/impeccable/LICENSE": "cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30",
|
|
117
|
+
".claude/skills/impeccable/NOTICE": "635634b6132772183c1a9ca22035d1d1a15ab17fd70e49fa812f9205bce94093",
|
|
81
118
|
".claude/skills/impeccable/PROJECT_NOTES.md": "dfa989f50bc6d2a164adb6b272fcb15820fef1659fc710c2b8c58878275faae2",
|
|
82
119
|
".claude/skills/impeccable/SKILL.md": "37ad04b8f9b41d11618f294374d9b757b70e89f33fcbceecf190794143d682e4",
|
|
83
120
|
".claude/skills/impeccable/agents/openai.yaml": "cbd8bd68fa00935dd0f179adb169252629cf7ee443ea9dc7db77e7ef2cf77446",
|
|
@@ -135,9 +172,14 @@
|
|
|
135
172
|
".claude/skills/intake/SKILL.md": "7ad00f23ee28737dccef9c71ae477a54edad34a09f50b7774a34ae11e2ca016b",
|
|
136
173
|
".claude/skills/intake/template.md": "49262d5dd9c8b00c54822af5106671c84dff5d662285c41a2377a8b30d353661",
|
|
137
174
|
".claude/skills/integrate/SKILL.md": "31c54bdd0a1ea24efc078023842bd05c4db3c76d73718788dcc5fa4daf8ec771",
|
|
138
|
-
".claude/skills/memory-flush/SKILL.md": "
|
|
139
|
-
".claude/skills/memory-flush/sweep.py": "
|
|
140
|
-
".claude/skills/memory-flush/tests/run.sh": "
|
|
175
|
+
".claude/skills/memory-flush/SKILL.md": "825f01fe6aff5d7faeaa654df4e371cb1f76857348f28e65addd4d37e60ff726",
|
|
176
|
+
".claude/skills/memory-flush/sweep.py": "f04956bd98c8332feb77cd33a480d948c3b001813353fcf985e7bab8ddfda9d4",
|
|
177
|
+
".claude/skills/memory-flush/tests/run.sh": "5eec4486cfda45d2ce5987d6286bf61b96f816ebdd9041bc9ba0207cf00abd4b",
|
|
178
|
+
".claude/skills/optimize-seo/SKILL.md": "b389dc604346220d5a0a59c8f41c058c192c58a35bbff831fbc4c7f9e8c1b386",
|
|
179
|
+
".claude/skills/optimize-seo/scripts/pagespeed.mjs": "8bef62078833139f9175c175339d1fc0eb635a5eeaa2a3100543928ef91869e4",
|
|
180
|
+
".claude/skills/pagespeed-insights/LICENSE.md": "10ee2ded8c2ae373a65aacfa51f2bf540d5f20d418fc7a5595a5ccb06cde2738",
|
|
181
|
+
".claude/skills/pagespeed-insights/SKILL.md": "ab53af083929fbb28af0ad2c9ee1fcc51dec63c642ebc237c475b3ea9bde7c59",
|
|
182
|
+
".claude/skills/pagespeed-insights/reference.md": "afa03220b772ea8d6393f7366bbd6d90200c0b56585ccb2bb714e622af07345f",
|
|
141
183
|
".claude/skills/prose/SKILL.md": "7cfc7d4fd34d7256367eedf17c5f5b5cdb67baec72033f905dcfb715366a1849",
|
|
142
184
|
".claude/skills/rca/SKILL.md": "e5d1285df6d627052cfd62c3c8900bbd847ae92b37d245e8d6c2cc34c7fc32c5",
|
|
143
185
|
".claude/skills/rca/template.md": "8466f5737a0aeb88bcb73d4d4065293e2ff59f0c0e19de4082598d4e920caeb9",
|
|
@@ -158,17 +200,22 @@
|
|
|
158
200
|
".claude/skills/swarm-dispatch/swarm_merge.sh": "e1ab58c6d990665325d7749a769afbda1232b99fc8255215891fdd0c99a483e6",
|
|
159
201
|
".claude/skills/swarm-plan/SKILL.md": "6e530d5b67151ad1a4d310a966fbf4e742cc077a34c931350603a05e26fb6e88",
|
|
160
202
|
".claude/skills/swarm-plan/validate.sh": "b97b0063ed6f98f6e653b52db760c93bebca0138f3eeebb004a7ee9f7242bf02",
|
|
161
|
-
".claude/skills/tdd/SKILL.md": "
|
|
162
|
-
".claude/skills/
|
|
203
|
+
".claude/skills/tdd/SKILL.md": "284a2f3737f3f25242affbb8bc04c03a48e1c151cbaa06198820184f213a4a36",
|
|
204
|
+
".claude/skills/tdd/drift_check.py": "8d0070eb48d97b79031d40618390dc1d8bb55d9aaa1874845ba3424a67b31066",
|
|
205
|
+
".claude/skills/tdd/tests/drift_check_test.sh": "db08058ce9a30dc3df32dd4d2aa9ec4037316f49a85f11edbc13ba21f3107efd",
|
|
206
|
+
".claude/skills/tdd/tests/run.sh": "ef81eb08a495c45ed43c7cc0683fa741bd8a79f8f4bce2092120b8d558969d45",
|
|
207
|
+
".claude/skills/technical-tutorials/LICENSE": "8b834880d2992ef265e235ed561dbd35636309e42c916a4d867418188a27ad97",
|
|
208
|
+
".claude/skills/technical-tutorials/NOTICE": "82e551a1e6758704b7566c1a0f23ce29c58bd0046de1f32dedbcddfc469eb1ca",
|
|
209
|
+
".claude/skills/technical-tutorials/SKILL.md": "3eabf2bcf02d21612cc7f00c878f29b702dfd2c7ec298aee0c90e2496964c691",
|
|
163
210
|
".claude/skills/technical-tutorials/references/audience-context-README.md": "d0470e06463cb33980b6fd91a5f0ebec268e3b63481752988fc6378c60a00fd8",
|
|
164
211
|
".claude/skills/technical-tutorials/references/audience-context.md": "7e00189e72d7a87a0cf59f8302aa4adad26222d3bbd14ddb498515f137a32775",
|
|
165
212
|
".claude/skills/technical-tutorials/references/audience-example.md": "610f559f691de5169f672e8f69b72fd44790e5e3f894cebb7e644c3331db419c",
|
|
166
213
|
".claude/skills/technical-tutorials/references/audience-template.md": "9e8da0e05544df3961d75fb3a7b1d6374b6a1c129ac2fc9862dc111b5a75e433",
|
|
167
|
-
".claude/skills/triage/SKILL.md": "
|
|
214
|
+
".claude/skills/triage/SKILL.md": "9416c9de58e3dbf8c3bcac4d6e258c9a8e9c38083bd75a35937eaae16b82b0db",
|
|
168
215
|
".claude/skills/verify/SKILL.md": "fcddba67cf7f3623fc8f8ae142303b16b9db0c9fc1652bc920e16c56fe4c7864",
|
|
169
216
|
".mcp.json": "8ebb7966045486187bbdf9bac643e690c4fbc7a9a70a8345e3665ba72fa19b96",
|
|
170
|
-
"CLAUDE.md": "
|
|
171
|
-
"docs/init/seed.md": "
|
|
217
|
+
"CLAUDE.md": "27d7cd145d1ba2a1b9dcc006e0ff3faa1af6c1a92f7d935c4a7eafa87accefc4",
|
|
218
|
+
"docs/init/seed.md": "437a05e448f639f5214edda0dc155d9e2f7b5e88b2866333e6639e75ff8822ab"
|
|
172
219
|
},
|
|
173
220
|
"owners": {
|
|
174
221
|
"skills": {
|
|
@@ -210,5 +257,5 @@
|
|
|
210
257
|
"verify": "baseline"
|
|
211
258
|
}
|
|
212
259
|
},
|
|
213
|
-
"build_id": "gha-
|
|
260
|
+
"build_id": "gha-26000362681"
|
|
214
261
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@friedbotstudio/create-baseline",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Zero-dependency Node CLI scaffolder that materializes the Claude Code baseline (hooks, skills, commands, MCP servers, governance docs) into a target project. Run via `npx @friedbotstudio/create-baseline <target>`.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|