Skip to content
Back to skills

Gherkin Authoring

ASecurity

Produce valid, consistently named Gherkin story files with correct IDs, timestamps, and tags. Use when writing or updating story files.

  • 66 stars
  • 0 votes
  • 0 copies
  • 18 views
  • Added September 12, 2026
testingpythonbashgitdocumentation

Security analysis

A100/100

Scanned September 12, 2026

npx -y skills add kinncj/Heimdall --skill gherkin-authoring --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Gherkin Authoring?

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

Security grade badge for Gherkin Authoring
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/kinncj-gherkin-authoring-heimdall/badge)](https://www.skillsdirectory.com/skills/kinncj-gherkin-authoring-heimdall)

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: gherkin-authoring
description: "Produce valid, consistently named Gherkin story files with correct IDs, timestamps, and tags. Use when writing or updating story files."
---

# SKILL: gherkin-authoring

## Purpose

Produce valid, consistently named Gherkin story files. Handles ID allocation, timestamp generation, filename construction, tag formatting, and scenario validation. Used by the product-owner agent whenever a new story is written or updated.

## Story File Naming Convention

```
<epic-slug>-<story-slug>-<timestamp>-<NNNN>.md
```

| Part | Format | Example |
|---|---|---|
| `epic-slug` | kebab-case, 2–4 words | `user-auth` |
| `story-slug` | kebab-case, 2–5 words | `reset-password` |
| `timestamp` | `YYYYMMDDHHMMSS` | `20250416143000` |
| `NNNN` | 4-digit zero-padded, sequential within epic | `0003` |

Full example: `user-auth-reset-password-20250416143000-0003.md`

## Allocate the Next Story ID

```bash
# Count existing stories for an epic to get next sequential ID
EPIC="user-auth"
NEXT_ID=$(ls docs/stories/${EPIC}-* 2>/dev/null \
  | grep -oE '\-[0-9]{4}\.md$' \
  | grep -oE '[0-9]{4}' \
  | sort -n | tail -1 \
  | python3 -c "import sys; n=sys.stdin.read().strip(); print(f'{int(n)+1:04d}' if n else '0001')")
[ -z "$NEXT_ID" ] && NEXT_ID="0001"
echo "$NEXT_ID"
```

## Generate Filename

```bash
EPIC="user-auth"
STORY="reset-password"
TS=$(date -u +"%Y%m%d%H%M%S")
ID="$NEXT_ID"   # from allocation step above
FILENAME="${EPIC}-${STORY}-${TS}-${ID}.md"
echo "$FILENAME"   # user-auth-reset-password-20250416143000-0001.md
```

## Story File Template

Every story file must contain:

```markdown
---
id: "{EPIC}-{NNNN}"
title: "{Human-readable story title}"
epic: "{epic-slug}"
priority: "high|medium|low|critical"
ui: false
adr_required: false
milestone: "{milestone name}"
labels:
  - "type:feature"
  - "priority:high"
  - "phase:discover"
issue_number: null
issue_url: null
---

## Story

**As a** {actor},
**I want** {capability},
**so that** {business outcome}.

## Acceptance Criteria

```gherkin
@story:{EPIC}-{NNNN} @epic:{epic-slug} @priority:{level}
Feature: {Feature title}

  Scenario: {scenario title}
    Given {precondition}
    When {action}
    Then {expected outcome}
```

## Definition of Done

- [ ] All Gherkin scenarios have passing step implementations
- [ ] Unit tests written and passing
- [ ] Integration tests written and passing (if applicable)
- [ ] Code reviewed and approved
- [ ] No regressions in related features
- [ ] Documentation updated (if applicable)

## ADR Links

<!-- Add links to relevant ADRs here -->
```

## Gherkin Validation Rules

Before writing a scenario, verify:

1. **Single responsibility**: each `Scenario` tests exactly one behavior.
2. **Given-When-Then order**: never skip or reorder.
3. **No implementation detail in steps**: steps describe intent, not code.
4. **Declarative steps**: `Given the user is logged in` ✓ — `Given I call POST /auth/login` ✗
5. **Tags present**: `@story:`, `@epic:`, `@priority:` required on every Feature block.
6. **No `And` as first step**: `And` is only valid after a `Given`, `When`, or `Then`.

## Background Block (shared preconditions)

```gherkin
Feature: Password Reset

  Background:
    Given the user has a verified account
    And the account is not locked

  Scenario: Successful reset request
    When the user submits their email address
    Then a reset link is sent to that address
```

Use `Background` when 2+ scenarios share the same preconditions.

## Scenario Outline (data-driven)

```gherkin
  Scenario Outline: Reject invalid email formats
    When the user submits "<email>"
    Then they see a validation error "<message>"

    Examples:
      | email        | message                  |
      | notanemail   | Invalid email format     |
      | @nodomain    | Invalid email format     |
      | a@b          | Domain must have TLD     |
```

## Tags Reference

| Tag | Required | Description |
|---|---|---|
| `@story:{id}` | Yes | Links scenario to story file |
| `@epic:{slug}` | Yes | Groups stories by epic |
| `@priority:{level}` | Yes | `critical`, `high`, `medium`, `low` |
| `@wip` | No | Work in progress — excluded from CI by default |
| `@ui` | No | Requires browser/UI driver |
| `@integration` | No | Requires external services |
| `@smoke` | No | Runs in production smoke suite |

## Failure Modes

| Condition | Action |
|---|---|
| Story ID collision (same NNNN exists) | Re-run allocation step. Never overwrite an existing file. |
| `docs/stories/` does not exist | Create it: `mkdir -p docs/stories/` |
| Scenario has no When | Invalid — split into two scenarios or add action step |
| Missing required tags | Add tags before writing the file |
| Title exceeds 72 characters | Shorten. Titles appear in issue headings and PR titles. |

## Logging

```
[gherkin] ALLOCATE  epic=user-auth  next_id=0003
[gherkin] CREATE    docs/stories/user-auth-reset-password-20250416143000-0003.md
[gherkin] VALIDATE  scenarios=3  tags=ok  structure=ok
```

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.