Skip to content
Back to skills

Dw Land

ASecurity

You are done with a change: wrap it up and decide whether it is ready to merge. One last thin verdict over the whole finished branch, then on your go close it: promote what you name — the decision records, the glossary, the gotchas — report the leftovers, archive the change doc, push the branch and open its pull request.

  • 2 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 19, 2026
ai-agentsrustgoshellbashgitapi

Works with

  • api

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned September 25, 2026

npx -y skills add dominikwozniak/dw-solo-skills --skill dw-land --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Dw Land?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Dw Land
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/dominikwozniak-dw-land/badge)](https://www.skillsdirectory.com/skills/dominikwozniak-dw-land)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: dw-land
description: >-
  You are done with a change: wrap it up and decide whether it is ready to merge. One last thin
  verdict over the whole finished branch, then on your go close it: promote what you name — the
  decision records, the glossary, the gotchas — report the leftovers, archive the change doc, push
  the branch and open its pull request.
argument-hint: "bare for the verdict — your go closes it and opens the PR · close to trust the diff and close at once · reject to archive a turned-down idea with its reason"
---

# dw-land — one thin verdict, then keep what you name

Two phases, and the gate between them is your word.

## What it reads and writes

The diff against the default branch — the ref `bash "${CLAUDE_PLUGIN_ROOT}/scripts/base-ref.sh"` prints — plus
the branch's `.ai/work/<date>-<slug>/CHANGE.md` (found by the same grep `dw-next` uses), `CONTEXT.md`
and `docs/decisions/`, so the verdict judges against this project's choices. Writes the closing
checklist's targets, moves the change doc to `.ai/archive/`, then pushes and opens the PR.

## Workflow

### 1. The verdict — one pass, four questions

Read the diff yourself — never delegate this pass; mid-build scrutiny was `dw-check`'s job. Every
finding sits at a real `file:line` you opened, and when you already trust the diff, say so and go
straight to closing.

- **Correct?** — the goal's behaviour, plus the edge case, the error path, the empty input.
- **Does it fit?** — a pattern used once elsewhere in this repo beats a better one used nowhere.
- **Blast radius?** — what else reaches this code; name every one-way door (migration, data
  deletion, renamed public API) as irreversible.
- **Is "done" proven?** — name the rung each claim reached: said so · pointed at the line · showed
  the bad case impossible · ran it · reproduced it in the artifact a user gets. A claim short of
  "ran it" is spoken aloud, never written up as settled. Read the rung off the boxes rather than
  deriving it again: a ticked task names in its `proof:` what was run against it, and a box ticked
  with nothing run, or carrying no check to run, is `said so` however finished the code looks.

**The completion gate:** read the `## Goal` against the **diff, not the checklist** — an
undelivered result is **not ready**, never "ready with follow-ups"; finish it, or the user amends
the goal. One carve-out: a result only CI can show is **pending on the push**, handed to `dw-ship`.

Close with one line — **ready to merge**, **ready with follow-ups**, or **not ready** and why —
and sort each follow-up: **done now** (inside the goal; phase 2 starts by doing it) ·
**report-open** (outside it; a line in the report and PR body). List every candidate for a new
durable entry — a backlog entry, a decision record, a gotcha, a term — one line each. Then **stop**:
a go writes only the candidates the user names, and a plain go writes none.

### 2. Close — on an explicit go

`dw-next` nominated decisions and terms rather than writing them, and this is the one step that
judges them: **a new record, term or gotcha is written only where the user named it** at the verdict.
Each target is read first — **replace, don't append**, deleting what this change made untrue or made
mechanical, which needs no name:

- **Decisions** — the only gate. Every candidate the user named — a `(nominated)` line, or a call
  the diff made that nobody nominated — is judged against `references/decision-record.md`'s three
  legs **out loud, one at a time**, and a named call that fails them is still not written; the
  whole diff is here, which is why this is where leg one can be answered.
  - With `dw-decisions` installed and a candidate in hand, give it the candidate, **the three legs
    verbatim**, and the diff hunks the candidate turns on — it has no shell and cannot see a diff,
    so a leg whose evidence lives in the change is unanswerable unless you pass it. No candidate:
    don't call it. Not installed: judge alone and say so.
  - Every candidate ends in exactly one of four states, and each has a destination:
    - **clears the bar** → a record with `rule:` and `touches:`. Most changes add zero, and that is
      correct.
    - **supersedes an active record** → the new record carries `supersedes:`, and the old one is
      flipped in the same pass.
    - **already decided, nothing changed** → no record. Say which record covers it, in the report.
    - **fails, or cannot be settled on what the change shows** → no record; one report line names
      the leg that failed, or what would settle it — **never a leg you did not establish**.
- **Vocabulary** — a named term into `CONTEXT.md`, one bullet of at most two lines saying what the
  word means and nothing about why; a term the diff sharpened is rewritten in place, never a second
  definition beside it.
- **Gotchas** — a named trap goes to the routed topic file covering it (the root file only where it
  already keeps a `## Gotchas`) as **one undated bullet of at most two lines** — do or never X, one
  clause of why, a pointer — with what happened and when left in the commit. Where a case added to
  an existing hook, lint rule or check would refuse the trap, add it in this change instead — named
  or not — and delete the prose it replaces, leaving its name. A new hook, script or harness is
  never that cheap: the report names it in one line, never a backlog entry. Cite a mechanism and the diff holds it, or it was prose after all.
- **Stale references** — a `## References` entry the diff made untrue is rewritten where it lives;
  that edits a file the change never touched, so name the exact line and get a yes first.
- **Follow-ups** — the done-now ones are built first; the rest are report lines. A
  `.ai/backlog/<date>-<slug>.md` file (frontmatter `created:`, `source:`, `why-not-now:`,
  `effort:`) only for one the user named. `git rm` any entry the diff completed.
- **Archive** — `git rm` every sibling still beside the doc — a leftover `HANDOFF.md`, a shape-time
  `research.md` — once anything durable in it has been promoted; the receipt is `CHANGE.md` alone.
  Then `git mv .ai/work/<shaped date>-<slug>/ .ai/archive/<today>-<slug>/`; flip to
  `status: landed` with `landed: YYYY-MM-DD`. Trim the doc to a receipt: **the frontmatter, the H1
  and the report's `You get:` line, nothing else** — the worked state lives in the PR `pr:` names.

One commit carries all of it — including a `docs/agents/corpus.baseline.json` re-record where the
repo keeps one, since a promotion that grows the corpus is what the ratchet asks to be shown.

### 3. Open the PR — under the same go

`git push -u origin <branch>`, then `gh pr create`, both per `## Git conventions`; fill the archived
doc's `pr:` as a one-line follow-up commit. Don't wait on CI — opening the PR is what starts it, and
`dw-ship` reads the checks. On the default branch there is no PR — the close was the whole step. No
`origin` at all — say so and stop at the close commit.

The body is `.github/PULL_REQUEST_TEMPLATE.md`, read and filled — `--body` bypasses it, so a body
composed without opening the file is the one that drifts. Its guidance comments come out and its caps
hold; phase 1's report-open follow-ups go under `## What changes`, what phase 1 ran under
`## Test plan`. `## How it flows` is optional — drop the heading with it.

### 4. Report

What was promoted and archived, and each report-open line. Then two lines: **`You get:`** — each
`## Goal` result as what a user can now do — and
**`Backlog +N/−M (now K) · decisions +N · docs +N/−M`**, the entries, records and gotcha or term
bullets the close added and removed. The PR link last. This skill never merges; the squash is
`dw-ship`'s one-way door.

## Modes

- **bare** — the verdict, then stop. A plain "go" or "close" in the conversation runs phases 2–3
  in this same invocation; a hedged reply is not a go.
- **`close`** — the trust shortcut: one-line verdict, then close at once — unless it comes out
  **not ready**, which always stops. Nothing was named, so it writes no new durable entry.
- **`reject`** — the idea was turned down or the work abandoned: skip the verdict, promote what the
  user names, archive with `status: rejected`, `rejected: YYYY-MM-DD` and a
  `## Why rejected` naming what was tried and what killed it — refuse to write one without a
  reason. The archive trim spares that section. Commit it somewhere that survives the branch — a
  short branch off the default one and a PR.

## References

- `references/decision-record.md` — the bar a decision record must clear, and its shape. Read it
  before writing any record.

**Next:** `dw-ship` to merge the PR and clean up, or `dw-shape` for the next change.

$ARGUMENTS

Files in this skill

  • SKILL.md8.6 KB
  • references/decision-record.md2.8 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.