@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.
- package/README.md +3 -3
- package/bin/cli.mjs +11 -9
- package/package.json +3 -3
- package/src/agents/backend-eng.md +6 -8
- package/src/agents/front-end-eng.md +14 -18
- package/src/agents/landing-builder.md +1 -1
- package/src/agents/landing-executor.md +108 -0
- package/src/agents/landing-ux-reviewer.md +99 -0
- package/src/agents/landing-visual-reviewer.md +103 -0
- package/src/agents/layer-eng.md +2 -3
- package/src/agents/planner.md +119 -76
- package/src/agents/tweaker.md +43 -20
- package/src/hosts/capabilities.mjs +6 -1
- package/src/skills/hedgehog-authored-loop/SKILL.md +38 -36
- package/src/skills/hedgehog-bootstrap/SKILL.md +2 -5
- package/src/skills/hedgehog-bootstrap-full-stack-app-core/SKILL.md +10 -23
- package/src/skills/hedgehog-core-design/SKILL.md +23 -6
- package/src/skills/hedgehog-landing-loop/SKILL.md +165 -45
- package/src/skills/hedgehog-loop/SKILL.md +58 -8
- package/src/skills/hedgehog-planning-intake/SKILL.md +119 -18
- package/src/skills/landing-copy-cta/SKILL.md +5 -13
- package/src/skills/landing-copy-headline/SKILL.md +3 -3
- package/src/skills/landing-copy-hero/SKILL.md +1 -5
- package/src/skills/landing-copy-mechanism/SKILL.md +1 -6
- package/src/skills/landing-copy-objection/SKILL.md +3 -8
- package/src/skills/landing-copy-problem/SKILL.md +1 -5
- package/src/skills/landing-copy-proof/SKILL.md +1 -8
- package/src/skills/landing-shapes/SKILL.md +6 -9
- package/src/skills/nx-generate/SKILL.md +1 -4
- package/src/skills/nx-run-tasks/SKILL.md +1 -5
- package/src/skills/nx-workspace/SKILL.md +3 -28
- package/src/templates/CLAUDE.core.authored.md +11 -4
- package/src/templates/CLAUDE.core.full-stack-app.md +8 -4
- package/src/templates/CLAUDE.core.landing-page.md +27 -1
- package/src/templates/CLAUDE.md +41 -11
- package/{skills → vendor-skills}/BMAD/ATTRIBUTION.md +1 -1
- package/{skills → vendor-skills}/BMAD/bmm-skills/1-analysis/bmad-prfaq/SKILL.md +1 -1
- package/{skills → vendor-skills}/BMAD/bmm-skills/1-analysis/bmad-product-brief/SKILL.md +1 -1
- package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-prd/SKILL.md +1 -1
- package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/SKILL.md +1 -1
- package/{skills → vendor-skills}/BMAD/core-skills/bmad-advanced-elicitation/SKILL.md +1 -1
- package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/SKILL.md +1 -1
- package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/SKILL.md +1 -1
- /package/{skills → vendor-skills}/BMAD/LICENSE +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/1-analysis/bmad-prfaq/agents/artifact-analyzer.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/1-analysis/bmad-prfaq/agents/web-researcher.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/1-analysis/bmad-prfaq/assets/prfaq-template.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/1-analysis/bmad-prfaq/bmad-manifest.json +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/1-analysis/bmad-prfaq/customize.toml +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/1-analysis/bmad-prfaq/references/customer-faq.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/1-analysis/bmad-prfaq/references/internal-faq.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/1-analysis/bmad-prfaq/references/press-release.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/1-analysis/bmad-prfaq/references/verdict.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/1-analysis/bmad-product-brief/assets/brief-template.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/1-analysis/bmad-product-brief/customize.toml +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-prd/assets/headless-schemas.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-prd/assets/prd-template.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-prd/assets/prd-validation-checklist.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-prd/assets/validation-report-template.html +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-prd/customize.toml +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-prd/references/headless.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-prd/references/validate.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/assets/color-themes.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/assets/design-directions.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/assets/design-example-editorial.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/assets/design-example-mobile.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/assets/design-example-shadcn.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/assets/excalidraw-wireframe.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/assets/experience-example-mobile.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/assets/experience-example-shadcn.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/assets/headless-schemas.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/assets/key-screens.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/assets/validation-report-template.html +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/customize.toml +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/references/creative-tools.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/references/design-md-spec.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/references/headless.md +0 -0
- /package/{skills → vendor-skills}/BMAD/bmm-skills/2-plan-workflows/bmad-ux/references/validate.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-advanced-elicitation/assets/methods.csv +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-advanced-elicitation/customize.toml +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-advanced-elicitation/scripts/pick_methods.py +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-advanced-elicitation/scripts/tests/test_pick_methods.py +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/assets/brain-icons.json +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/assets/brain-methods.csv +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/assets/brain-selector.html +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/customize.toml +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/references/converge.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/references/finalize.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/references/headless.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/references/in-chat-techniques.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/references/mode-autonomous.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/references/mode-facilitator.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/references/mode-partner.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/references/resume.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/scripts/brain.py +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-brainstorming/scripts/tests/test_brain.py +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/assets/research.template.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/customize.toml +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/references/draft.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/references/finalize.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/references/html-briefing.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/references/lifecycle.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/references/process.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/references/run.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/references/selection.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/references/synthesis.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/references/verification.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/scripts/recon_kit.py +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/scripts/tests/test_recon_kit.py +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/types/academic-lit.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/types/competitive.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/types/domain.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/types/market.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/types/technical.md +0 -0
- /package/{skills → vendor-skills}/BMAD/core-skills/bmad-deep-recon/types/user-voice.md +0 -0
- /package/{skills → vendor-skills}/BMAD/scripts/memlog.py +0 -0
- /package/{skills → vendor-skills}/BMAD/scripts/resolve_customization.py +0 -0
- /package/{skills → vendor-skills}/BMAD/scripts/tests/test_memlog.py +0 -0
- /package/{skills → vendor-skills}/GSAP/ATTRIBUTION.md +0 -0
- /package/{skills → vendor-skills}/GSAP/LICENSE +0 -0
- /package/{skills → vendor-skills}/GSAP/gsap-core/SKILL.md +0 -0
- /package/{skills → vendor-skills}/GSAP/gsap-frameworks/SKILL.md +0 -0
- /package/{skills → vendor-skills}/GSAP/gsap-performance/SKILL.md +0 -0
- /package/{skills → vendor-skills}/GSAP/gsap-plugins/SKILL.md +0 -0
- /package/{skills → vendor-skills}/GSAP/gsap-react/SKILL.md +0 -0
- /package/{skills → vendor-skills}/GSAP/gsap-scrolltrigger/SKILL.md +0 -0
- /package/{skills → vendor-skills}/GSAP/gsap-timeline/SKILL.md +0 -0
- /package/{skills → vendor-skills}/GSAP/gsap-utils/SKILL.md +0 -0
- /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
|

|
|
@@ -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
|
|
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
|
|
161
|
-
// and skills/GSAP are re-vendored only
|
|
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
|
|
297
|
-
project-specific or updated deliberately, not by this
|
|
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
|
|
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
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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
|
|
91
|
-
|
|
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
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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 (
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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
|
|
96
|
-
|
|
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.
|
package/src/agents/layer-eng.md
CHANGED
|
@@ -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
|
|
72
|
-
|
|
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
|