<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Quickstart on reqmd</title><link>https://reqmd.xyz/quickstart/</link><description>Recent content in Quickstart on reqmd</description><generator>Hugo</generator><language>en</language><atom:link href="https://reqmd.xyz/quickstart/index.xml" rel="self" type="application/rss+xml"/><item><title>Step 0 — Installation</title><link>https://reqmd.xyz/quickstart/00-installation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://reqmd.xyz/quickstart/00-installation/</guid><description>&lt;p&gt;Three ways to get reqmd on your machine. Pick one.&lt;/p&gt;
&lt;h2 id="option-1--go-install-fastest" class="heading-2"&gt;Option 1 — &lt;code&gt;go install&lt;/code&gt; (fastest)&lt;a class="heading-anchor" href="#option-1--go-install-fastest" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If you already have Go on your &lt;code&gt;$PATH&lt;/code&gt;:&lt;/p&gt;
&lt;div class="codeblock-wrapper" data-export-hidden="true"&gt;
 &lt;div class="codeblock-header" data-export-hidden="true"&gt;
 &lt;span class="codeblock-lang" aria-hidden="true"&gt;sh&lt;/span&gt;
 &lt;button class="codeblock-copy" data-copy-target="cb-0" aria-label="Copy code" aria-hidden="true"&gt;
 &lt;svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"&gt;&lt;rect x="9" y="9" width="13" height="13" rx="2" ry="2"/&gt;&lt;path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/&gt;&lt;/svg&gt;
 &lt;span&gt;Copy&lt;/span&gt;
 &lt;/button&gt;
 &lt;/div&gt;
 &lt;pre id="cb-0"&gt;&lt;code class="language-sh"&gt;go install github.com/dVoo/reqmd/cmd/reqmd@latest&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;The binary lands in &lt;code&gt;$(go env GOBIN)&lt;/code&gt; (or &lt;code&gt;$(go env GOPATH)/bin&lt;/code&gt;).&lt;/p&gt;</description></item><item><title>Step 1 — Get started</title><link>https://reqmd.xyz/quickstart/01-get-started/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://reqmd.xyz/quickstart/01-get-started/</guid><description>&lt;p&gt;Scaffold a new requirements project and run your first validation.&lt;/p&gt;
&lt;h2 id="scaffold" class="heading-2"&gt;Scaffold&lt;a class="heading-anchor" href="#scaffold" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="codeblock-wrapper" data-export-hidden="true"&gt;
 &lt;div class="codeblock-header" data-export-hidden="true"&gt;
 &lt;span class="codeblock-lang" aria-hidden="true"&gt;sh&lt;/span&gt;
 &lt;button class="codeblock-copy" data-copy-target="cb-0" aria-label="Copy code" aria-hidden="true"&gt;
 &lt;svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"&gt;&lt;rect x="9" y="9" width="13" height="13" rx="2" ry="2"/&gt;&lt;path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/&gt;&lt;/svg&gt;
 &lt;span&gt;Copy&lt;/span&gt;
 &lt;/button&gt;
 &lt;/div&gt;
 &lt;pre id="cb-0"&gt;&lt;code class="language-sh"&gt;reqmd init my-project/&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;This creates:&lt;/p&gt;
