Skip to content
Development
Skill

/cad-land

Land finished work - report git state, then ask how to publish (push / MR or PR / tag / leave local). With git.auto_close set in both the repository and your user-global config, it runs PR -> merge unattended and halts on a surviving blocker

From plugin
cadence
834 skills30 agents3 hooks

Claude Code

$ npx -y skills add crenshawdev/cadence --skill cad-land --agent claude-code

SKILL.md

cad-land.SKILL.md
name: cad-land
description: "Land finished work - report git state, then ask how to publish (push / MR or PR / tag / leave local). With git.auto_close set in both the repository and your user-global config, it runs PR -> merge unattended and halts on a surviving blocker"
argument-hint: "[base branch | defaults to git.base_branch]"
allowed-tools:
  - Read
  - Task
  - AskUserQuestion

<objective> Land the current branch's work. By default there is no preselected publish action: cad-land reports the state, asks how to publish, and executes only what you choose - nothing more. The one exception is the `git.auto_close` arm that both opt-ins authorize (this repository's config and your user-global config), which runs the close unattended; it is stated once, at step 3(b). </objective>

<execution_context> @${CLAUDE_PLUGIN_ROOT}/cadence-core/references/git-guard.md </execution_context>

<process> Read every config key this run needs in ONE `config.mjs get` up front (conventions.md Parallel work) - `git.base_branch git.protected_branches git.on_land_cleanup git.create_tag testing.scope` - and reuse the values across the steps below rather than re-reading per step. Step 3 asks a seam, not this read.

1. **Report git state - base first.** The base = `$ARGUMENTS`, else `git.base_branch`, else the first `git.protected_branches` entry that exists here (references/git-guard.md's fallback). It comes from an argument or a committed config, and a base shaped like `--output=<path>` is read by git as an option that writes that file, so ask the seam about it BEFORE any git command is given it - the commits-ahead count and the tracker call below included: `node "${CLAUDE_PLUGIN_ROOT}/cadence-core/bin/land-cleanup.mjs" cleanup --base <base>` On `baseRefused:true` the base is refused: run NO git command that takes it, print the envelope's `reason` as the base line, and skip the commits-ahead count and the tracker call. A refused `$ARGUMENTS` or `git.base_branch` ends the search; in the protected-branches fallback the seam's answer IS the "exists here" test, so ask it for each entry in order rather than probing with git, and take the first it does not refuse. A `skip` without `baseRefused` is the `on_land_cleanup` switch, not a refusal: the base is usable.

**Then report:** current branch; commits ahead of base; unpushed commits; uncommitted/untracked changes; and the remote host detected from the origin URL (gitlab -> MR, github -> PR, any other host where `tea` holds a login -> Forgejo/Gitea PR via `tea`, else local only). Show this plainly before doing anything.

**Then the tracker, in the same report.** Run it here, before any publish ask, on both step-3 arms:

node "${CLAUDE_PLUGIN_ROOT}/cadence-core/bin/issue-check.mjs" check --dir <root> --base <base>

Branch on `action` alone. On `report`: say in ONE sentence which issues this branch's commits reference and which of them are still open ("your branch references #42 and #47; #42 is still open"), naming a `not-found` number as not found and an `unresolved` one unresolved, never closed or not found. Print the `open` list ONLY when `referenced` is empty - it is the fallback, never the headline, because a bare list is what a reader skims past. On `skip`: print `reason` verbatim as ONE line and carry on - never block, never retry, never ask, and never list an issue the seam did not read. On `off` - `git.issue_check: false`, decided before any forge CLI runs - say NOTHING about the tracker: not the reason, not that it was skipped. The off switch is off, so this paragraph produces no output at all.

This report never writes: landing closes no issue, and closing one stays an explicit ask you make at publish time.

2. **Uncommitted changes.** If the tree is dirty, do NOT auto-commit. Ask (ask-user seam):

  • header: "Uncommitted"
  • question: "You have changes that aren't committed. What should happen to them before this work is published?"
  • options:
  • "Commit them first - you give a message, the changes are committed, and then publishing goes on"
  • "Leave them out - publish only what is already committed, and the changes stay in your working tree"
  • "Stop - publish nothing"

If HEAD is a protected branch, the protected-branch guard (references/git-guard.md) applies to any commit here.

3. **Publish - branch on the `git.auto_close` authorization.**

**First the deferred queue, on BOTH arms and ahead of the branch below.** A gate resolved `deferred` ran its reviewer and let the run continue, so the finding stops the LAND. Ask what is still queued:

node "${CLAUDE_PLUGIN_ROOT}/cadence-core/bin/planning.mjs" deferred list

On ANY entry in `members`, STOP the land here: no publish ask, no seam call, no merge, no tag, neither arm. Print each member's `trigger`, `discriminator` and finding count with the `path` its bodies are in, then point the reader at `${CLAUDE_PLUGIN_ROOT}/cadence-core/references/triage-gate.md`, whose `deferred` arm says how to clear one - triage the member's findings and record the rulings with `planning.mjs adjudication` for the same trigger, discriminator and round, which supersedes it. A non-empty `unreadable` arrives as `ok:false` and refuses exactly as a member does: the queue could not be PROVEN empty, and this gate never reports "nothing deferred" about input it could not read, the disposition `land-cleanup.mjs gate` already takes for a findings payload it could not parse.

It is NOT `land-cleanup.mjs gate` and must not be folded into it: that gate halts only under an authorized `git.auto_close` and reads only `risk_surface` survivors, so a default-configured project would publish straight over a deferred `plan`, `diff` or `phase_diff` finding.

**Then the ONE answer both arms branch on**, on its own line:

node "${C
Read more
@crenshawdev
Ships withcadence

Appearance is cheap. Verification is the work. Cadence is for developers using Claude Code on software they will still own after the session ends. Claude can write a convincing plan, produce working code, and tell you the job is finished.

834 skills30 agents
Get the whole plugin

Stars on GitHub

Momentum

stars in total
8
Star history of crenshawdev/cadence on GitHub, a chart by star-history.com

Other skills on cadence.

cad-adopt

cad-adopt

Initialize .planning/ from a repo that already exists - PROJECT.md, REQUIREMENTS.md and a remaining-work ROADMAP.md derived from…

@crenshawdev@crenshawdevInstall Skill
cad-audit

cad-audit

Pre-ship traceability audit - every requirement traced to a phase, plan and verification, orphan detection both directions, a…

@crenshawdev@crenshawdevInstall Skill
cad-capture

cad-capture

Capture a phase-linked todo, a seed idea for a future milestone, or a note, without losing your place - .planning/CAPTURE.md, or…

@crenshawdev@crenshawdevInstall Skill
cad-config

cad-config

Configure Cadence's config.json - workflow toggles, the per-role model and effort interview, and interactive cross-model review…

@crenshawdev@crenshawdevInstall Skill
cad-context

cad-context

Gather phase context before planning - codebase assumptions, locked decisions, falsifiable acceptance criteria - in one pass

@crenshawdev@crenshawdevInstall Skill

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills10d309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc12d293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react1d252k
@facebook@facebookInstall Skill

Questions about cad-land.

Which coding agents can use cad-land?
cad-land installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.