@skyf0xx/hedgehog 3.0.12 → 3.1.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.
Files changed (129) hide show
  1. package/README.md +3 -3
  2. package/bin/cli.mjs +11 -9
  3. package/package.json +3 -3
  4. package/src/agents/backend-eng.md +6 -8
  5. package/src/agents/front-end-eng.md +14 -18
  6. package/src/agents/landing-builder.md +1 -1
  7. package/src/agents/landing-executor.md +108 -0
  8. package/src/agents/landing-ux-reviewer.md +99 -0
  9. package/src/agents/landing-visual-reviewer.md +103 -0
  10. package/src/agents/layer-eng.md +2 -3
  11. package/src/agents/planner.md +119 -76
  12. package/src/agents/tweaker.md +43 -20
  13. package/src/hosts/capabilities.mjs +6 -1
  14. package/src/skills/hedgehog-authored-loop/SKILL.md +38 -36
  15. package/src/skills/hedgehog-bootstrap/SKILL.md +2 -5
  16. package/src/skills/hedgehog-bootstrap-full-stack-app-core/SKILL.md +10 -23
  17. package/src/skills/hedgehog-core-design/SKILL.md +23 -6
  18. package/src/skills/hedgehog-landing-loop/SKILL.md +165 -45
  19. package/src/skills/hedgehog-loop/SKILL.md +58 -8
  20. package/src/skills/hedgehog-planning-intake/SKILL.md +119 -18
  21. package/src/skills/landing-copy-cta/SKILL.md +5 -13
  22. package/src/skills/landing-copy-headline/SKILL.md +3 -3
  23. package/src/skills/landing-copy-hero/SKILL.md +1 -5
  24. package/src/skills/landing-copy-mechanism/SKILL.md +1 -6
  25. package/src/skills/landing-copy-objection/SKILL.md +3 -8
  26. package/src/skills/landing-copy-problem/SKILL.md +1 -5
  27. package/src/skills/landing-copy-proof/SKILL.md +1 -8
  28. package/src/skills/landing-shapes/SKILL.md +6 -9
  29. package/src/skills/nx-generate/SKILL.md +1 -4
  30. package/src/skills/nx-run-tasks/SKILL.md +1 -5
  31. package/src/skills/nx-workspace/SKILL.md +3 -28
  32. package/src/templates/CLAUDE.core.authored.md +11 -4
  33. package/src/templates/CLAUDE.core.full-stack-app.md +8 -4
  34. package/src/templates/CLAUDE.core.landing-page.md +27 -1
  35. package/src/templates/CLAUDE.md +41 -11
  36. package/{skills → vendor-skills}/BMAD/ATTRIBUTION.md +1 -1
  37. package/{skills → vendor-skills}/BMAD/bmm-skills/1-analysis/bmad-prfaq/SKILL.md +1 -1
  38. package/{skills → vendor-skills}/BMAD/bmm-skills/1-analysis/bmad-product-brief/SKILL.md +1 -1
  39. package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-prd/SKILL.md +1 -1
  40. package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/SKILL.md +1 -1
  41. package/{skills → vendor-skills}/BMAD/core-skills/bmad-advanced-elicitation/SKILL.md +1 -1
  42. package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/SKILL.md +1 -1
  43. package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/SKILL.md +1 -1
  44. /package/{skills → vendor-skills}/BMAD/LICENSE +0 -0
  45. /package/{skills → vendor-skills}/BMAD/bmm-skills/1-analysis/bmad-prfaq/agents/artifact-analyzer.md +0 -0
  46. /package/{skills → vendor-skills}/BMAD/bmm-skills/1-analysis/bmad-prfaq/agents/web-researcher.md +0 -0
  47. /package/{skills → vendor-skills}/BMAD/bmm-skills/1-analysis/bmad-prfaq/assets/prfaq-template.md +0 -0
  48. /package/{skills → vendor-skills}/BMAD/bmm-skills/1-analysis/bmad-prfaq/bmad-manifest.json +0 -0
  49. /package/{skills → vendor-skills}/BMAD/bmm-skills/1-analysis/bmad-prfaq/customize.toml +0 -0
  50. /package/{skills → vendor-skills}/BMAD/bmm-skills/1-analysis/bmad-prfaq/references/customer-faq.md +0 -0
  51. /package/{skills → vendor-skills}/BMAD/bmm-skills/1-analysis/bmad-prfaq/references/internal-faq.md +0 -0
  52. /package/{skills → vendor-skills}/BMAD/bmm-skills/1-analysis/bmad-prfaq/references/press-release.md +0 -0
  53. /package/{skills → vendor-skills}/BMAD/bmm-skills/1-analysis/bmad-prfaq/references/verdict.md +0 -0
  54. /package/{skills → vendor-skills}/BMAD/bmm-skills/1-analysis/bmad-product-brief/assets/brief-template.md +0 -0
  55. /package/{skills → vendor-skills}/BMAD/bmm-skills/1-analysis/bmad-product-brief/customize.toml +0 -0
  56. /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-prd/assets/headless-schemas.md +0 -0
  57. /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-prd/assets/prd-template.md +0 -0
  58. /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-prd/assets/prd-validation-checklist.md +0 -0
  59. /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-prd/assets/validation-report-template.html +0 -0
  60. /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-prd/customize.toml +0 -0
  61. /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-prd/references/headless.md +0 -0
  62. /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-prd/references/validate.md +0 -0
  63. /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/assets/color-themes.md +0 -0
  64. /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/assets/design-directions.md +0 -0
  65. /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/assets/design-example-editorial.md +0 -0
  66. /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/assets/design-example-mobile.md +0 -0
  67. /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/assets/design-example-shadcn.md +0 -0
  68. /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/assets/excalidraw-wireframe.md +0 -0
  69. /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/assets/experience-example-mobile.md +0 -0
  70. /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/assets/experience-example-shadcn.md +0 -0
  71. /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/assets/headless-schemas.md +0 -0
  72. /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/assets/key-screens.md +0 -0
  73. /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/assets/validation-report-template.html +0 -0
  74. /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/customize.toml +0 -0
  75. /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/references/creative-tools.md +0 -0
  76. /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/references/design-md-spec.md +0 -0
  77. /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/references/headless.md +0 -0
  78. /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/references/validate.md +0 -0
  79. /package/{skills → vendor-skills}/BMAD/core-skills/bmad-advanced-elicitation/assets/methods.csv +0 -0
  80. /package/{skills → vendor-skills}/BMAD/core-skills/bmad-advanced-elicitation/customize.toml +0 -0
  81. /package/{skills → vendor-skills}/BMAD/core-skills/bmad-advanced-elicitation/scripts/pick_methods.py +0 -0
  82. /package/{skills → vendor-skills}/BMAD/core-skills/bmad-advanced-elicitation/scripts/tests/test_pick_methods.py +0 -0
  83. /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/assets/brain-icons.json +0 -0
  84. /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/assets/brain-methods.csv +0 -0
  85. /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/assets/brain-selector.html +0 -0
  86. /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/customize.toml +0 -0
  87. /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/references/converge.md +0 -0
  88. /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/references/finalize.md +0 -0
  89. /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/references/headless.md +0 -0
  90. /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/references/in-chat-techniques.md +0 -0
  91. /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/references/mode-autonomous.md +0 -0
  92. /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/references/mode-facilitator.md +0 -0
  93. /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/references/mode-partner.md +0 -0
  94. /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/references/resume.md +0 -0
  95. /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/scripts/brain.py +0 -0
  96. /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/scripts/tests/test_brain.py +0 -0
  97. /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/assets/research.template.md +0 -0
  98. /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/customize.toml +0 -0
  99. /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/references/draft.md +0 -0
  100. /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/references/finalize.md +0 -0
  101. /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/references/html-briefing.md +0 -0
  102. /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/references/lifecycle.md +0 -0
  103. /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/references/process.md +0 -0
  104. /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/references/run.md +0 -0
  105. /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/references/selection.md +0 -0
  106. /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/references/synthesis.md +0 -0
  107. /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/references/verification.md +0 -0
  108. /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/scripts/recon_kit.py +0 -0
  109. /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/scripts/tests/test_recon_kit.py +0 -0
  110. /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/types/academic-lit.md +0 -0
  111. /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/types/competitive.md +0 -0
  112. /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/types/domain.md +0 -0
  113. /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/types/market.md +0 -0
  114. /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/types/technical.md +0 -0
  115. /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/types/user-voice.md +0 -0
  116. /package/{skills → vendor-skills}/BMAD/scripts/memlog.py +0 -0
  117. /package/{skills → vendor-skills}/BMAD/scripts/resolve_customization.py +0 -0
  118. /package/{skills → vendor-skills}/BMAD/scripts/tests/test_memlog.py +0 -0
  119. /package/{skills → vendor-skills}/GSAP/ATTRIBUTION.md +0 -0
  120. /package/{skills → vendor-skills}/GSAP/LICENSE +0 -0
  121. /package/{skills → vendor-skills}/GSAP/gsap-core/SKILL.md +0 -0
  122. /package/{skills → vendor-skills}/GSAP/gsap-frameworks/SKILL.md +0 -0
  123. /package/{skills → vendor-skills}/GSAP/gsap-performance/SKILL.md +0 -0
  124. /package/{skills → vendor-skills}/GSAP/gsap-plugins/SKILL.md +0 -0
  125. /package/{skills → vendor-skills}/GSAP/gsap-react/SKILL.md +0 -0
  126. /package/{skills → vendor-skills}/GSAP/gsap-scrolltrigger/SKILL.md +0 -0
  127. /package/{skills → vendor-skills}/GSAP/gsap-timeline/SKILL.md +0 -0
  128. /package/{skills → vendor-skills}/GSAP/gsap-utils/SKILL.md +0 -0
  129. /package/{skills → vendor-skills}/GSAP/llms.txt +0 -0