&lt;div class="codeblock-wrapper" data-export-hidden="true"&gt;
 &lt;div class="codeblock-header" data-export-hidden="true"&gt;
 &lt;span class="codeblock-lang" aria-hidden="true"&gt;&lt;/span&gt;
 &lt;button class="codeblock-copy" data-copy-target="cb-1" aria-label="Copy code" aria-hidden="true"&gt;
 &lt;svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"&gt;&lt;rect x="9" y="9" width="13" height="13" rx="2" ry="2"/&gt;&lt;path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/&gt;&lt;/svg&gt;
 &lt;span&gt;Copy&lt;/span&gt;
 &lt;/button&gt;
 &lt;/div&gt;
 &lt;pre id="cb-1"&gt;&lt;code class="language-"&gt;my-project/
 schema.yaml # JSON Schema with x-reqmd config
 requirements.md # example file with two sample requirements&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;h2 id="validate" class="heading-2"&gt;Validate&lt;a class="heading-anchor" href="#validate" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="codeblock-wrapper" data-export-hidden="true"&gt;
 &lt;div class="codeblock-header" data-export-hidden="true"&gt;
 &lt;span class="codeblock-lang" aria-hidden="true"&gt;sh&lt;/span&gt;
 &lt;button class="codeblock-copy" data-copy-target="cb-2" aria-label="Copy code" aria-hidden="true"&gt;
 &lt;svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"&gt;&lt;rect x="9" y="9" width="13" height="13" rx="2" ry="2"/&gt;&lt;path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/&gt;&lt;/svg&gt;
 &lt;span&gt;Copy&lt;/span&gt;
 &lt;/button&gt;
 &lt;/div&gt;
 &lt;pre id="cb-2"&gt;&lt;code class="language-sh"&gt;reqmd check my-project/&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;You should see both sample requirements pass validation:&lt;/p&gt;</description></item><item><title>Step 1a — CI integration</title><link>https://reqmd.xyz/quickstart/01a-ci-integration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://reqmd.xyz/quickstart/01a-ci-integration/</guid><description>&lt;p&gt;Run reqmd in CI for validation gates and structured reports.&lt;/p&gt;
&lt;h2 id="json-validation-report" class="heading-2"&gt;JSON validation report&lt;a class="heading-anchor" href="#json-validation-report" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="codeblock-wrapper" data-export-hidden="true"&gt;
 &lt;div class="codeblock-header" data-export-hidden="true"&gt;
 &lt;span class="codeblock-lang" aria-hidden="true"&gt;sh&lt;/span&gt;
 &lt;button class="codeblock-copy" data-copy-target="cb-0" aria-label="Copy code" aria-hidden="true"&gt;
 &lt;svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"&gt;&lt;rect x="9" y="9" width="13" height="13" rx="2" ry="2"/&gt;&lt;path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/&gt;&lt;/svg&gt;
 &lt;span&gt;Copy&lt;/span&gt;
 &lt;/button&gt;
 &lt;/div&gt;
 &lt;pre id="cb-0"&gt;&lt;code class="language-sh"&gt;reqmd check --json 02-trace-your-spec/&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Produces a structured JSON report with per-requirement pass/fail and trace check results:&lt;/p&gt;
