Skip to content
Back to skills

Check First

ASecurity

Coverage validation protocol before a final approval gate. Reads requirements from any structured requirements document, matches them against the proposed decomposition units (blocks, epics, tasks), outputs a coverage table. If gaps exist — stops, waits for user decision. If everything is covered — continues without pause. Use when: after proposing any decomposition of work (blocks / epics / tasks) before committing to execution — as a safety net that no requirement fell through the cracks.

  • 19 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 3, 2026
toolsbashsql

Security analysis

A100/100

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

Scanned September 3, 2026

npx -y skills add bearded-illirian/trailmark --skill check-first --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Check First?

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

Security grade badge for Check First
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/bearded-illirian-check-first-trailmark/badge)](https://www.skillsdirectory.com/skills/bearded-illirian-check-first-trailmark)

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: check-first
description: |
  Coverage validation protocol before a final approval gate.
  Reads requirements from any structured requirements document, matches
  them against the proposed decomposition units (blocks, epics, tasks),
  outputs a coverage table. If gaps exist — stops, waits for user
  decision. If everything is covered — continues without pause.

  Use when: after proposing any decomposition of work (blocks / epics /
  tasks) before committing to execution — as a safety net that no
  requirement fell through the cracks.
---

# Check-First Protocol

Runs after a decomposition step in any workflow (e.g. after proposing
epics for a brief, or blocks for a specification). Verifies that every
requirement from the source document is covered by at least one
proposed unit.

---

## Step 1 — Extract requirements

From the already-read requirements document (brief, specification,
technical description, product doc) extract every requirement. Look in
sections like:

- Scope / What's included
- Acceptance criteria
- What must exist
- Functional requirements
- Non-functional requirements

Each requirement is one row. Don't duplicate near-identical items —
merge them if the essence is the same.

---

## Step 2 — Output a coverage table

```
Requirements coverage check:

┌─────┬────────────────────────────────────┬──────────────┬────────────┐
│  #  │ Requirement                        │ Unit         │ Status     │
├─────┼────────────────────────────────────┼──────────────┼────────────┤
│ 1   │ [requirement from source doc]      │ Unit N       │ ✅ Covered │
│ 2   │ [requirement from source doc]      │ Unit N       │ ✅ Covered │
│ 3   │ [requirement from source doc]      │ —            │ ⚠️ Gap     │
└─────┴────────────────────────────────────┴──────────────┴────────────┘
```

"Unit" = the smallest labelled thing in your decomposition: an epic, a
block, a task — whatever the current workflow produces.

---

## Step 3 — Decision

**If every row is ✅:**

```
✅ All requirements covered — continuing.
```

Proceed without pause.

**If there are ⚠️ gaps:**

```
⚠️ N gap(s) found. Options:
1. Add to an existing unit [Unit X]
2. Create a new unit
3. Move to backlog — not part of this cycle
```

Wait for user decision per gap. After decisions land — update the unit
list and continue.

---

## Rules

- Don't skip even when the decomposition looks obviously complete
- On gaps — don't proceed without a user decision
- Extract requirements from the source text, don't invent them
- The point of the protocol is a paper trail: even a "no gaps" result
  is a first-class artifact — future readers see what was checked

---

## Anti-patterns

### ❌ Skipping when decomposition looks obvious

The decomposition seems to fully cover the requirements — skip the
check. Later a requirement surfaces in production, and nobody can
reconstruct whether it was considered or missed.

**Rule:** always run coverage check, even for "obvious" decomposition.
Even a "no gaps" result is a first-class artifact.

### ❌ Inventing requirements

The agent invents a requirement to make unit N fit — user approves.
The actual source document never contained that requirement, and the
decomposition now includes phantom work.

**Rule:** extract from source text only. If a unit doesn't map to any
extracted requirement, that's a signal the unit itself is scope creep,
not that a requirement is "implicit".

### ❌ Silent gap dismissal

Agent finds a gap → decides «it's minor, skip» → doesn't surface to
user. Later the gap becomes a bug or missed feature, and there's no
record of the decision to skip.

**Rule:** every gap requires an explicit user decision (add / new unit
/ backlog). Never dismiss silently. Recording "we chose to defer this"
is itself the audit trail.

### ❌ Inlining instead of Skill()

The agent read the protocol from memory and executed it inline — no
coverage-table artifact, no logged decision, no paper trail.

**Rule:** always launch via `/check-first` tool. The whole
value of the protocol is the artifact it produces.

---

## Related skills

- **plan-first** — invokes check-first after outputting the plan
  decomposition table, before executing
- **arch-first** — decomposition source for larger multi-block tasks;
  check-first validates coverage against the original brief/spec
- **ship-first** — closes work; check-first ensures nothing missed
  before the block or task is marked done

---

## Step 99 — Log invocation

Before exiting, log this skill invocation to routing.db:

```bash
sqlite3 {routing_db} \
  "INSERT INTO skill_invocations (task_id, block_num, skill_name, invoked_at)
   VALUES ('{slug}', '{N}', 'check-first', datetime('now'))" 2>/dev/null || true
```

If `{slug}` / `{N}` are unknown the row is written with empty values; `|| true` keeps a logging failure from aborting the skill.

Files in this skill

  • INFO.md1.9 KB
  • SKILL.md5.3 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.