10 Commits
Author SHA1 Message Date
Bastien Chanot 1cb77c3f57 Merge release/1.3.0 into main 2026-07-20 19:40:23 +02:00
Bastien Chanot 711eacd900 chore(release): 1.3.0 — version.txt + CHANGELOG 2026-07-20 19:39:35 +02:00
Bastien Chanot ce5b7fb3f4 Merge chore/readme-seo-env into develop 2026-07-20 19:25:07 +02:00
Bastien Chanot 10589d484b docs: README polish — real clone URL + make targets, magic example simplified, SEO env vars section
- Fresh-install block: clone URL → github.com/bchanot/claude, bash
  install.sh/doctor.sh → make install / make doctor (user pass)
- magic MCP example: placeholder key line instead of WRONG/RIGHT contrast
- new subsection: SEO data layer needs GOOGLE_OAUTH_CLIENT_ID/SECRET +
  CRUX_API_KEY in ~/.claude/.env (GCP steps, make seo-connect, graceful
  degradation) — mirrors .env.example
2026-07-20 19:25:07 +02:00
Bastien Chanot 3c243ece97 Merge release/1.2.1 into main 2026-07-20 14:34:09 +02:00
Bastien Chanot 51b65727e7 Merge release/1.2.0 into main 2026-07-20 14:07:28 +02:00
Bastien Chanot 2f8dc6be1a Merge release/1.1.0 into main 2026-07-16 13:57:07 +02:00
Bastien Chanot dc4f78b1f0 Merge release/1.0.0 into main 2026-07-16 13:22:29 +02:00
Bastien Chanot 709facfb52 Merge release/4.0.0 into main 2026-06-30 15:33:22 +02:00
Bastien Chanot d3d72fd3ca Merge hotfix/gstack-ignore-gitmodules into main 2026-06-29 13:57:12 +02:00
3 changed files with 35 additions and 9 deletions
+8
View File
@@ -6,9 +6,17 @@ Format follows [Keep a Changelog](https://keepachangelog.com/).
## [Unreleased] ## [Unreleased]
## [1.3.0] — 2026-07-20
### Added ### Added
- **Profile switches now toggle external packs and MCPs both ways (BDR-079)** — `profile.sh set` was asymmetric: it enabled what a profile listed (including gstack skills on demand when the whole pack is off, and the `magic` MCP) but never disabled the managed leftovers, so `set backend` after design work kept emil-design-eng / frontend-design / design-motion-principles / impeccable active and magic registered. `set` now trims managed externals (`MANAGED_EXTERNALS`) and managed MCPs (`MANAGED_MCPS`, delegated to `toggle-external.sh`) not listed in the profile — same allowlist doctrine as `MANAGED_PLUGINS`, nothing outside the allowlists is ever auto-touched (darwin-skill stays manual). Also: an `external` entry whose symlink never existed is now created from `skills-external/` (mirroring toggle-external's from-source path), and the stale "NOT toggled automatically" note in `profile.sh` usage was corrected. Covered by a hermetic 16-check test (`lib/tests/profile-set-managed.test.sh`) with a fake `claude` shim. - **Profile switches now toggle external packs and MCPs both ways (BDR-079)** — `profile.sh set` was asymmetric: it enabled what a profile listed (including gstack skills on demand when the whole pack is off, and the `magic` MCP) but never disabled the managed leftovers, so `set backend` after design work kept emil-design-eng / frontend-design / design-motion-principles / impeccable active and magic registered. `set` now trims managed externals (`MANAGED_EXTERNALS`) and managed MCPs (`MANAGED_MCPS`, delegated to `toggle-external.sh`) not listed in the profile — same allowlist doctrine as `MANAGED_PLUGINS`, nothing outside the allowlists is ever auto-touched (darwin-skill stays manual). Also: an `external` entry whose symlink never existed is now created from `skills-external/` (mirroring toggle-external's from-source path), and the stale "NOT toggled automatically" note in `profile.sh` usage was corrected. Covered by a hermetic 16-check test (`lib/tests/profile-set-managed.test.sh`) with a fake `claude` shim.
### Changed
- **README restructured for public readers** — the project-layout tree and architecture principles moved verbatim to a new `ARCHITECTURE.md` (README links it); bare decision-registry citations (`BDR-XXX`) stripped from README prose, meaning preserved; `/profile` documentation corrected in three places to the real 10-profile set (web / seo / web-full / full / backend / design / dev / qa / audit / minimal); fresh-install block now uses the real clone URL + `make install` / `make doctor`; new "SEO data layer" subsection documents the `GOOGLE_OAUTH_CLIENT_ID` / `GOOGLE_OAUTH_CLIENT_SECRET` / `CRUX_API_KEY` vars in `~/.claude/.env` (mirrors `.env.example`, `make seo-connect` one-time consent).
### Fixed
- **Transient planning artifacts purged from the repo** — `docs/plans`, `docs/specs`, `docs/superpowers/{plans,specs}` (deploy-skill 2026-06-27, model-routing 2026-07-15) were run-time pipeline artifacts that should have been deleted in their chantiers' post-merge cleanup and slipped through (one pair predates the lifecycle rule, one missed the purge step of a 6-wave chantier). Git history at the feature commits remains their archive; `docs/` no longer exists.
## [1.2.1] — 2026-07-20 ## [1.2.1] — 2026-07-20
### Fixed ### Fixed
+26 -8
View File
@@ -51,14 +51,14 @@ children are dispatched `model:"fable"` (they carry reflection).
```bash ```bash
# 1. Clone with submodules # 1. Clone with submodules
git clone --recurse-submodules git@github.com:youruser/claude-config.git git clone --recurse-submodules https://github.com/bchanot/claude
cd claude-config cd claude
# 2. Bootstrap (CLI + auth + symlinks + plugins) # 2. Bootstrap (CLI + auth + symlinks + plugins)
bash install.sh make install
# 3. Verify setup # 3. Verify setup
bash doctor.sh make doctor
# 4. Restart Claude Code — plugins load automatically # 4. Restart Claude Code — plugins load automatically
``` ```
@@ -221,10 +221,8 @@ in `env`, `command`, `args`, `url`, and `headers` — for both project (`.mcp.js
and user (`~/.claude.json`) scope. Use that instead of a literal value: and user (`~/.claude.json`) scope. Use that instead of a literal value:
```bash ```bash
# WRONG — plaintext key lands in ~/.claude.json: MAGIC_API_KEY=<Enter your magic api key here from https://21st.dev/settings/api-keys >
claude mcp add magic --scope user --env API_KEY="$MAGIC_API_KEY" -- npx -y @21st-dev/magic@latest # single-quoted so bash doesn't expand it; Claude Code expands it at
# RIGHT — single-quoted so bash doesn't expand it; Claude Code expands it at
# launch, reading the var from its own process environment: # launch, reading the var from its own process environment:
claude mcp add magic --scope user --env 'API_KEY=${MAGIC_API_KEY}' -- npx -y @21st-dev/magic@latest claude mcp add magic --scope user --env 'API_KEY=${MAGIC_API_KEY}' -- npx -y @21st-dev/magic@latest
``` ```
@@ -242,6 +240,26 @@ There is no `claude mcp add` flag that writes the reference form for you —
the `${VAR}` syntax has to be typed by hand (or via a wrapper script), same as the `${VAR}` syntax has to be typed by hand (or via a wrapper script), same as
above. above.
### SEO data layer (`/seo` FULL) — Google OAuth + CrUX keys
The same `~/.claude/.env` also feeds `lib/seo-data`, which pulls real Google
Search Console and Chrome UX Report data into `/seo` FULL audits. Add these
three vars (template with the GCP console steps in `.env.example`):
```bash
# OAuth Desktop client — GCP console → APIs & Services → Credentials →
# OAuth client (Desktop). Consent scope: webmasters.readonly only.
GOOGLE_OAUTH_CLIENT_ID=<your-client-id.apps.googleusercontent.com>
GOOGLE_OAUTH_CLIENT_SECRET=<your-client-secret>
# CrUX + PageSpeed API key — GCP console → Credentials → API key,
# restricted to those two APIs. https://developer.chrome.com/docs/crux/api
CRUX_API_KEY=<your-crux-api-key>
```
Then run the one-time consent flow: `make seo-connect` (per-label token
store, multi-site safe). Missing credentials never break an audit — `/seo`
degrades gracefully to anonymous PageSpeed lab data.
### magic MCP (`@21st-dev/magic`) — known callback-injection risk ### magic MCP (`@21st-dev/magic`) — known callback-injection risk
`21st_magic_component_builder` opens an **unauthenticated** local callback `21st_magic_component_builder` opens an **unauthenticated** local callback
+1 -1
View File
@@ -1 +1 @@
1.2.1 1.3.0