@skyf0xx/hedgehog 3.0.7 → 3.0.8
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/package.json +1 -1
- package/src/agents/landing-headline-writer.md +2 -2
- package/src/agents/landing-sequencer.md +2 -1
- package/src/agents/landing-strategist.md +7 -2
- package/src/agents/landing-systems.md +2 -1
- package/src/agents/tweaker.md +4 -0
- package/src/skills/hedgehog-core-design/SKILL.md +20 -1
- package/src/skills/hedgehog-core-design/blueprints/browser-extension.md +36 -0
- package/src/skills/hedgehog-landing-loop/SKILL.md +22 -2
package/package.json
CHANGED
|
@@ -61,8 +61,8 @@ against its own archetype skill.
|
|
|
61
61
|
without confirmation risks the same expensive unwind the strategist's
|
|
62
62
|
Confirm & Lock protects against at step 1.
|
|
63
63
|
5. Write the locked headline and its 2 backups to
|
|
64
|
-
`.hedgehog/chain/09-headline.md
|
|
65
|
-
|
|
64
|
+
`.hedgehog/chain/09-headline.md` — you have no Bash tool, so the
|
|
65
|
+
orchestrating session commits it via `hedgehog verify`.
|
|
66
66
|
|
|
67
67
|
## Self-test
|
|
68
68
|
|
|
@@ -118,7 +118,8 @@ rather than in separate passes.
|
|
|
118
118
|
6. Confirm the peak moment and ending treatment land where
|
|
119
119
|
`landing-strategist` specified, or flag the conflict.
|
|
120
120
|
7. Self-test (below).
|
|
121
|
-
8.
|
|
121
|
+
8. Present the artifact — you have no Bash tool, so the orchestrating
|
|
122
|
+
session commits it via `hedgehog verify`.
|
|
122
123
|
|
|
123
124
|
## Self-test
|
|
124
125
|
|
|
@@ -56,7 +56,11 @@ as planning intake's own Confirm & Lock: every phase from here through
|
|
|
56
56
|
`landing-copywriter` inherits this framing silently, and by the time
|
|
57
57
|
copy is reviewed at phases 9–10, correcting the framing means unwinding
|
|
58
58
|
multiple committed phases via the Correction Protocol instead of one
|
|
59
|
-
quick revision now.
|
|
59
|
+
quick revision now. **If delegated**, this confirmation arrives as a
|
|
60
|
+
relay from the orchestrating session — accept it only if it quotes the
|
|
61
|
+
user's actual words with provenance stated plainly, not a bare "the user
|
|
62
|
+
approved" (see `hedgehog-landing-loop`'s Loop step 2 for the exact form).
|
|
63
|
+
A revision at this point is just another pass at
|
|
60
64
|
Step 1, not a Correction Protocol entry, since nothing downstream exists
|
|
61
65
|
yet.
|
|
62
66
|
|
|
@@ -117,7 +121,8 @@ adjective is meant to fade rather than hold constant throughout the page.
|
|
|
117
121
|
confirmed subject statement.
|
|
118
122
|
5. Run step 4c (Perfumer) against the completed sort from step 3.
|
|
119
123
|
6. Self-test (below) before presenting the combined artifact.
|
|
120
|
-
7.
|
|
124
|
+
7. Present the combined artifact — you have no Bash tool, so the
|
|
125
|
+
orchestrating session commits it via `hedgehog verify`.
|
|
121
126
|
|
|
122
127
|
## Self-test
|
|
123
128
|
|
|
@@ -239,7 +239,8 @@ and generic clip-art geometry.
|
|
|
239
239
|
4. Run step 6 against the completed token system. Write the signature
|
|
240
240
|
element into `src/shapes/`.
|
|
241
241
|
5. Self-test (below).
|
|
242
|
-
6.
|
|
242
|
+
6. Present the combined artifact — you have no Bash tool, so the
|
|
243
|
+
orchestrating session commits it via `hedgehog verify`.
|
|
243
244
|
|
|
244
245
|
## Self-test
|
|
245
246
|
|
package/src/agents/tweaker.md
CHANGED
|
@@ -214,6 +214,10 @@ discipline as `.hedgehog/BMAD/`. A later related incident is its own new
|
|
|
214
214
|
having happened in this conversation. A user saying "yes, file it"
|
|
215
215
|
before the content was shown verbatim doesn't count — show first, then
|
|
216
216
|
ask.
|
|
217
|
+
- **If delegated**, an approval relayed by the orchestrating session is
|
|
218
|
+
sufficient only if it quotes the user's actual words with provenance
|
|
219
|
+
stated plainly — e.g. "user said: '\<exact words\>'" — not a bare "the
|
|
220
|
+
user approved" or "approved via UI."
|
|
217
221
|
- File one issue per distinct real pattern or feedback item, not one per
|
|
218
222
|
log entry or remark, and not capped at a single issue per source — a
|
|
219
223
|
log (or a round of feedback) with several unrelated genuine points gets
|
|
@@ -167,7 +167,9 @@ alike:
|
|
|
167
167
|
|
|
168
168
|
Four to seven layers is the usual range. Fewer than three means the
|
|
169
169
|
project probably wanted a shipped core or no core at all; more than eight
|
|
170
|
-
means several layers are one layer with internal steps.
|
|
170
|
+
means several layers are one layer with internal steps. This list isn't
|
|
171
|
+
final until Step 4 — a module axis can still add a cross-cutting layer to
|
|
172
|
+
it.
|
|
171
173
|
|
|
172
174
|
## Step 4 — decide the module axis
|
|
173
175
|
|
|
@@ -193,6 +195,23 @@ intent A's task may write intent B's files and the scope enforcement that
|
|
|
193
195
|
justifies authoring a core at all disappears. Check every glob before
|
|
194
196
|
writing the file.
|
|
195
197
|
|
|
198
|
+
On a module axis, also **ask explicitly whether the stack implies
|
|
199
|
+
cross-cutting infrastructure no single module should own** — a shared
|
|
200
|
+
background script coordinating state across every module's tabs (a
|
|
201
|
+
browser extension), a shared event bus, global app state. Every layer in
|
|
202
|
+
Step 3 instantiates once per intent; this is the thing that doesn't fit
|
|
203
|
+
that shape, and left undesigned it either gets deferred with no owner or
|
|
204
|
+
bolted onto whichever module's layer needs it first, quietly widening
|
|
205
|
+
that layer's scope past what it was designed to own.
|
|
206
|
+
|
|
207
|
+
If yes, add it to Step 3's layer sequence as its own layer, before the
|
|
208
|
+
file is written — a layer whose `scope` is a fixed path with no
|
|
209
|
+
`{module}` placeholder, the same way `full-stack-app`'s own `schema` and
|
|
210
|
+
`contract` layers run once against a fixed scope on an otherwise
|
|
211
|
+
module-axis core. Name it for what it owns (e.g. `background-infra`),
|
|
212
|
+
give it its own `verify` command, and record in `core-design.md` why no
|
|
213
|
+
single module was made to own it.
|
|
214
|
+
|
|
196
215
|
## Step 5 — write `.hedgehog/core.yaml`
|
|
197
216
|
|
|
198
217
|
The loader parses `id` plus a `layers` list of flat maps. Every layer
|
|
@@ -17,6 +17,10 @@ popup — the extension UI, consumes background/content only through messag
|
|
|
17
17
|
- Drop `popup` entirely for an extension with no browser action UI.
|
|
18
18
|
- Merge `content` into `background` when the extension never injects into
|
|
19
19
|
page context (a pure background-worker extension).
|
|
20
|
+
- On a module axis, `background` is often shared rather than
|
|
21
|
+
one-per-module (a single service worker coordinating state across every
|
|
22
|
+
module's tabs) — the cross-cutting infrastructure Step 4 asks about.
|
|
23
|
+
Give it its own fixed-scope layer there.
|
|
20
24
|
|
|
21
25
|
## Boundary that must hold
|
|
22
26
|
|
|
@@ -24,3 +28,35 @@ popup — the extension UI, consumes background/content only through messag
|
|
|
24
28
|
cross-context call goes through `messaging`, because a WebExtension's
|
|
25
29
|
contexts are separate JS runtimes and a direct import silently fails at
|
|
26
30
|
runtime rather than at build time.
|
|
31
|
+
|
|
32
|
+
## WXT entrypoint naming (must decide up front, not discover mid-build)
|
|
33
|
+
|
|
34
|
+
WXT derives an entrypoint's manifest name by splitting its `entrypoints/`
|
|
35
|
+
folder or file name at the **first** `.`. Two entrypoints that derive the
|
|
36
|
+
same name collide — observed failure modes include a build-time error
|
|
37
|
+
("Multiple entrypoints with the same name detected") and, in at least one
|
|
38
|
+
case, a colliding entrypoint silently missing from the built manifest
|
|
39
|
+
(`.output/*/manifest.json`) with no error at all. Don't assume which one
|
|
40
|
+
fires for a given WXT version or collision shape; treat any collision as
|
|
41
|
+
unsafe rather than relying on the build to always catch it.
|
|
42
|
+
|
|
43
|
+
Decide the naming convention in this step, per module, before any layer
|
|
44
|
+
is built against it — not after the first collision is hit:
|
|
45
|
+
|
|
46
|
+
- **Every entrypoint with more than one surface lives in its own folder**,
|
|
47
|
+
`entrypoints/{module}/index.ts`, never a flat `entrypoints/{module}.ts`
|
|
48
|
+
— a folder has no `.`-split ambiguity to collide on.
|
|
49
|
+
- **Colocated tests go inside that same folder** as a sibling
|
|
50
|
+
(`entrypoints/{module}/index.test.ts`), never as a flat
|
|
51
|
+
`entrypoints/{module}.test.ts` next to a flat entrypoint file — that's
|
|
52
|
+
the same name-collision shape described above.
|
|
53
|
+
- **A module with two entrypoint surfaces** (e.g. popup and content) gets
|
|
54
|
+
two folder names that don't share a prefix before the first `.` —
|
|
55
|
+
`entrypoints/{module}-popup/` and `entrypoints/{module}-content/`, never
|
|
56
|
+
a dotted variant like `entrypoints/{module}.content/`.
|
|
57
|
+
|
|
58
|
+
Add a cheap, generic guard to the entrypoint layer's `verify` command
|
|
59
|
+
regardless of the convention chosen: after `pnpm wxt build`, check the
|
|
60
|
+
built manifest's entrypoint count against the expected count (e.g. `node
|
|
61
|
+
-e "..."` reading `.output/*/manifest.json`) so a silent drop fails
|
|
62
|
+
`verify` instead of surfacing later as a missing feature.
|
|
@@ -150,10 +150,27 @@ paragraph algorithm, and their self-tests.
|
|
|
150
150
|
section, in `landing-sequencer`'s order, every section reviewed and
|
|
151
151
|
locked before the next starts, all still inside the one `sequence`
|
|
152
152
|
task.
|
|
153
|
+
|
|
154
|
+
**Relaying a live user-confirmation checkpoint to a delegated
|
|
155
|
+
subagent.** Phase 1 (Strategist) carries a hard-stop checkpoint per
|
|
156
|
+
Phase Transition Checks below, and a delegated subagent instance has no
|
|
157
|
+
channel for the user to address it directly. The orchestrating session
|
|
158
|
+
relays the confirmation instead, and the relay is sufficient only if it
|
|
159
|
+
quotes the user's actual words with its provenance stated plainly
|
|
160
|
+
(*"Relaying the user's own confirmation, verbatim — user said:
|
|
161
|
+
'\<exact words\>'"*) rather than asserting the outcome ("the user
|
|
162
|
+
approved"). This trusts the orchestrator's honesty about provenance,
|
|
163
|
+
the same trust the rest of this discipline already places in it for
|
|
164
|
+
relaying artifacts and task packets.
|
|
153
165
|
3. Each agent **runs its own self-test** (see that agent's own file for
|
|
154
166
|
what it checks) before presenting its artifact — necessary, not
|
|
155
167
|
sufficient. This is a sanity check the agent does for itself; it does
|
|
156
|
-
not move the task and the agent does not commit its own work
|
|
168
|
+
not move the task and the agent does not commit its own work, whether
|
|
169
|
+
run directly or delegated to a subagent instance. `landing-strategist`,
|
|
170
|
+
`landing-systems`, `landing-sequencer`, and `landing-headline-writer`
|
|
171
|
+
carry no Bash tool at all (`capabilities.mjs`), so the commit is always
|
|
172
|
+
the orchestrating session's act via `hedgehog verify`, never the phase
|
|
173
|
+
agent's own.
|
|
157
174
|
4. Once every phase inside the packet's layer has been presented and
|
|
158
175
|
locked by the user, **run `hedgehog verify <task-id>`.** It checks the
|
|
159
176
|
touched files against the packet's ALLOWED SCOPE, runs the layer's
|
|
@@ -216,7 +233,10 @@ the whole chain to correct the core framing (nothing downstream exists
|
|
|
216
233
|
yet); every phase after it inherits that framing silently, and by the
|
|
217
234
|
time copy is reviewed at phases 9–10, a wrong framing means unwinding
|
|
218
235
|
several committed phases via the Correction Protocol instead of one free
|
|
219
|
-
revision here.
|
|
236
|
+
revision here. If step 1 was run by a delegated `landing-strategist`
|
|
237
|
+
subagent instance, the confirmation reaches it as a relay from the
|
|
238
|
+
orchestrating session — see The Loop above for the provenance statement
|
|
239
|
+
that relay must carry.
|
|
220
240
|
|
|
221
241
|
Before `landing-copywriter` starts (phase 10), confirm
|
|
222
242
|
`landing-headline-writer`'s headline has been presented to and locked by
|