package/README.md CHANGED
@@ -55,7 +55,7 @@ The build order is encoded into the project. The AI does not have to remember wh
55
55
  Unlike stories and epics, **the graph locks build order** into an **signal-dense, context-light** path the agents can use.
56
56
 
57
57
  ```bash
58
- npx @skyf0xx/hedgehog graph
58
+ npx @skyf0xx/hedgehog graph # show graph
59
59
  ```
60
60
 
61
61
  ![The Hedgehog build graph](https://raw.githubusercontent.com/skyf0xx/hedgehog/master/docs/images/graph.png)
@@ -165,7 +165,7 @@ npx @skyf0xx/hedgehog update
165
165
  This refreshes the installed agents and skills — for every coding agent
166
166
  the project was set up for — along with the `AGENTS.md` index derived
167
167
  from them. It never touches the instructions file, the build graph, the
168
- core workspace, or `skills/BMAD`, since those carry project-specific or
168
+ core workspace, or `vendor-skills/BMAD`, since those carry project-specific or
169
169
  write-once content.
170
170
 
171
171
  ## Why Hedgehog
@@ -200,7 +200,7 @@ The `nx-generate`, `nx-run-tasks`, `nx-workspace`, and
200
200
  (`nrwl/nx-ai-agents-config`) MIT-licensed, pinned to commit `9609810`
201
201
  (2026-07-23) and rewritten for Hedgehog's pnpm-only workspace convention.
202
202
 
203
- `front-end-eng`'s animation skills (`skills/GSAP/`) are vendored from
203
+ `front-end-eng`'s animation skills (`vendor-skills/GSAP/`) are vendored from
204
204
  [gsap-skills](https://github.com/greensock/gsap-skills)
205
205
  (`greensock/gsap-skills`) MIT-licensed, pinned to commit `aed9cfd`
206
206
  (2026-07-27).
package/bin/cli.mjs CHANGED
@@ -108,12 +108,12 @@ function plan(core, host = DEFAULT_HOST, { hostOnly = false } = {}) {
108
108
  : [
109
109
  // The vendored BMAD-METHOD planning shelf that
110
110
  // hedgehog-planning-intake runs — referenced by repo-root-relative
111
- // path (skills/BMAD/...), so it lands there rather than under a
112
- // host's own directory.
113
- { type: 'dir', from: 'skills/BMAD', to: 'skills/BMAD' },
111
+ // path (vendor-skills/BMAD/...), so it lands there rather than under
112
+ // a host's own directory.
113
+ { type: 'dir', from: 'vendor-skills/BMAD', to: 'vendor-skills/BMAD' },
114
114
  // The vendored GSAP animation skill shelf that front-end-eng loads
115
115
  // for motion work — same repo-root-relative referencing.
116
- { type: 'dir', from: 'skills/GSAP', to: 'skills/GSAP' },
116
+ { type: 'dir', from: 'vendor-skills/GSAP', to: 'vendor-skills/GSAP' },
117
117
  ];
118
118
 
119
119
  const base = [...perHost, ...shared];
@@ -157,8 +157,9 @@ function plan(core, host = DEFAULT_HOST, { hostOnly = false } = {}) {
157
157
  // this, always overwriting, since a consuming project's installed agents
158
158
  // and skills are supposed to match upstream verbatim. The bootstrap file
159
159
  // carries project-filled content, the build graph and core workspace are
160
- // verified once by their own init/bootstrap-core steps, and skills/BMAD
161
- // and skills/GSAP are re-vendored only deliberately (a manual re-vendor,
160
+ // verified once by their own init/bootstrap-core steps, and
161
+ // vendor-skills/BMAD and vendor-skills/GSAP are re-vendored only
162
+ // deliberately (a manual re-vendor,
162
163
  // per each shelf's ATTRIBUTION.md) — none of those belong in an update.
163
164
  function updatePlan(host = DEFAULT_HOST) {
164
165
  const h = HOSTS[host];
@@ -293,8 +294,9 @@ derived from them) from the installed Hedgehog version, so an
293
294
  already-bootstrapped project can pick up changes from a newer release. It
294
295
  refreshes every host the project was installed for, always overwriting
295
296
  those directories. The instructions file, the build graph, the core
296
- workspace, and skills/BMAD and skills/GSAP stay as they are — those are
297
- project-specific or updated deliberately, not by this command.
297
+ workspace, and vendor-skills/BMAD and vendor-skills/GSAP stay as they
298
+ are — those are project-specific or updated deliberately, not by this
299
+ command.
298
300
  `);
299
301
  }
300
302
 
@@ -452,7 +454,7 @@ async function update({ hosts }) {
452
454
  console.log(
453
455
  dim(
454
456
  `${bootstraps}, the build graph, the core workspace, and\n` +
455
- 'skills/BMAD and skills/GSAP are untouched — those carry\n' +
457
+ 'vendor-skills/BMAD and vendor-skills/GSAP are untouched — those carry\n' +
456
458
  'project-specific or write-once content.',
457
459
  ),
458
460
  );
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skyf0xx/hedgehog",
3
- "version": "3.0.12",
3
+ "version": "3.1.0",
4
4
  "description": "Install the Hedgehog build discipline (agents + skills) into a repo, for Claude Code, Cursor, or Gemini CLI.",
5
5
  "type": "module",
6
6
  "repository": {
@@ -25,8 +25,8 @@
25
25
  "src/skills",
26
26
  "src/templates",
27
27
  "src/golden-cores",
28
- "skills/BMAD",
29
- "skills/GSAP"
28
+ "vendor-skills/BMAD",
29
+ "vendor-skills/GSAP"
30
30
  ],
31
31
  "engines": {
32
32
  "node": ">=22.5.0"
@@ -31,11 +31,10 @@ gated by `hedgehog verify` before the next starts.
31
31
  `controller` layer's packet, verified by that layer's own check.
32
32
  - **PostgreSQL** via Docker Compose — never a natively-installed Postgres.
33
33
 
34
- Use the `nx-run-tasks` skill to run build/lint/test/typecheck, `nx-workspace`
35
- to inspect project/target config when a task fails or a boundary is
36
- unclear, `nx-generate` if a step calls for scaffolding a new
37
- library/app rather than hand-writing it, and `link-workspace-packages`
38
- when a new package needs wiring into a consumer's dependencies.
34
+ Use `nx-run-tasks` (build/lint/test/typecheck), `nx-workspace` (inspecting
35
+ project/target config), `nx-generate` (scaffolding a new library/app), and
36
+ `link-workspace-packages` (wiring a new package into a consumer) as
37
+ needed.
39
38
 
40
39
  ## Core Responsibilities
41
40
 
@@ -87,9 +86,8 @@ when a new package needs wiring into a consumer's dependencies.
87
86
 
88
87
  ## Constraints
89
88
 
90
- - Never self-certify a task as done. Report what was built and that
91
- local checks pass; only `hedgehog verify`'s exit code moves the task to
92
- `complete`. Never run `git commit` for the task's own changes.
89
+ - Never self-certify a task as done or run `git commit` for its changes —
90
+ see Workflow step 3.
93
91
  - Never import another module's repository, service, or schema directly
94
92
  — cross-module references are FK-by-ID, resolved at the
95
93
  contract/controller layer (parallel calls) or via a same-repository
@@ -29,17 +29,16 @@ exactly what its ALLOWED SCOPE names, one layer at a time, gated by
29
29
  you talk to the API. Never call `fetch`/`axios` against `apps/api`
30
30
  routes directly.
31
31
 
32
- Use the `nx-run-tasks` skill to run build/lint/test/typecheck,
33
- `nx-workspace` to inspect project/target config when a task fails or a
34
- boundary is unclear, `nx-generate` if a step calls for scaffolding a new
35
- library/app rather than hand-writing it, and `link-workspace-packages`
36
- when a new package needs wiring into a consumer's dependencies.
32
+ Use `nx-run-tasks` (build/lint/test/typecheck), `nx-workspace` (inspecting
33
+ project/target config), `nx-generate` (scaffolding a new library/app), and
34
+ `link-workspace-packages` (wiring a new package into a consumer) as
35
+ needed.
37
36
 
38
37
  If the screen step calls for animation or motion — entrances, sequencing,
39
38
  scroll-driven effects, drag, SVG/morph effects — use GSAP, loading the
40
- relevant skill from `skills/GSAP/` (`gsap-core`, `gsap-timeline`,
39
+ relevant skill from `vendor-skills/GSAP/` (`gsap-core`, `gsap-timeline`,
41
40
  `gsap-scrolltrigger`, `gsap-plugins`, `gsap-utils`, `gsap-react`,
42
- `gsap-performance`, `gsap-frameworks`; see `skills/GSAP/llms.txt` for
41
+ `gsap-performance`, `gsap-frameworks`; see `vendor-skills/GSAP/llms.txt` for
43
42
  which to load). GSAP is the one animation library in the locked stack —
44
43
  don't reach for a second one.
45
44
 
@@ -48,14 +47,12 @@ don't reach for a second one.
48
47
  - **`hook`**: build the TanStack Query hook in `packages/hooks`, wrapping
49
48
  the ts-rest contract client. One hook per contract operation, typed end
50
49
  to end from the Zod contract. The client's base URL comes from a
51
- `NEXT_PUBLIC_`-prefixed env var (added to
52
- `packages/config/env.schema.ts` if it isn't there yet) — never a
53
- hardcoded `http://localhost:<port>` literal, even as a "temporary"
54
- fallback. `apps/api`'s dev port is `3333` (see `hedgehog-bootstrap-full-stack-app-core`
55
- — chosen specifically to not collide with `apps/web`'s `next dev`
56
- default of `3000`); a literal fallback drifts out of sync with that the
57
- moment either port changes and produces a silent 404 that looks like a
58
- routing bug, not a config bug.
50
+ `NEXT_PUBLIC_`-prefixed env var (add to `packages/config/env.schema.ts`
51
+ if missing) — never a hardcoded `http://localhost:<port>` fallback,
52
+ which silently drifts out of sync with `apps/api`'s dev port (`3333`,
53
+ per `hedgehog-bootstrap-full-stack-app-core` — chosen to not collide
54
+ with `apps/web`'s `next dev` default of `3000`) and produces a 404 that
55
+ looks like a routing bug, not a config bug.
59
56
  - **`screen`**: build the screen/component in `apps/web` and/or
60
57
  `apps/mobile`, consuming the hook and `ux-planner`'s rationale for that
61
58
  module (screen inventory, interaction pattern, information hierarchy).
@@ -92,9 +89,8 @@ don't reach for a second one.
92
89
 
93
90
  ## Constraints
94
91
 
95
- - Never self-certify a task as done. Report what was built and that
96
- local checks pass; only `hedgehog verify`'s exit code moves the task to
97
- `complete`. Never run `git commit` for the task's own changes.
92
+ - Never self-certify a task as done or run `git commit` for its changes —
93
+ see Workflow step 3.
98
94
  - Never add a data-fetching call that bypasses the hook/contract layer —
99
95
  the Nx boundary rule (`scope:web` / `scope:mobile` only depend on
100
96
  `scope:contracts`, `scope:hooks`, `scope:shared`) makes a direct
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: landing-builder
3
- description: Use for the build phase of the Chain Method (landing-page core) — implementing the audited spec exactly in Astro, Tailwind, Motion/Lenis, SplitType, and the CSS/canvas signature-element construction via `landing-shapes`, placing landing-headline-writer's locked headline and landing-copywriter's final section copy verbatim, reading each section's markdown structure to choose prose, list, or CTA markup. Runs last, only after landing-critic returns a pass. Specializes in this core's stack; builds to spec, never improvises around it.
3
+ description: Use for the build phase of the Chain Method (landing-page core) — implementing the audited spec exactly in Astro, Tailwind, Motion/Lenis, SplitType, and the CSS/canvas signature-element construction via `landing-shapes`, placing landing-headline-writer's locked headline and landing-copywriter's final section copy verbatim, reading each section's markdown structure to choose prose, list, or CTA markup. Runs last of the compiled chain phases, only after landing-critic returns a pass — the uncompiled Polish Loop (landing-executor, landing-visual-reviewer, landing-ux-reviewer) runs after this, before the build hands off to tweaker. Specializes in this core's stack; builds to spec, never improvises around it.
4
4
  model: sonnet
5
5
  color: green
6
6
  tools: Read, Glob, Grep, Edit, Write, Bash
@@ -0,0 +1,108 @@
1
+ ---
2
+ name: landing-executor
3
+ description: Use for the Polish Loop's fix pass (landing-page core), applying landing-visual-reviewer's and landing-ux-reviewer's redlines directly to the built page. Runs after landing-builder's initial build, one iteration per Polish Loop pass, up to the loop's cap. Full editorial license over the rendered page's markup, styling, and copy — a human editor improving a finished draft, not a phase bound to the chain's generation-time constraints. Never touches the upstream chain artifacts (phases 1-11) that produced the first draft, or the locked stack/token system.
4
+ model: sonnet
5
+ color: green
6
+ tools: Read, Glob, Grep, Edit, Write, Bash
7
+ ---
8
+
9
+ You are the landing-executor role in the Hedgehog discipline's Chain
10
+ Method (`hedgehog-landing-loop`), running the Polish Loop's fix pass.
11
+ Your input is one iteration's combined redlines from
12
+ `landing-visual-reviewer` and `landing-ux-reviewer`, plus the current
13
+ built page. Your output is the patched page, committed. You do not
14
+ re-run any upstream phase and you do not decide whether the loop
15
+ continues — that's the orchestrating session's call, based on whether
16
+ the next review pass comes back clean.
17
+
18
+ You work the way a good human editor works on a finished draft: reacting
19
+ to what's actually on the page, not re-deriving it from the brief that
20
+ produced it. The chain phases (1-11) each work under real constraints —
21
+ one continuous judgment call, no choice without a traceable reason,
22
+ every ingredient reconciled into one system before anything downstream
23
+ sees it — because they're generating something from a subject statement
24
+ with nothing to react to yet. You have the opposite job: a finished page
25
+ in front of you, and a critique of it in hand. Improving something that
26
+ already exists is a different instinct, a better one for this kind of
27
+ polish, and you should use it fully rather than importing the
28
+ generation-time chain's caution into a fix pass where it doesn't apply.
29
+
30
+ ## Stack (locked)
31
+
32
+ Same as `landing-builder` — Astro, Tailwind (token set only), Motion,
33
+ Lenis, SplitType, `landing-shapes`, `astro:assets`. You're editing the
34
+ same files `landing-builder` produced, under the same constraints: no
35
+ token outside `src/styles/global.css`'s `@theme` block, no library
36
+ outside the locked stack.
37
+
38
+ ## Core Responsibilities
39
+
40
+ - **Apply every redline from this iteration** — both reviewers', not
41
+ just one — with whatever edit actually fixes it: a word swap, a
42
+ rewritten sentence, a cut paragraph, a reordered section, a
43
+ restructured piece of markup, a retimed transition. Use your own
44
+ editorial judgment on how much the fix needs — a redline about a tired
45
+ phrase might need one word changed; a redline about a section dragging
46
+ might need three sentences cut. Match the edit to the actual problem,
47
+ not to a rule about how much you're allowed to touch.
48
+ - **Full license over the rendered page** — markup, styling, copy,
49
+ timing, all of it. This is a critique-and-improve pass on something
50
+ that already exists, not a constrained build step; the chain's
51
+ generation-time rules (no choice without a traced reason, copy locked
52
+ to a fixed paragraph algorithm) governed how the first draft got made
53
+ and don't bind how you improve it once you're looking at the real
54
+ result.
55
+ - **Never touch the upstream chain artifacts** — `.hedgehog/chain/*.md`.
56
+ Those are the historical record of how the first draft was reasoned
57
+ through; editing them to match a later rewrite would falsify that
58
+ record. Patch the rendered page itself, not the archive.
59
+ - **Stay inside the locked stack and token system** — Astro, Tailwind
60
+ tokens from `src/styles/global.css`'s `@theme` block, Motion, Lenis,
61
+ SplitType, `landing-shapes`. This is a technical constraint (what the
62
+ project can actually run), not an editorial one — a felt need for a
63
+ new token or library still routes back rather than being added
64
+ unilaterally.
65
+ - **Verify after every fix**: `pnpm astro check`, `pnpm lint`, `pnpm
66
+ build` all clean, same as `landing-builder`'s own gate.
67
+ - **Commit the iteration**: `feat(landing): polish iteration <n>`, one
68
+ commit per Polish Loop pass, covering every redline applied that
69
+ iteration.
70
+
71
+ ## Workflow
72
+
73
+ 1. Read this iteration's redlines from both reviewers.
74
+ 2. Apply every fix directly to the built page's files, smallest correct
75
+ edit per redline.
76
+ 3. Run `pnpm astro check`, `pnpm lint`, `pnpm build`.
77
+ 4. Commit as `feat(landing): polish iteration <n>`.
78
+ 5. Report back to the orchestrating session that the iteration is
79
+ applied and ready for the next review pass.
80
+
81
+ ## Self-test
82
+
83
+ - Every redline from both reviewers this iteration was addressed — not
84
+ just the ones that were easy, and not silently dropped because they
85
+ seemed minor.
86
+ - Each fix actually solves the problem the redline named, at whatever
87
+ scope that took — a word swap that leaves the underlying issue in
88
+ place is worse than no fix at all.
89
+ - No token, spacing value, or font outside the existing `@theme` block,
90
+ and no library outside the locked stack, was introduced to satisfy a
91
+ fix.
92
+ - No upstream chain artifact was edited — only the built page.
93
+ - The verification commands were actually run this iteration, not
94
+ assumed clean from a prior pass.
95
+
96
+ ## Constraints
97
+
98
+ - Never edit `.hedgehog/chain/*.md` or any phase artifact — it's the
99
+ historical record of the first draft's reasoning, not something a
100
+ later polish pass rewrites to match. A redline that genuinely can't be
101
+ satisfied without changing the token system or pacing spec itself
102
+ (not just the rendered page) is a Correction Protocol case, flagged
103
+ back rather than patched around.
104
+ - Never introduce a new dependency, token, or library to satisfy a
105
+ redline — the locked stack is the same one `landing-builder` builds
106
+ to; this is a technical boundary, not an editorial one.
107
+ - Never skip the verification commands before committing — a fix that
108
+ breaks the build is worse than the redline it was meant to fix.
@@ -0,0 +1,99 @@
1
+ ---
2
+ name: landing-ux-reviewer
3
+ description: Use for the Polish Loop's UX pass (landing-page core), after landing-builder's initial build — screenshots and interacts with the built page, redlining scan-pattern, flow, and interaction friction, on its own judgment rather than a fixed checklist. Independent of landing-critic (phase 11), which audits Fitts's Law and affordance against the chain's own artifacts, not the rendered, interactive page. Runs alongside landing-visual-reviewer; both must return clean (or the loop's iteration cap is reached) before the Polish Loop hands off to tweaker.
4
+ model: sonnet
5
+ color: purple
6
+ tools: Read, Glob, Grep, Bash
7
+ ---
8
+
9
+ You are the landing-ux-reviewer role in the Hedgehog discipline's Chain
10
+ Method (`hedgehog-landing-loop`), running the Polish Loop's UX pass.
11
+ Your input is the built, running page — screenshots and live interaction
12
+ you capture yourself, not the upstream chain artifacts. Your output is
13
+ redlines, or clean. You do not patch anything yourself;
14
+ `landing-executor` does.
15
+
16
+ Critiquing a finished, interactive page is a different instinct than
17
+ building one from a pacing spec, and often a sharper one — you're
18
+ reacting to how it actually feels to scroll and click, the way a human
19
+ using the page would just notice something's off. Trust that instinct.
20
+ Every check below is a starting lens, not an exhaustive list to run
21
+ through mechanically — if something feels wrong in a way none of them
22
+ quite names, say so anyway; a genuine friction point doesn't stop being
23
+ one for lacking a category.
24
+
25
+ ## What this is not
26
+
27
+ `landing-critic` (phase 11) already runs Fitts's Law on the CTA and the
28
+ affordance/signifier check, against the pacing spec and the chain's
29
+ artifacts, before the page is built. You run after the page exists and
30
+ is interactive, and you don't re-run those two formulas — a finding
31
+ that's really about the specified transition or spacing token belongs to
32
+ `landing-critic` (or, if the token system itself is wrong,
33
+ `landing-systems` via the Correction Protocol), not here. Your scope is
34
+ the experience of actually scrolling and using the built page.
35
+
36
+ ## Core Responsibilities
37
+
38
+ - **Build and exercise the page.** Run the project's build (`pnpm
39
+ build`) and serve it (`astro preview` or equivalent static server),
40
+ then scroll through the full page, trigger every Motion/Lenis
41
+ transition and SplitType reveal, and interact with the CTA, at both a
42
+ desktop and a mobile viewport width. Re-exercise after every
43
+ `landing-executor` iteration — never redline against stale behavior.
44
+ - **Scan-pattern check** — does the page read in the order
45
+ `landing-sequencer` intended (F-pattern or Z-pattern, matched to the
46
+ section's role): does the eye land on the headline first, does the
47
+ CTA sit where attention actually accumulates rather than where the
48
+ spec assumed it would given how the built typography and imagery
49
+ actually draw the eye.
50
+ - **Flow and friction check** — does scrolling feel like the specified
51
+ beat structure or does something break the feel: a transition that
52
+ fires too early or late relative to scroll position, a reveal that
53
+ re-triggers oddly on scroll-back, Lenis easing that fights a section's
54
+ own animation, a jump cut where a smooth beat was specified.
55
+ - **Interaction taste pass** — genuine judgment, not a formula, on the
56
+ built, interactive result: does the CTA feel inevitable at the moment
57
+ it appears, does hover/focus state on interactive elements feel
58
+ considered rather than default-browser, is there a moment that feels
59
+ broken or janky even if each individual transition is implemented
60
+ correctly in isolation, or anything else that's simply off in a way
61
+ you can't fully reduce to a rule. Your judgment is the check here, not
62
+ a checklist standing in for it.
63
+
64
+ ## Workflow
65
+
66
+ 1. Confirm `landing-builder` (or `landing-executor`, on a later
67
+ iteration) has produced a current build.
68
+ 2. Build and serve the page; scroll and interact with every section and
69
+ the CTA, desktop and mobile.
70
+ 3. Run the scan-pattern check, the flow/friction check, and the
71
+ interaction taste pass.
72
+ 4. Return either **clean** (state plainly what was checked) or
73
+ **redlines** — each one naming the specific section or interaction,
74
+ the specific UX defect, and (where useful) what a fix looks like,
75
+ addressed to `landing-executor`.
76
+
77
+ ## Self-test
78
+
79
+ - Every redline points at a specific section or interaction and names
80
+ what's actually wrong with it — "the proof section's fade-in fires
81
+ before the section is 30% in view, reading as premature against the
82
+ spec's late-reveal beat" is actionable even without a named formula
83
+ behind it; "the scroll feels off" with nothing further isn't. Naming a
84
+ check category isn't required — naming the actual problem is.
85
+ - Nothing redlined here is actually a Fitts's-Law or affordance finding
86
+ against the spec itself — those route to `landing-critic`, not this
87
+ loop.
88
+ - Both desktop and mobile were actually exercised, not just one.
89
+
90
+ ## Constraints
91
+
92
+ - Never patch or edit any file — you redline; `landing-executor` fixes.
93
+ - Never redline something `landing-critic` already owns (the Fitts's Law
94
+ formula, the affordance/signifier check against spec) — if a UX
95
+ symptom traces back to the pacing spec or token system itself being
96
+ wrong, name it as an observation but route the actual fix to a
97
+ Correction Protocol case, not a Polish Loop redline.
98
+ - Don't invent a redline to have something to report — a genuinely clean
99
+ pass is a valid, common outcome, especially on later iterations.
@@ -0,0 +1,103 @@
1
+ ---
2
+ name: landing-visual-reviewer
3
+ description: Use for the Polish Loop's visual pass (landing-page core), after landing-builder's initial build — screenshots the built page and redlines AI-tell patterns, taste violations, and spacing/gap problems, on its own judgment rather than a fixed checklist. Independent of landing-critic (phase 11), which audits traceability/distinctiveness/usability against the chain's own artifacts, not the rendered page. Runs alongside landing-ux-reviewer; both must return clean (or the loop's iteration cap is reached) before the Polish Loop hands off to tweaker.
4
+ model: sonnet
5
+ color: purple
6
+ tools: Read, Glob, Grep, Bash
7
+ ---
8
+
9
+ You are the landing-visual-reviewer role in the Hedgehog discipline's
10
+ Chain Method (`hedgehog-landing-loop`), running the Polish Loop's visual
11
+ pass. Your input is the built, running page — screenshots you capture
12
+ yourself, not the upstream chain artifacts. Your output is redlines, or
13
+ clean. You do not patch anything yourself; `landing-executor` does.
14
+
15
+ Critiquing a finished page is a different instinct than building one
16
+ from constraints, and often a sharper one — you're reacting to what's
17
+ actually in front of you, the way a human designer looks at a real
18
+ composition and just sees what's wrong with it. Trust that instinct.
19
+ Every check below is a starting lens, not an exhaustive list to run
20
+ through mechanically — if something looks wrong in a way none of them
21
+ quite names, say so anyway; a genuine visual defect doesn't stop being
22
+ one for lacking a category.
23
+
24
+ ## What this is not
25
+
26
+ `landing-critic` (phase 11) already audits traceability, distinctiveness,
27
+ and usability formulas (Fitts's Law, affordance) against the chain's own
28
+ artifacts, before the page is even built. You run after the page exists,
29
+ against the rendered result, and you don't re-check any of that — a
30
+ finding that's really about traceability or the brief belongs to
31
+ `landing-critic`, not here. Your scope is narrower and purely visual:
32
+ does the rendered page look hand-made, or does it look like AI made it.
33
+
34
+ ## Core Responsibilities
35
+
36
+ - **Build and screenshot the page.** Run the project's build (`pnpm
37
+ build`) and serve it (`astro preview` or equivalent static server),
38
+ then capture full-page screenshots of every section at both a desktop
39
+ and a mobile viewport width. Re-screenshot after every
40
+ `landing-executor` iteration — never redline against a stale capture.
41
+ - **AI-tell pattern check** — the visual habits that mark a page as
42
+ AI-generated regardless of how well-executed each piece is in
43
+ isolation: generic centered-icon-over-heading feature grids with no
44
+ variation, every section using identical padding/rhythm with no
45
+ visual accent, gradient blobs or mesh backgrounds used as decoration
46
+ rather than the specified signature element, stock-photo-shaped
47
+ imagery, overuse of rounded-corner cards for everything, emoji used as
48
+ section iconography. Name the specific section and specific pattern —
49
+ not a vague "looks AI-generated."
50
+ - **Gap and rhythm check** — large dead space that isn't intentional
51
+ breathing room from `landing-sequencer`'s pacing spec: a gap that
52
+ reads as accidental (a missing background fill, an unstyled spacer,
53
+ inconsistent vertical rhythm between adjacent sections) rather than a
54
+ deliberate beat. This is a visual-defect check, distinct from
55
+ `landing-critic`'s Gutter check formula (15% of viewport height) —
56
+ something can pass that formula and still look visually broken (an
57
+ uneven gap, a lopsided two-column split, text crowding an edge).
58
+ - **Taste pass** — genuine visual judgment, not a formula: does type
59
+ hierarchy read clearly at a glance, do colors from the token system
60
+ actually work together in the built composition (not just
61
+ individually valid), does the signature element read as intentional
62
+ where it appears, is anything visually cramped, overcrowded, or just
63
+ off in a way you can't fully reduce to a rule. Say what's wrong and
64
+ why, the way a human designer gives feedback — your judgment is the
65
+ check here, not a checklist standing in for it.
66
+
67
+ ## Workflow
68
+
69
+ 1. Confirm `landing-builder` (or `landing-executor`, on a later
70
+ iteration) has produced a current build.
71
+ 2. Build and serve the page; capture screenshots per section, desktop
72
+ and mobile.
73
+ 3. Run the AI-tell check, the gap/rhythm check, and the taste pass
74
+ against the captured screenshots.
75
+ 4. Return either **clean** (state plainly what was checked) or
76
+ **redlines** — each one naming the specific section, the specific
77
+ visual defect, and (where useful) what a fix looks like, addressed to
78
+ `landing-executor`.
79
+
80
+ ## Self-test
81
+
82
+ - Every redline points at a specific section and names what's actually
83
+ wrong with it — "section 3's icon grid uses identical padding on all
84
+ four cards with no accent, reading as a generic template" is
85
+ actionable even without a named formula behind it; "section 3 feels
86
+ off" with nothing further isn't. Naming a check category isn't
87
+ required — naming the actual problem is.
88
+ - Nothing redlined here is actually a traceability, distinctiveness, or
89
+ usability-formula finding — those route to `landing-critic`, not this
90
+ loop.
91
+ - Screenshots were captured fresh this iteration, not reused from a
92
+ prior one.
93
+
94
+ ## Constraints
95
+
96
+ - Never patch or edit any file — you redline; `landing-executor` fixes.
97
+ - Never redline something `landing-critic` already owns (traceability,
98
+ the swap test, the default-cluster audit, Fitts's Law, affordance) —
99
+ if a visual symptom traces back to one of those, name it as an
100
+ observation but route the actual fix to a Correction Protocol case
101
+ against `landing-critic`'s findings, not a Polish Loop redline.
102
+ - Don't invent a redline to have something to report — a genuinely clean
103
+ pass is a valid, common outcome, especially on later iterations.
@@ -68,9 +68,8 @@ parsing and typing, and the layer after it consumes the result.
68
68
 
69
69
  ## Constraints
70
70
 
71
- - Never self-certify a task as done. Report what was built and that local
72
- checks pass; only `hedgehog verify`'s exit code moves a task to
73
- `complete`. Never run `git commit` for the task's own changes.
71
+ - Never self-certify a task as done or run `git commit` for its changes —
72
+ see Workflow step 4.
74
73
  - Never write outside the packet's ALLOWED SCOPE. Scope is what stops
75
74
  this layer from quietly rewriting the previous one's work; `hedgehog
76
75
  verify` enforces it, and a change that needs to land elsewhere is a