hedgehog-daily · git:20260830.0d3a7fb · 2026-08-30 · sha256 3a27580816b2b63a

hedgehog-daily git:20260830.0d3a7fbA

Immutable. This exact content is served forever at /api/v1/blob/3a27580816b2b63a.

---
name: hedgehog-daily
description: Use when a change request lands on a project that already has `.hedgehog/` and no build in flight — a finished build being adjusted, or an adopted repo's next piece of work. Triggers on any "change this", "fix this", "add this" on such a project. Sizes the request against the installed core's own layers and routes it to one of three exits: a tweak made and committed here, change-work through `hedgehog intent add` and the core's loop, or a re-plan. Not for a build still in progress — that is the core's loop skill's own job.
---

# Daily change-work

One gate, three exits, for every change request on a project whose build
graph already exists. It reads the installed core's layer sequence,
scope globs and verify commands out of `.hedgehog/core.yaml`, so it is
the same gate on every core.

The gate exists to stop pricing a two-line edit at the cost of the
largest change the discipline can handle. Routing up is a real decision
with a real cost, taken on stated conditions — not the safe default.

## Entry

1. **`.hedgehog/` exists.** Without it there is no core to read and no
   graph to add to; this skill does not apply.
2. **Nothing is in flight.** `hedgehog status --brief` — one line. If it
   names any task, a build is mid-flight: this gate does not run. Read
   the full `hedgehog status` and hand the request back to the core's own
   loop skill, which owns work in progress.
3. **Read `.hedgehog/core.yaml`.** The layer list is the input to every
   decision below: each layer's `id`, `scope` globs, `verify` command,
   `verify_radius` and `exclusive`. Read the file, not a memory of it.

## The three exits

Decide by the conditions, in order. The first one that holds is the exit.

### Re-plan

The locked planning artifact that governs this project no longer
describes what is being asked for. The core's own loop skill names which
artifact governs — the brief and layer sequence for a shipped core,
`.hedgehog/core-design.md` for an authored one, `.hedgehog/adoption.md`
for an adopted one.

Route to `planner`'s re-entry pass, which adds intents for new work
without re-running planning from scratch and without disturbing anything
already built.

Where the artifact's failure means the request is a different project
rather than an extension of this one, say so plainly instead of routing.
That artifact is never rewritten to accommodate new scope.

### Change-work

Either condition puts the request here:

- It reaches more than one of the core's layers.
- It introduces a file, module, or capability that does not exist yet.

`hedgehog intent add`, then the installed core's own loop, unchanged.
Nothing about that path changes because this gate ran.

### Tweak

Both conditions hold:

- Every file it touches is inside one layer's `scope` globs — one
  layer, not two.
- Every file it touches already exists.

Then, in this session, with no subagent dispatched:

1. Read the code it touches. Not a summary of it.
2. Make the smallest correct edit.
3. Run that layer's own `verify` command from `core.yaml`, at the depth
   the next section states.
4. Commit as one conventional commit, in the format the
   `conventional-commits` skill states.

No `hedgehog intent add`, no `hedgehog plan`, no `hedgehog claim`, no
subagent. Nothing is written to the build graph.

### Tweak is the default under ambiguity

When the conditions do not clearly place a request above the tweak line,
it takes the tweak exit. A gate that escalates when unsure prices every
change at its worst case, which is the failure this gate exists to
avoid.

An escalation the tweak reveals is cheap: a tweak that turns out to
touch a second layer or need a file that does not exist stops there and
re-enters this gate at the change-work exit, having cost one read.

## Test and review depth on the tweak exit

A tweak inherits the test and review bar of the layer it lands in.

- A layer whose `verify_radius` equals its `scope`: run the layer's
  `verify` command. No new tests, no `reviewer` pass.
- A layer with a wider `verify_radius`, or `exclusive: true`: the same
  real test bar and `reviewer` pass that layer gets in the loop.

That is the loop's own rule — "Test depth follows verify radius. Review
follows exclusivity", stated in full in the core's loop skill — applied
to a layer instead of a compiled task. `verify_radius` and `exclusive`
are declared on the layer in `core.yaml`, so both are readable on a path
that compiles no task.

**A tweak landing in a wide-radius or exclusive layer is a signal.**
Integration layers are where behavior gets proven, so a change reaching
one is rarely as small as it looked when it was asked for. Re-check that
the tweak exit was the right exit. Do not bolt the loop's ceremony onto
the tweak path instead.

**The floor does not move.** A tweak to code with no tests does not get
to leave it that way where the layer's own bar says otherwise.

## Hard rules

- Never take the tweak exit on a file that does not exist yet. A new
  file is change-work by condition, whatever its size.
- Never widen a layer's `scope` to make a change fit the tweak exit.
  A change that needs a wider scope is change-work.
- Never commit a tweak whose layer `verify` command fails. A failing
  gate means the change is not done.
- Never batch two unrelated tweaks into one commit.
- Never rewrite the locked planning artifact to accommodate new scope —
  that is the re-plan exit's decision, and its answer may be that this
  is a different project.