&lt;div class="codeblock-wrapper" data-export-hidden="true"&gt;
 &lt;div class="codeblock-header" data-export-hidden="true"&gt;
 &lt;span class="codeblock-lang" aria-hidden="true"&gt;json&lt;/span&gt;
 &lt;button class="codeblock-copy" data-copy-target="cb-1" aria-label="Copy code" aria-hidden="true"&gt;
 &lt;svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"&gt;&lt;rect x="9" y="9" width="13" height="13" rx="2" ry="2"/&gt;&lt;path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/&gt;&lt;/svg&gt;
 &lt;span&gt;Copy&lt;/span&gt;
 &lt;/button&gt;
 &lt;/div&gt;
 &lt;pre id="cb-1"&gt;&lt;code class="language-json"&gt;{
 "version": 1,
 "exit_code": 0,
 "summary": {
 "total": 5,
 "valid": 5,
 "invalid": 0,
 "parse_errors": 0,
 "warnings": 1
 },
 "documents": [...],
 "parse_errors": []
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;The &lt;code&gt;exit_code&lt;/code&gt; field mirrors the process exit code: &lt;code&gt;0&lt;/code&gt; (all valid), &lt;code&gt;1&lt;/code&gt; (validation errors), &lt;code&gt;2&lt;/code&gt; (parse error).&lt;/p&gt;</description></item><item><title>Step 2 — Trace your spec</title><link>https://reqmd.xyz/quickstart/02-trace-your-spec/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://reqmd.xyz/quickstart/02-trace-your-spec/</guid><description>&lt;p&gt;Build a multi-level spec tree with trace links between levels.&lt;/p&gt;
&lt;p&gt;This is the heart of reqmd: a four-level V-model with bidirectional traceability, validated by the parser.&lt;/p&gt;
&lt;div class="codeblock-wrapper" data-export-hidden="true"&gt;
 &lt;div class="codeblock-header" data-export-hidden="true"&gt;
 &lt;span class="codeblock-lang" aria-hidden="true"&gt;&lt;/span&gt;
 &lt;button class="codeblock-copy" data-copy-target="cb-0" aria-label="Copy code" aria-hidden="true"&gt;
 &lt;svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"&gt;&lt;rect x="9" y="9" width="13" height="13" rx="2" ry="2"/&gt;&lt;path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/&gt;&lt;/svg&gt;
 &lt;span&gt;Copy&lt;/span&gt;
 &lt;/button&gt;
 &lt;/div&gt;
 &lt;pre id="cb-0"&gt;&lt;code class="language-"&gt;02-trace-your-spec/
 stakeholder/ # Stakeholder needs (top of V)
 schema.yaml
 goals.md # STK-GOAL-001: Fast Boot
 system/ # System requirements
 schema.yaml # upstream: ../stakeholder/
 features.md # SYS-001 traces to STK-GOAL-001
 software/ # Software requirements
 schema.yaml # upstream: ../system/
 components.md # SW-001 traces to SYS-001
 tests/ # Test specifications (bottom of V)
 schema.yaml # upstream: ../software/
 boot-test.md # TEST-001/002 trace to SW-001 and SYS-001&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;h2 id="how-trace-links-work" class="heading-2"&gt;How trace links work&lt;a class="heading-anchor" href="#how-trace-links-work" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Each requirement has a &lt;code&gt;trace&lt;/code&gt; attribute listing its upstream IDs. reqmd validates that every trace target exists:&lt;/p&gt;</description></item><item><title>Step 2a — Status &amp; disposition</title><link>https://reqmd.xyz/quickstart/02a-status-disposition/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://reqmd.xyz/quickstart/02a-status-disposition/</guid><description>&lt;p&gt;Two built-in attributes control how requirements behave in trace coverage and how deferred work is tracked.&lt;/p&gt;
&lt;h2 id="status-lifecycle" class="heading-2"&gt;Status lifecycle&lt;a class="heading-anchor" href="#status-lifecycle" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Every requirement has a &lt;code&gt;status&lt;/code&gt; — either &lt;code&gt;draft&lt;/code&gt; or &lt;code&gt;approved&lt;/code&gt; (default when omitted). Only &lt;code&gt;approved&lt;/code&gt; requirements count as upstream coverage providers.&lt;/p&gt;
&lt;div class="codeblock-wrapper" data-export-hidden="true"&gt;
 &lt;div class="codeblock-header" data-export-hidden="true"&gt;
 &lt;span class="codeblock-lang" aria-hidden="true"&gt;markdown&lt;/span&gt;
 &lt;button class="codeblock-copy" data-copy-target="cb-0" aria-label="Copy code" aria-hidden="true"&gt;
 &lt;svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"&gt;&lt;rect x="9" y="9" width="13" height="13" rx="2" ry="2"/&gt;&lt;path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/&gt;&lt;/svg&gt;
 &lt;span&gt;Copy&lt;/span&gt;
 &lt;/button&gt;
 &lt;/div&gt;
 &lt;pre id="cb-0"&gt;&lt;code class="language-markdown"&gt;## REQ-001: System boot
```attr
status: approved
trace: [STK-001]&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;div class="codeblock-wrapper" data-export-hidden="true"&gt;
 &lt;div class="codeblock-header" data-export-hidden="true"&gt;
 &lt;span class="codeblock-lang" aria-hidden="true"&gt;&lt;/span&gt;
 &lt;button class="codeblock-copy" data-copy-target="cb-1" aria-label="Copy code" aria-hidden="true"&gt;
 &lt;svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"&gt;&lt;rect x="9" y="9" width="13" height="13" rx="2" ry="2"/&gt;&lt;path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/&gt;&lt;/svg&gt;
 &lt;span&gt;Copy&lt;/span&gt;
 &lt;/button&gt;
 &lt;/div&gt;
 &lt;pre id="cb-1"&gt;&lt;code class="language-"&gt;
A `draft` requirement can be referenced by a `trace` but does **not** satisfy a `requires-trace-from:` expectation. This lets you stage work-in-progress without breaking coverage checks.

Try it: in [Step 2](/quickstart/02-trace-your-spec/), the `SYS-001` requirement shows:&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;⚠ SYS-001 no upstream trace: no approved requirement from &amp;ldquo;software&amp;rdquo; traces to this item (1 draft downstreams ignored)&lt;/p&gt;</description></item><item><title>Step 2b — Version pins</title><link>https://reqmd.xyz/quickstart/02b-version-pins/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://reqmd.xyz/quickstart/02b-version-pins/</guid><description>&lt;p&gt;Pin trace references to a specific upstream version and detect when the upstream changes.&lt;/p&gt;
&lt;h2 id="how-version-pins-work" class="heading-2"&gt;How version pins work&lt;a class="heading-anchor" href="#how-version-pins-work" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A downstream requirement can pin the upstream version it was last verified against using the &lt;code&gt;~N&lt;/code&gt; suffix:&lt;/p&gt;
&lt;div class="codeblock-wrapper" data-export-hidden="true"&gt;
 &lt;div class="codeblock-header" data-export-hidden="true"&gt;
 &lt;span class="codeblock-lang" aria-hidden="true"&gt;markdown&lt;/span&gt;
 &lt;button class="codeblock-copy" data-copy-target="cb-0" aria-label="Copy code" aria-hidden="true"&gt;
 &lt;svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"&gt;&lt;rect x="9" y="9" width="13" height="13" rx="2" ry="2"/&gt;&lt;path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/&gt;&lt;/svg&gt;
 &lt;span&gt;Copy&lt;/span&gt;
 &lt;/button&gt;
 &lt;/div&gt;
 &lt;pre id="cb-0"&gt;&lt;code class="language-markdown"&gt;## UP-001
```attr
status: approved
version: 3&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;div class="codeblock-wrapper" data-export-hidden="true"&gt;
 &lt;div class="codeblock-header" data-export-hidden="true"&gt;
 &lt;span class="codeblock-lang" aria-hidden="true"&gt;&lt;/span&gt;
 &lt;button class="codeblock-copy" data-copy-target="cb-1" aria-label="Copy code" aria-hidden="true"&gt;
 &lt;svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"&gt;&lt;rect x="9" y="9" width="13" height="13" rx="2" ry="2"/&gt;&lt;path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/&gt;&lt;/svg&gt;
 &lt;span&gt;Copy&lt;/span&gt;
 &lt;/button&gt;
 &lt;/div&gt;
 &lt;pre id="cb-1"&gt;&lt;code class="language-"&gt;
```markdown
## DN-001
```attr
status: approved
trace: [UP-001~2] # verified against UP-001 v2, but UP-001 is now v3&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;div class="codeblock-wrapper" data-export-hidden="true"&gt;
 &lt;div class="codeblock-header" data-export-hidden="true"&gt;
 &lt;span class="codeblock-lang" aria-hidden="true"&gt;&lt;/span&gt;
 &lt;button class="codeblock-copy" data-copy-target="cb-2" aria-label="Copy code" aria-hidden="true"&gt;
 &lt;svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"&gt;&lt;rect x="9" y="9" width="13" height="13" rx="2" ry="2"/&gt;&lt;path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/&gt;&lt;/svg&gt;
 &lt;span&gt;Copy&lt;/span&gt;
 &lt;/button&gt;
 &lt;/div&gt;
 &lt;pre id="cb-2"&gt;&lt;code class="language-"&gt;
When the upstream `version` is bumped, the pin becomes stale and reqmd flags the downstream as needing re-verification.

## Findings

| Condition | Meaning | Level | Demote with |
|-----------|---------|-------|-------------|
| `pin &lt; upstream.version` | Outdated — upstream bumped, downstream needs re-verify | **ERROR** | `--relaxed-versions` |
| `pin &gt; upstream.version` | Predated — downstream claims a non-existent version | **ERROR** | (never — data integrity) |
| `pin == upstream.version` | Current | — | — |
| No pin | No version check applies | — | — |

## Try it

The spec tree in [Step 2](/quickstart/02-trace-your-spec/) doesn't use version pins, so no version-pin findings fire. To see it in action, add `version: 1` to an upstream requirement and `~1` to a downstream trace, then bump the upstream to `version: 2`:

```sh
reqmd check 02-trace-your-spec/
# ❌ DN-001 version-pin: outdated — UP-001 is at version 2, pinned to ~1

# Demote to WARNING (CI-friendly: fails on predated, warns on outdated)
reqmd check --relaxed-versions 02-trace-your-spec/
# ⚠ DN-001 version-pin: outdated — UP-001 is at version 2, pinned to ~1&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;h2 id="suppression" class="heading-2"&gt;Suppression&lt;a class="heading-anchor" href="#suppression" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Suppress the check per-requirement:&lt;/p&gt;</description></item><item><title>Step 2c — Repin</title><link>https://reqmd.xyz/quickstart/02c-repin/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://reqmd.xyz/quickstart/02c-repin/</guid><description>&lt;p&gt;Bulk-update version-pin (&lt;code&gt;~N&lt;/code&gt;) trace references to match the upstream&amp;rsquo;s
current version. The &lt;code&gt;reqmd repin&lt;/code&gt; command proposes or applies the
changes for you.&lt;/p&gt;
&lt;h2 id="when-to-use" class="heading-2"&gt;When to use&lt;a class="heading-anchor" href="#when-to-use" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;After bumping a spec version (&lt;a href="https://reqmd.xyz/quickstart/02b-version-pins/"&gt;Version pins&lt;/a&gt;)
you&amp;rsquo;ll see a wave of &lt;code&gt;version-pin: outdated&lt;/code&gt; findings. &lt;code&gt;repin&lt;/code&gt; rewrites
the affected &lt;code&gt;trace:&lt;/code&gt; lines in place so the pins catch up to the
upstream — without you having to hand-edit every requirement.&lt;/p&gt;
&lt;h2 id="dry-run-by-default" class="heading-2"&gt;Dry-run by default&lt;a class="heading-anchor" href="#dry-run-by-default" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="codeblock-wrapper" data-export-hidden="true"&gt;
 &lt;div class="codeblock-header" data-export-hidden="true"&gt;
 &lt;span class="codeblock-lang" aria-hidden="true"&gt;sh&lt;/span&gt;
 &lt;button class="codeblock-copy" data-copy-target="cb-0" aria-label="Copy code" aria-hidden="true"&gt;
 &lt;svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"&gt;&lt;rect x="9" y="9" width="13" height="13" rx="2" ry="2"/&gt;&lt;path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/&gt;&lt;/svg&gt;
 &lt;span&gt;Copy&lt;/span&gt;
 &lt;/button&gt;
 &lt;/div&gt;
 &lt;pre id="cb-0"&gt;&lt;code class="language-sh"&gt;# See what would change — no files are written
reqmd repin 02-trace-your-spec/
# /path/to/dn.md DN-001 UP-001 → UP-001~3
# /path/to/dn.md DN-002 UP-002 → UP-002~7
# 2 outdated, 0 unpinned, 0 predated across 1 files.&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;The default mode is dry-run. The output is one line per affected
requirement (&lt;code&gt;file REQ-ID bare-ref → ref~newPin&lt;/code&gt;) plus a one-line
summary. Nothing is written to disk.&lt;/p&gt;</description></item><item><title>Step 3 — Export</title><link>https://reqmd.xyz/quickstart/03-export/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://reqmd.xyz/quickstart/03-export/</guid><description>&lt;p&gt;Export the spec tree from &lt;a href="https://reqmd.xyz/quickstart/02-trace-your-spec/"&gt;Step 2&lt;/a&gt; to CSV, HTML, and graph formats.&lt;/p&gt;
&lt;h2 id="csv-export" class="heading-2"&gt;CSV export&lt;a class="heading-anchor" href="#csv-export" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="codeblock-wrapper" data-export-hidden="true"&gt;
 &lt;div class="codeblock-header" data-export-hidden="true"&gt;
 &lt;span class="codeblock-lang" aria-hidden="true"&gt;sh&lt;/span&gt;
 &lt;button class="codeblock-copy" data-copy-target="cb-0" aria-label="Copy code" aria-hidden="true"&gt;
 &lt;svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"&gt;&lt;rect x="9" y="9" width="13" height="13" rx="2" ry="2"/&gt;&lt;path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/&gt;&lt;/svg&gt;
 &lt;span&gt;Copy&lt;/span&gt;
 &lt;/button&gt;
 &lt;/div&gt;
 &lt;pre id="cb-0"&gt;&lt;code class="language-sh"&gt;reqmd export csv 02-trace-your-spec/ -o csv-out/&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;Produces one CSV per document directory (&lt;code&gt;stakeholder-requirements.csv&lt;/code&gt;, &lt;code&gt;system-requirements.csv&lt;/code&gt;, etc.) with columns: ID, Title, all schema attributes, Body, Rationale.&lt;/p&gt;</description></item><item><title>Step 3a — Live preview</title><link>https://reqmd.xyz/quickstart/03a-live-preview/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://reqmd.xyz/quickstart/03a-live-preview/</guid><description>&lt;p&gt;Serve a live-reloading HTML preview while you edit your spec tree.&lt;/p&gt;
&lt;h2 id="start-the-server" class="heading-2"&gt;Start the server&lt;a class="heading-anchor" href="#start-the-server" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="codeblock-wrapper" data-export-hidden="true"&gt;
 &lt;div class="codeblock-header" data-export-hidden="true"&gt;
 &lt;span class="codeblock-lang" aria-hidden="true"&gt;sh&lt;/span&gt;
 &lt;button class="codeblock-copy" data-copy-target="cb-0" aria-label="Copy code" aria-hidden="true"&gt;
 &lt;svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"&gt;&lt;rect x="9" y="9" width="13" height="13" rx="2" ry="2"/&gt;&lt;path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/&gt;&lt;/svg&gt;
 &lt;span&gt;Copy&lt;/span&gt;
 &lt;/button&gt;
 &lt;/div&gt;
 &lt;pre id="cb-0"&gt;&lt;code class="language-sh"&gt;reqmd serve 02-trace-your-spec/&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;This opens a browser at &lt;code&gt;http://localhost:8080&lt;/code&gt; showing the HTML export with live reload. Every time you save a &lt;code&gt;.md&lt;/code&gt; or &lt;code&gt;schema.yaml&lt;/code&gt; file, the browser auto-refreshes via SSE (Server-Sent Events).&lt;/p&gt;</description></item><item><title>Step 3b — Baseline diff</title><link>https://reqmd.xyz/quickstart/03b-baseline-diff/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://reqmd.xyz/quickstart/03b-baseline-diff/</guid><description>&lt;p&gt;Compare requirement baselines between two git tags — no checkout needed.&lt;/p&gt;
&lt;h2 id="how-it-works" class="heading-2"&gt;How it works&lt;a class="heading-anchor" href="#how-it-works" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;reqmd baseline diff &amp;lt;tag1&amp;gt; &amp;lt;tag2&amp;gt;&lt;/code&gt; extracts the repository at each tag via &lt;code&gt;git archive | tar&lt;/code&gt;, parses both versions through the standard pipeline, and produces a semantic diff:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Requirements&lt;/strong&gt;: added (&lt;code&gt;+&lt;/code&gt;), removed (&lt;code&gt;-&lt;/code&gt;), modified (&lt;code&gt;~&lt;/code&gt;) with attribute-level detail&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Schemas&lt;/strong&gt;: new/removed properties, changed required fields&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Submodules&lt;/strong&gt;: added/removed/updated submodule pins&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The command always exits &lt;code&gt;0&lt;/code&gt; — the diff is informational, not validation.&lt;/p&gt;</description></item><item><title>Step 4 — Custom templates</title><link>https://reqmd.xyz/quickstart/04-custom-templates/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://reqmd.xyz/quickstart/04-custom-templates/</guid><description>&lt;p&gt;Define your own requirement schema with a custom &lt;code&gt;reqmd init&lt;/code&gt; preset.&lt;/p&gt;
&lt;h2 id="whats-in-this-folder" class="heading-2"&gt;What&amp;rsquo;s in this folder&lt;a class="heading-anchor" href="#whats-in-this-folder" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="codeblock-wrapper" data-export-hidden="true"&gt;
 &lt;div class="codeblock-header" data-export-hidden="true"&gt;
 &lt;span class="codeblock-lang" aria-hidden="true"&gt;&lt;/span&gt;
 &lt;button class="codeblock-copy" data-copy-target="cb-0" aria-label="Copy code" aria-hidden="true"&gt;
 &lt;svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"&gt;&lt;rect x="9" y="9" width="13" height="13" rx="2" ry="2"/&gt;&lt;path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/&gt;&lt;/svg&gt;
 &lt;span&gt;Copy&lt;/span&gt;
 &lt;/button&gt;
 &lt;/div&gt;
 &lt;pre id="cb-0"&gt;&lt;code class="language-"&gt;04-custom-templates/
 preset/ # the custom preset directory
 schema.yaml.tmpl # Go template for schema.yaml
 example.md.tmpl # Go template for the example .md file&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;This preset defines a &lt;strong&gt;custom requirements template&lt;/strong&gt; with:&lt;/p&gt;</description></item><item><title>Step 5 — Verification results (CTRF)</title><link>https://reqmd.xyz/quickstart/05-verification-results-ctrf/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://reqmd.xyz/quickstart/05-verification-results-ctrf/</guid><description>&lt;p&gt;Load automated test results in &lt;a href="https://ctrf.io/"&gt;CTRF format&lt;/a&gt; and run outcome-gated checks against your spec tree.&lt;/p&gt;
&lt;h2 id="whats-in-this-folder" class="heading-2"&gt;What&amp;rsquo;s in this folder&lt;a class="heading-anchor" href="#whats-in-this-folder" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="codeblock-wrapper" data-export-hidden="true"&gt;
 &lt;div class="codeblock-header" data-export-hidden="true"&gt;
 &lt;span class="codeblock-lang" aria-hidden="true"&gt;&lt;/span&gt;
 &lt;button class="codeblock-copy" data-copy-target="cb-0" aria-label="Copy code" aria-hidden="true"&gt;
 &lt;svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"&gt;&lt;rect x="9" y="9" width="13" height="13" rx="2" ry="2"/&gt;&lt;path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/&gt;&lt;/svg&gt;
 &lt;span&gt;Copy&lt;/span&gt;
 &lt;/button&gt;
 &lt;/div&gt;
 &lt;pre id="cb-0"&gt;&lt;code class="language-"&gt;05-verification-results-ctrf/
 boot-tests.ctrf.json # CTRF report: TEST-001 passed
 coverage.json # NOT a CTRF file; auto-skipped silently&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;h2 id="how-ctrf-maps-to-requirements" class="heading-2"&gt;How CTRF maps to requirements&lt;a class="heading-anchor" href="#how-ctrf-maps-to-requirements" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;CTRF test entries map to measures (requirements with a &lt;code&gt;verify&lt;/code&gt; attribute) via the &lt;code&gt;x-reqmd.id&lt;/code&gt; extra field:&lt;/p&gt;</description></item><item><title>Step 6 — Review documentation</title><link>https://reqmd.xyz/quickstart/06-review-documentation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://reqmd.xyz/quickstart/06-review-documentation/</guid><description>&lt;p&gt;Load manual verification results (review, inspection, analysis, demonstration) recorded as markdown with a user-supplied schema.&lt;/p&gt;
&lt;h2 id="whats-in-this-folder" class="heading-2"&gt;What&amp;rsquo;s in this folder&lt;a class="heading-anchor" href="#whats-in-this-folder" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="codeblock-wrapper" data-export-hidden="true"&gt;
 &lt;div class="codeblock-header" data-export-hidden="true"&gt;
 &lt;span class="codeblock-lang" aria-hidden="true"&gt;&lt;/span&gt;
 &lt;button class="codeblock-copy" data-copy-target="cb-0" aria-label="Copy code" aria-hidden="true"&gt;
 &lt;svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"&gt;&lt;rect x="9" y="9" width="13" height="13" rx="2" ry="2"/&gt;&lt;path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/&gt;&lt;/svg&gt;
 &lt;span&gt;Copy&lt;/span&gt;
 &lt;/button&gt;
 &lt;/div&gt;
 &lt;pre id="cb-0"&gt;&lt;code class="language-"&gt;06-review-documentation/
 schema.yaml # schema for manual results
 design-review-results.md # VR-001: design review for TEST-002 (pass)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;h2 id="manual-results-format" class="heading-2"&gt;Manual results format&lt;a class="heading-anchor" href="#manual-results-format" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Manual results are markdown files with &lt;code&gt;attr&lt;/code&gt; blocks, just like requirements — but the schema declares result-specific attributes:&lt;/p&gt;</description></item></channel></rss>