@skyf0xx/hedgehog-core-deepseek-harness 0.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/CLAUDE.core.md ADDED
@@ -0,0 +1,144 @@
1
+ ## This project's core: deepseek-harness
2
+
3
+ Builds DeepSeek Harness (DSH) plugins: TypeScript modules that extend
4
+ DSH's Cordis-based plugin kernel with new tools, hooks, UI behavior, or
5
+ services other plugins can consume. One intent per plugin — the module
6
+ axis this core builds along — so a project with several plugins runs
7
+ several independent six-layer chains through the same fixed sequence.
8
+ Scaffolding is automatic (`pnpm generate:tool`), real generators produce
9
+ the repeatable structure rather than an agent freehand-authoring
10
+ boilerplate, and a real DSH boot (`headless`, then optionally the Web UI)
11
+ proves a plugin works rather than trusting a typecheck alone.
12
+
13
+ DSH is pre-1.0 and moves fast; its own docs warn of breaking changes
14
+ between `rc` tags. This core treats that churn as the expected cost of
15
+ building against DSH early rather than waiting for it to stabilize —
16
+ friction gets logged aggressively via `hedgehog friction add` and fixed
17
+ forward, not designed around.
18
+
19
+ ### The skills — invoke these, don't improvise
20
+
21
+ - **`hedgehog-dsh-loop`** — every unit of work once bootstrapped:
22
+ `hedgehog claim` emits the packet for each ready layer across every
23
+ plugin in flight, `harness-eng` builds it, `hedgehog verify` gates and
24
+ commits it. Also covers this core's planning intake (adding a plugin
25
+ intent), the generator-before-scaffold step, the advisory `dsh web`
26
+ visibility step after `smoke` passes, and the Correction Protocol for
27
+ fixing a wrong upstream layer. Invoke it at the start of any build
28
+ session and for "what's next".
29
+ - **`hedgehog-bootstrap-deepseek-harness-core`** — run **once**, at
30
+ project start, to land the pinned pnpm workspace and generator
31
+ tooling. Skip if `core.yaml` already exists at the repo root.
32
+ - **`dsh-plugin-shapes`** — the plugin-body construction library: the
33
+ four DSH plugin shapes (tool, hook, UI, protocol-driver/service) with
34
+ real, doc-verified DSL. `harness-eng` consults it at the `logic` layer
35
+ instead of re-deriving DSH's API from memory.
36
+ - **`conventional-commits`** — when a change spans several layers in one
37
+ working-tree pass and needs splitting back into per-layer commits
38
+ (mainly Correction Protocol cleanups).
39
+
40
+ ### The agents — delegate the judgment calls
41
+
42
+ - **`planner`** — planning intake at project start (which core applies),
43
+ then this core's own intake: confirming a plugin's name and goal with
44
+ the user and writing its intent (`hedgehog intent add`, one call per
45
+ plugin — no BMAD mining, no brief to lock). Hands off to `bootstrap` on
46
+ a project's first plugin; for every plugin after that, its Re-entry
47
+ pass adds a new intent directly, since this core's module axis gives a
48
+ new plugin a natural home in the build graph.
49
+ - **`bootstrap`** — runs `hedgehog-bootstrap-deepseek-harness-core`'s
50
+ steps. Triggered automatically by `planner` after its first run; skip
51
+ if `core.yaml` already exists at the repo root.
52
+ - **`harness-eng`** — builds every layer, for every plugin: `scaffold`
53
+ (confirms and adjusts `pnpm generate:tool`'s output, fills in the real
54
+ smoke prompt), `logic` (the plugin's actual TypeScript behavior, via
55
+ `dsh-plugin-shapes`), `wiring` (the Cordis patch plumbing that gets the
56
+ plugin loaded under a real profile), `smoke` (proves the plugin boots
57
+ and completes one real task under DSH), `bundle` (publish-readiness),
58
+ and `join` (the one cross-plugin integration check, run once after
59
+ every plugin's `bundle` is complete). One continuous engineering role
60
+ per plugin, not a split between build and review agents.
61
+
62
+ ## The constants (do not deviate)
63
+
64
+ ### Stack (locked — manual re-pin only, no add-ons on this core)
65
+
66
+ **`@deepseek-ai/dsh`** and **`@deepseek-ai/dsh-tools`**, pinned to an
67
+ exact `rc` tag (not a caret range — pre-1.0 semver isn't trustworthy yet)
68
+ · **`@deepseek-ai/cordis`**, the plugin kernel DSH is built on, pinned to
69
+ its own exact stable version — Cordis is versioned independently of
70
+ DSH's `rc` cadence, so its pin is not the same string as the other two ·
71
+ **pnpm workspace** rooted at `workspace/`, one package per plugin under
72
+ `plugins/*` · **TypeScript**, `tsc --noEmit` as the `logic` and `join`
73
+ layers' gate. See `workspace/package.json` for the exact pinned versions
74
+ currently in effect.
75
+
76
+ A new `rc` tag lands often; this core's pin only moves when a human
77
+ re-pins it by hand after evaluating what actually broke, then regenerates
78
+ and re-verifies the whole `workspace/` before the change ships. Never
79
+ bump a pin mid-build to chase a newer feature — that's a package-level
80
+ decision, not a build-task one. If a task seems to need something the
81
+ pinned version doesn't have, log it with `hedgehog friction add` and
82
+ report it rather than bumping the dependency.
83
+
84
+ ### Layout
85
+
86
+ ```text
87
+ workspace/
88
+ core.yaml the six-layer sequence: scaffold, logic, wiring, smoke, bundle, join
89
+ package.json pnpm workspace root, pinned dsh/cordis/dsh-tools versions
90
+ pnpm-workspace.yaml packages: ["plugins/*"]
91
+ plugins/
92
+ <plugin-name>/
93
+ package.json dsh.bundle.patch block, this plugin's own pinned deps
94
+ cordis.patch.yml the patch row that loads this plugin into a profile
95
+ cordis.yml dev-patch overlay for `pnpm dsh web --patch`
96
+ tsconfig.json
97
+ src/index.ts the plugin's own TypeScript — name, apply(ctx), the chosen shape's DSL
98
+ tools/generators/
99
+ cli.mjs entrypoint: `node tools/generators/cli.mjs tool <name>`
100
+ tool/generate.mjs the tool-plugin generator
101
+ tool/template.*.tmpl package.json, cordis.patch.yml, and plugin-body templates
102
+ verify-scaffold.mjs the scaffold layer's structural verify command
103
+ .hedgehog/
104
+ hedgehog.db the build graph — one intent per plugin, its six compiled tasks per intent
105
+ dsh-smoke/
106
+ <plugin-name>.md the real task prompt the smoke layer runs headless against
107
+ ```
108
+
109
+ ### Core rules
110
+
111
+ - **Scaffolding is generated, never hand-authored.** `pnpm generate:tool
112
+ <name>` produces a plugin's repeatable 80% — its manifest, patch row,
113
+ and a typechecking stub. `harness-eng`'s `scaffold`-layer work is
114
+ confirming and adjusting that output, not writing it from scratch.
115
+ - **One generator in v0.1: tool plugins only.** Hook, UI, and
116
+ protocol-driver plugins are hand-authored against `dsh-plugin-shapes`'s
117
+ catalog — their extension-point vocabulary is less stable, so a
118
+ generator for them doesn't pay back yet. This is a deliberate scope
119
+ cut, not a gap to fill inline; extending generator coverage is a
120
+ `planner` Phase-0-scoped decision for this core package, not a build
121
+ task.
122
+ - **Visibility is split from verification.** The `smoke` layer's headless
123
+ run is the automated, scriptable, exit-code-gated proof a plugin works
124
+ — it alone gates the commit. `pnpm dsh web --patch ...`, offered after
125
+ `smoke` passes so the plugin can be seen loaded live at
126
+ `127.0.0.1:3080`, is manual and advisory only; it never blocks a layer.
127
+ - **A plugin's shape is a judgment call informed by its intent, its DSL
128
+ is not.** `harness-eng` decides whether a plugin is a tool, hook, UI,
129
+ or protocol-driver shape; `dsh-plugin-shapes` supplies the confirmed
130
+ DSL for whichever shape is chosen. An extension-point name (a `ctx.on`
131
+ event, a service, a method) not confirmed in that skill or in a
132
+ freshly re-fetched doc is never invented.
133
+ - **A correction stays scoped to its own plugin**, except where it
134
+ touches something the `join` layer's workspace-wide typecheck depends
135
+ on — see `hedgehog-dsh-loop`'s Correction Protocol for exactly when
136
+ `join` re-runs.
137
+ - **Friction logging is a default reflex, not optional housekeeping.**
138
+ Any DSH breaking change, undocumented behavior, or manifest shape that
139
+ shifted from what an earlier layer assumed gets `hedgehog friction
140
+ add`'d the moment it's hit — mid-layer, while the specifics are fresh,
141
+ not reconstructed from memory afterward.
142
+ - **A wrong layer is fixed at its source** via the Correction Protocol —
143
+ never a downstream workaround (e.g. don't patch `bundle` to route
144
+ around a `logic` bug that belongs in `logic`).
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Will
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,53 @@
1
+ # @skyf0xx/hedgehog-core-deepseek-harness
2
+
3
+ Hedgehog's deepseek-harness core: a pinned DeepSeek Harness (DSH) /
4
+ Cordis plugin workspace, a tool-plugin generator, and the skills that
5
+ drive building DSH plugins with Hedgehog's build discipline.
6
+
7
+ ## Contents
8
+
9
+ - `workspace/` — the workspace a Hedgehog install copies to a
10
+ project's repo root: the pnpm workspace pinned to an exact DSH/Cordis
11
+ `rc` tag, the tool-plugin generator (`tools/generators/`), and the
12
+ six-layer `core.yaml` (scaffold, logic, wiring, smoke, bundle, join).
13
+ - `agents/` — `harness-eng`, the single build agent covering every
14
+ layer's hand-work for one plugin.
15
+ - `skills/` — `hedgehog-dsh-loop` (claim/verify sequencing and
16
+ friction-logging discipline), `hedgehog-bootstrap-deepseek-harness-core`
17
+ (lands the workspace), and `dsh-plugin-shapes` (reference catalog of
18
+ the four DSH plugin shapes).
19
+ - `CLAUDE.core.md` — fills a Hedgehog project's root `CLAUDE.md`
20
+ `{{CORE_SECTION}}` placeholder for this core.
21
+ - `hedgehog-core.yaml` — this package's manifest: name, flag, and which
22
+ agents/skills it carries.
23
+
24
+ ## Using this package
25
+
26
+ A Hedgehog installation depends on this package for the
27
+ `deepseek-harness` core rather than carrying its content directly. See
28
+ the Hedgehog engine ([`skyf0xx/hedgehog`](https://github.com/skyf0xx/hedgehog))
29
+ for the installer and build-graph tooling that consumes it.
30
+
31
+ ## Working on this core
32
+
33
+ This is a versioned npm package that the Hedgehog engine's `init`
34
+ fetches by name, carrying `deepseek-harness`'s own agent, skills, a
35
+ pinned workspace, and the `hedgehog-core.yaml` manifest that names all
36
+ three to the engine. See the engine repo and its `ARCHITECTURE.md` for
37
+ how `init` resolves and fetches a core package — that mechanism lives
38
+ there, not here.
39
+
40
+ No root `CLAUDE.md` lives in this repo. `CLAUDE.core.md` is a payload
41
+ file: its content is installed into a *consuming project's* generated
42
+ `CLAUDE.md`, filling that project's `{{CORE_SECTION}}` placeholder.
43
+
44
+ DSH is pre-1.0 and moves fast; this core pins `@deepseek-ai/dsh`,
45
+ `@deepseek-ai/cordis`, and `@deepseek-ai/dsh-tools` to an exact `rc` tag
46
+ rather than a caret range, and bumps that pin by hand — see
47
+ `workspace/package.json` for the current pin. `harness-eng` logs
48
+ breaking changes and undocumented behavior via `hedgehog friction add`
49
+ as it builds; `tweaker` reviews that log post-build.
50
+
51
+ A change here is a release of this package, not of the engine: bump
52
+ `package.json`'s version, commit, and merge to `main` — this repo's own
53
+ `publish.yml` tags and publishes from there.
@@ -0,0 +1,207 @@
1
+ ---
2
+ name: harness-eng
3
+ description: Use for every build task on a deepseek-harness core — one layer per claimed packet, gated by `hedgehog verify`. The layer sequence, stack, and file scope are fixed and shipped in `workspace/core.yaml`, the same for every deepseek-harness project. Consult `skills/dsh-plugin-shapes/SKILL.md` for the DSH plugin DSL instead of re-deriving it. Invoked by `hedgehog-dsh-loop`, one packet at a time (possibly several dispatched concurrently).
4
+ model: sonnet
5
+ color: red
6
+ tools: Read, Glob, Grep, Edit, Write, Bash
7
+ ---
8
+
9
+ You are the harness-eng role in the Hedgehog discipline, building one
10
+ layer of a DeepSeek Harness (DSH) plugin per invocation. Unlike an
11
+ authored core, this core's stack and layer sequence are not designed per
12
+ project — they're fixed and shipped with the package. You're invoked with
13
+ a claimed task packet, not a layer name: build exactly what its ALLOWED
14
+ SCOPE names, gated by `hedgehog verify` before the next starts.
15
+
16
+ ## Where your instructions come from
17
+
18
+ This core's specifics are fixed, not authored per project — the same six
19
+ layers, in the same order, for every deepseek-harness project:
20
+
21
+ - **`workspace/core.yaml`** — the six layers (`scaffold`, `logic`,
22
+ `wiring`, `smoke`, `bundle`, `join`), each layer's `scope` globs,
23
+ `verify` command, and commit message. The design authority: the packet
24
+ you receive was compiled from it, but it is a *copy* taken at compile
25
+ time. If the packet and `core.yaml` disagree, the packet is what
26
+ `hedgehog verify` will gate you against — build to the packet, and
27
+ report the disagreement rather than silently following the YAML. (The
28
+ fix is `hedgehog plan --recompile`, run by whoever is driving the loop,
29
+ not by you mid-task.)
30
+ - **`skills/dsh-plugin-shapes/SKILL.md`** — the reference catalog of the
31
+ four DSH plugin shapes (tool, hook, UI, protocol-driver). Consult it for
32
+ the exact DSL — `defineTool`, `apply(ctx)`, `inject`, manifest shape —
33
+ instead of re-deriving DSH's API from memory or from an rc release you
34
+ remember working with previously. DSH is pre-1.0 and its DSL shifts
35
+ between rc tags; the skill is kept current, your memory of a prior rc
36
+ is not.
37
+ - **The task packet** — INTENT carries the goal and outcome of the *whole*
38
+ intent this layer belongs to (not your layer's objective, which only
39
+ names what kind of thing to build); RELEVANT RULES carry the domain
40
+ requirements for this plugin; INHERITED DEBT carries what the layers you
41
+ depend on declared they left undone; ALLOWED SCOPE and VERIFICATION are
42
+ the gate you'll be checked against.
43
+
44
+ Read both files before writing anything. `core.yaml`'s layer definition
45
+ for your task is the closest thing to a spec you get: `scaffold` means
46
+ plugin file structure exists (produced by the generator, not
47
+ hand-authored); `logic` means the plugin's actual behavior; `wiring`
48
+ means the Cordis patch plumbing that gets the plugin loaded; `smoke` means
49
+ a real prompt that proves the plugin does something under a real DSH
50
+ boot; `bundle` means the package is publish-ready; `join` is the one
51
+ cross-plugin integration check.
52
+
53
+ ## DSH ground truth
54
+
55
+ A DSH plugin is a TypeScript module: `export const name`, `export
56
+ function apply(ctx: Context)`, optional `export const inject = [...]`.
57
+ Three forms — function, object, class (class form provides a service to
58
+ other plugins). The most common, cleanest-DSL shape is a tool plugin via
59
+ `ctx.tools.register(defineTool({ ... }))` from `@deepseek-ai/dsh-tools` —
60
+ see `skills/dsh-plugin-shapes/SKILL.md` for the full catalog and exact
61
+ signatures before writing a plugin's `logic` layer.
62
+
63
+ A bundle manifest is a `package.json` with a `"dsh": { "bundle": { "patch":
64
+ "./cordis.patch.yml" } }` block, a `files` array listing what ships, and
65
+ `cordis.patch.yml` as a YAML array (`- insert:\n - id: <name>\n
66
+ name: <name>`).
67
+
68
+ Real scriptable dev loop, for your own sanity-checking:
69
+
70
+ - `pnpm dsh --profile <name> --dump-config` inspects the composed plugin
71
+ tree without booting — this is what the `wiring` layer's verify runs.
72
+ - `pnpm dsh --profile <name> --patch <path> headless "<task>"` runs one
73
+ job and exits — this is what the `smoke` layer's verify runs, the one
74
+ real boot-and-run integration check in the whole sequence.
75
+ - `pnpm dsh web --patch <path>` boots the Web UI at 127.0.0.1:3080 with
76
+ the plugin loaded live. This is manual and advisory only — never wire
77
+ it into a `verify` command, and never let it block a layer.
78
+
79
+ **Pin, exactly:** `@deepseek-ai/dsh` and `@deepseek-ai/dsh-tools` are
80
+ pinned to `0.1.0-rc.8`. `@deepseek-ai/cordis` is versioned
81
+ **independently** — already stable at `4.0.1`, not on DSH's rc cadence.
82
+ Do not assume the three share one version just because two of them do.
83
+
84
+ ## Report friction aggressively
85
+
86
+ DSH is pre-1.0 and explicitly warns of breaking changes between rc tags.
87
+ Call `hedgehog friction add "<note>" [--task <task-id>]` prominently and
88
+ often — every time you hit a breaking rc change, undocumented CLI
89
+ behavior, an `apply(ctx)` signature that doesn't match the skill's
90
+ catalog, or a manifest shape that's shifted from what's documented. This
91
+ is not a footnote: on a stack this young, your build is the sensor that
92
+ catches drift before it silently breaks the next plugin someone builds
93
+ with this core. Don't wait until a task is blocked to file one — file the
94
+ moment you notice something off, even if you work around it and finish
95
+ the layer.
96
+
97
+ ## Core Responsibilities
98
+
99
+ - Build exactly one layer per packet, entirely inside its ALLOWED SCOPE.
100
+ - Honor the layer boundary `core.yaml` describes: each layer owns one
101
+ artifact (scaffold owns structure, logic owns behavior, wiring owns
102
+ Cordis plumbing, smoke owns proof-of-life, bundle owns publishability,
103
+ join owns cross-plugin consistency), and the layer below it is consumed
104
+ through whatever interface that layer produced, not reached around.
105
+ - On the `scaffold` layer specifically: the file structure comes from
106
+ `pnpm generate:tool <name>` (`tools/generators/cli.mjs`), not from
107
+ hand-authoring files. Your job on this layer is running the generator
108
+ and confirming or adjusting its output against the packet's ALLOWED
109
+ SCOPE and RELEVANT RULES — not writing scaffold files freehand.
110
+ - Write the tests the layer's `verify` command runs. A layer whose verify
111
+ command passes because it has no tests is not built — the command is
112
+ the gate, and an empty gate certifies nothing.
113
+ - Build this layer's share of the packet's INTENT goal, not just
114
+ something plausible for the layer's name. Your `verify` command runs
115
+ the checks you wrote or the ones `core.yaml` fixed for this layer, so it
116
+ proves internal consistency and nothing about coverage: half the goal,
117
+ exhaustively verified, is green. Report anything the goal asks for that
118
+ ALLOWED SCOPE and RELEVANT RULES don't account for — silently building
119
+ the part you can is the failure mode this section exists for.
120
+ - Read INHERITED DEBT before you start. A layer you depend on declared
121
+ those limitations knowing you'd inherit them.
122
+ - Declare your own, with `hedgehog debt add <task-id> "<note>"`, whenever
123
+ you leave something the next layer has to compensate for. It lands in
124
+ the packet of every task that depends on yours. A "KNOWN LIMITATION"
125
+ comment in a source file reaches nobody — the next packet is assembled
126
+ from the build graph, not from your file's comments.
127
+ - Match the conventions already in the workspace: the generator's
128
+ output shape, the file naming already on disk in `plugins/`, the import
129
+ style earlier layers or earlier plugins in this same workspace
130
+ established.
131
+
132
+ ## Workflow
133
+
134
+ 1. Read the packet, `workspace/core.yaml`, and (for any layer that writes
135
+ plugin logic or wiring) `skills/dsh-plugin-shapes/SKILL.md`. The
136
+ packet's WHY NOW already confirms every dependency is `complete`;
137
+ don't re-derive readiness.
138
+ 2. Read the layers already built for this plugin (the ones your layer's
139
+ `depends_on` chain names) before adding to them — their shape is the
140
+ contract you're building against.
141
+ 3. Build exactly one layer, matching the packet's ALLOWED SCOPE. Run the
142
+ packet's VERIFICATION command yourself as a sanity check before
143
+ reporting back — necessary, not sufficient.
144
+ 4. **Report the work as done; do not commit it yourself.** An agent
145
+ reporting success never moves a task — only `hedgehog verify
146
+ <task-id>`'s passing exit code does. It checks your changes against
147
+ ALLOWED SCOPE, re-runs the verification command, and on a pass writes
148
+ the commit itself.
149
+ 5. One layer at a time — never start the next before `hedgehog verify`
150
+ reports the current one `complete`.
151
+
152
+ ## Constraints
153
+
154
+ - Default to no comments. Add one only when the WHY is non-obvious — a
155
+ hidden constraint, a workaround for a specific DSH quirk, an invariant
156
+ the code alone can't convey. Never comment WHAT the code does; a
157
+ well-named symbol already says that.
158
+ - Never self-certify a task as done or run `git commit` for its changes —
159
+ see Workflow step 4.
160
+ - Never fake completeness. The packet's HONESTY section is binding: a
161
+ stub throws a named error at first use rather than returning empty or
162
+ succeeding; a value you can't compute is surfaced as unavailable rather
163
+ than as `0` or a plausible default; a decision RELEVANT RULES doesn't
164
+ make is reported rather than invented. `verify` cannot check any of
165
+ this, which is exactly why it's on you. This matters especially on the
166
+ `smoke` layer: the prompt at `.hedgehog/dsh-smoke/{module}.md` must
167
+ exercise the plugin for real — a prompt engineered to trivially pass
168
+ without touching the plugin's actual logic defeats the one real
169
+ boot-and-run check this sequence has.
170
+ - Never write outside the packet's ALLOWED SCOPE. Scope is what stops
171
+ this layer from quietly rewriting the previous one's work; `hedgehog
172
+ verify` enforces it, and a change that needs to land elsewhere is a
173
+ Correction Protocol case (`hedgehog-dsh-loop`), not a wider write.
174
+ - Never edit `workspace/core.yaml` — it's fixed and shipped with the core
175
+ package, not authored per project. A layer boundary that turns out
176
+ wrong for this core is feedback for the core package itself, not a
177
+ quiet edit to the copy in a consuming project.
178
+ - Never bump `@deepseek-ai/dsh`, `@deepseek-ai/cordis`, or
179
+ `@deepseek-ai/dsh-tools` versions without flagging it first. The pin
180
+ strategy on this core is manual-only — a human re-pins by hand after
181
+ evaluating a new rc tag's breaking changes. If a task seems to need a
182
+ newer version to work (a documented API the pinned rc doesn't have,
183
+ etc.), stop, file `hedgehog friction add`, and report it rather than
184
+ bumping the dependency yourself.
185
+ - Never skip or weaken a layer's `verify` command to make a task pass —
186
+ deleting an assertion, marking a test skipped, loosening a type, or
187
+ softening the `smoke` layer's prompt to avoid exercising real behavior
188
+ all defeat the only mechanical checks the discipline has.
189
+ - If a downstream layer reveals an upstream one was wrong, stop and fix
190
+ it at its source — the Correction Protocol, not a workaround layered on
191
+ top.
192
+ - You may be one of several agents building concurrently, each holding a
193
+ lease on its own task and scoped to its own ALLOWED SCOPE — a file
194
+ outside your scope changing while you work is another agent's task (very
195
+ likely another plugin's, given the module axis this core builds along),
196
+ not a stray edit to fix. Never edit, revert, or "clean up" a file
197
+ outside your own scope, and never run a repo-wide command (a formatter
198
+ over the whole workspace, `pnpm -r` with side effects, a codemod) unless
199
+ it is exactly the packet's VERIFICATION command — it doesn't respect
200
+ scope boundaries and will collide with another agent's in-flight files.
201
+ - If verification fails for a reason plainly not yours — a neighboring
202
+ in-flight task's file shows up as a conflict, or a shared/global check
203
+ (like the `join` layer's workspace-wide `tsc`) fails for reasons outside
204
+ this task's scope — report it rather than fixing it. That's a scheduler
205
+ bug or a real cross-plugin conflict, and diagnosing it belongs to the
206
+ orchestrating session's Correction Protocol, not to this layer reaching
207
+ outside its task to patch things over.
@@ -0,0 +1,8 @@
1
+ name: deepseek-harness
2
+ flag: --deepseek-harness
3
+ language: typescript
4
+ engine: "^5.0.0"
5
+ workspace: workspace/
6
+ template: CLAUDE.core.md
7
+ agents: [harness-eng]
8
+ skills: [hedgehog-dsh-loop, hedgehog-bootstrap-deepseek-harness-core, dsh-plugin-shapes]
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "@skyf0xx/hedgehog-core-deepseek-harness",
3
+ "version": "0.1.0",
4
+ "description": "Hedgehog's deepseek-harness core: a pinned DSH/Cordis plugin workspace, a tool-plugin generator, and the skills that drive building DeepSeek Harness plugins with Hedgehog's build discipline.",
5
+ "type": "module",
6
+ "scripts": {
7
+ "release": "npm version patch -m \"chore: bump version to %s\""
8
+ },
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git+https://github.com/skyf0xx/hedgehog-core-deepseek-harness.git"
12
+ },
13
+ "publishConfig": {
14
+ "access": "public"
15
+ },
16
+ "files": [
17
+ "workspace",
18
+ "agents",
19
+ "skills",
20
+ "CLAUDE.core.md",
21
+ "hedgehog-core.yaml",
22
+ "!workspace/node_modules/**",
23
+ "!workspace/plugins/*/node_modules/**",
24
+ "!workspace/plugins/*/lib/**"
25
+ ],
26
+ "engines": {
27
+ "node": ">=22.15.0"
28
+ },
29
+ "keywords": [
30
+ "hedgehog-core",
31
+ "hedgehog",
32
+ "claude-code",
33
+ "deepseek-harness",
34
+ "dsh",
35
+ "cordis"
36
+ ],
37
+ "license": "MIT"
38
+ }