forked from bchanot/claude
refactor(doctrine): C2 coherence — 30 doctrine/skill tensions resolved, doctrine wins (BDR-099)
One ask policy; mandated executors exempt from the delegation rule; skill plan satisfies the planning rule; journal line exempt from the approval gate; chore = maintenance without new behaviour; small fix on develop = bugfix; BDR-068 written as the one auto-finish exception; deploy routes to /deploy. Skills and agents follow: hotfix types by base + skips the design gate on trivial; capitalize/close create missing registries; commit-change asks the branch type; doc/seo/web-validate/refactor branch through the aiguillage; tour reports BREAKING fixes as needs-decision and runs doc-syncer two-mode; client-handover applies audit bundles from its main loop behind one gate; init-project/onboard use the 200-file graphify signal and bootstrap memory; release-candidate gates the tag push only; push wording aligned with the BDR-095 hooks; stale pointers fixed (§ Language, .gsd/ROADMAP.md, handover script path, design-gate lists).
This commit is contained in:
+4
-4
@@ -17,11 +17,11 @@ Check BOTH the task description AND the filesystem:
|
||||
- Framework UI: `tailwind`, `styled-component`, `emotion`, `chakra`, `radix`, `shadcn`, `headless`
|
||||
|
||||
**Filesystem signals** (quick check, no deep scan):
|
||||
- Target files have `.tsx`, `.jsx`, `.css`, `.scss`, `.less`, or `.module.css` extension
|
||||
- Target files have `.tsx`, `.jsx`, `.vue`, `.svelte`, `.astro`, `.css`, `.scss`, `.less`, or `.module.css` extension
|
||||
- `tailwind.config` or `postcss.config` present in project root
|
||||
- `tokens/`, `theme/`, or `design-system/` directory exists
|
||||
- Storybook config (`.storybook/`) present
|
||||
- Animation lib in `package.json` deps: `motion`, `motion-v`, `framer-motion` (legacy), `gsap`, `@gsap/react`, `lottie-react`, `react-spring`, `popmotion`, `@formkit/auto-animate`
|
||||
- Animation lib in `package.json` deps: any package `is_anim_lib_installed` recognizes (`lib/animation-lib-check.sh`, the single source)
|
||||
|
||||
## DECISION
|
||||
|
||||
@@ -40,7 +40,7 @@ and if not, point at ONE command — `/profile design`.
|
||||
Tier does NOT change WHAT gets checked. Every non-trivial design tier draws from
|
||||
the one `design` profile — so the gate checks that profile's **design-core
|
||||
tools** (the `# GATE-BLOCK:` allowlist in `design.profile`: ui-ux-pro-max,
|
||||
frontend-design, emil-design-eng, design-motion-principles, impeccable, design-html,
|
||||
frontend-design, emil-design-eng, design-motion-principles, design-html,
|
||||
design-review, design-consultation, the `21st` CLI and `21st-ui-build` — the
|
||||
canary for the whole 21st skill pack). The profile also bundles
|
||||
browser/plan/shotgun tooling and graphify for convenience; those never trip the
|
||||
@@ -149,7 +149,7 @@ says so, because init has to happen in the agent chat, not in an installer.
|
||||
|
||||
**Fires when BOTH hold** — else stay silent:
|
||||
|
||||
1. impeccable is active (`skills/impeccable` present, i.e. it did not trip §3).
|
||||
1. impeccable symlink present under `skills/` (non-blocking external — not on the `# GATE-BLOCK:` list, so §3 never checks it).
|
||||
2. The project has no `PRODUCT.md` at its root.
|
||||
|
||||
Evaluate it on the same path as §4: after the toolchain resolves, never on the
|
||||
|
||||
@@ -21,11 +21,14 @@ The caller passes its TYPE:
|
||||
|--------|------|------|
|
||||
| `/feat` | `feature` | develop |
|
||||
| `/bugfix` | `bugfix` | develop |
|
||||
| `/hotfix` | `hotfix` | main |
|
||||
| `/hotfix` | `hotfix` on main · `bugfix` on develop | main · develop |
|
||||
| `/seo` aggressive · `/web-validate --fix` | `feature` | develop |
|
||||
| `/capitalize` · `/close` · `/prune-memory` · `/reconcile` | `chore` | develop |
|
||||
| `/doc` · `/refactor` | `chore` | develop |
|
||||
| `/commit-change` | asks the user (`feature` / `bugfix` / `chore`) before `start` — a branch name is a public name | develop |
|
||||
|
||||
The `chore` row = **standalone memory/doc work**: the registry / TODO / doc
|
||||
reconciliation & curation skills, run OUTSIDE an assistance flow. Inside `/feat`
|
||||
The `chore` rows = **standalone memory/doc/hygiene work**: the registry / TODO /
|
||||
doc reconciliation & curation skills (+ `/refactor`), run OUTSIDE an assistance flow. Inside `/feat`
|
||||
`/bugfix` `/hotfix` `/ship-feature` a working branch already exists (this check
|
||||
returns WORKING) and the memory commit rides it. The aiguillage only fires when
|
||||
such a skill is invoked directly on `main`/`develop` — i.e. memory IS the work,
|
||||
@@ -39,6 +42,8 @@ develop + push) when THEY branched a `chore/*` off develop this run (BDR-068 —
|
||||
scoped [[LRN-069]] exception; see the capitalize skill's STEP 5C). `/prune-memory`
|
||||
+ `/reconcile` stay fully human-gated: never run `gitflow finish` from them.
|
||||
|
||||
Note: `hotfix` branches off **main** (prod) even when invoked from `develop` — that
|
||||
is the gitflow definition of a hotfix. For a dev-scoped small fix, use `/bugfix`
|
||||
(branches off develop).
|
||||
Note: a `hotfix/*` branch forks off **main** (prod) and fans out to main + develop
|
||||
at finish — that is the gitflow definition of a hotfix. Invoked from `develop`,
|
||||
`/hotfix` therefore starts a `bugfix/*` (off develop): a `hotfix/*` there would
|
||||
miss develop's code and later merge to prod. The small-fix routing is unchanged;
|
||||
only the branch type follows the base.
|
||||
|
||||
@@ -59,9 +59,9 @@ Parse its single `VERIFY — VERDICT:` line:
|
||||
|
||||
- `CONFORME` → go to GATE 2. (First-pass conforme = no loop.)
|
||||
- `ECARTS(n)` → hand the dev the CONTRACT path + the exact `CRITERIA` gap
|
||||
lines (NOT-MET / out-of-scope), nothing else. Inline dev fixes in place;
|
||||
a dispatched dev is re-dispatched FRESH with those inputs only. Then
|
||||
re-run GATE 0 and re-dispatch a FRESH verifier. Repeat.
|
||||
lines (NOT-MET / out-of-scope), nothing else: re-dispatch a FRESH executor
|
||||
with those inputs only, never redo the fix by hand. Then re-run GATE 0 and
|
||||
re-dispatch a FRESH verifier. Repeat.
|
||||
**Max 3 conformity iterations** → STOP + human escalation with the
|
||||
CRITERIA table (the contract-vs-realized diff).
|
||||
- `ABANDONED(n)` → direct human gate, never a dev loop (a dev cannot close
|
||||
@@ -88,8 +88,8 @@ stdout-only, no Write).
|
||||
Parse its single `SECURITY — VERDICT:` line:
|
||||
|
||||
- `PASS` → done, proceed to commit.
|
||||
- `BLOCK(n)` → hand the dev the `BLOCKING` list + the CONTRACT path (inline
|
||||
fix, or FRESH executor re-dispatch). Then re-run GATE 0, then
|
||||
- `BLOCK(n)` → hand the dev the `BLOCKING` list + the CONTRACT path
|
||||
(re-dispatch a FRESH executor, never fix by hand). Then re-run GATE 0, then
|
||||
**re-verify the REQUEST first** (GATE 1, fresh verifier) — a security fix
|
||||
can drift the behavior — **then re-run GATE 2** (fresh auditor), in that
|
||||
order. **Max 3 security iterations** → STOP + human escalation with the
|
||||
|
||||
Reference in New Issue
Block a user