<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>reqmd</title><link>https://reqmd.xyz/</link><description>Recent content on reqmd</description><generator>Hugo</generator><language>en</language><atom:link href="https://reqmd.xyz/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>Use cases</title><link>https://reqmd.xyz/use-cases/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://reqmd.xyz/use-cases/</guid><description>&lt;p&gt;reqmd is a tool for teams who need to write, link, and verify requirements. This page walks through the real workflows where reqmd adds value, then clearly states what is out of scope.&lt;/p&gt;
&lt;h2 id="what-reqmd-does" class="heading-2"&gt;What reqmd does&lt;a class="heading-anchor" href="#what-reqmd-does" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;reqmd reads a tree of Markdown files — each requirement is a heading, a YAML &lt;code&gt;attr&lt;/code&gt; block, and some prose — and checks every cross-reference, every status, every version pin. It produces HTML, CSV, and graph exports, loads verification results from CI or manual reviews, and closes the loop from spec to code.&lt;/p&gt;</description></item><item><title>Cheat sheet</title><link>https://reqmd.xyz/cheat-sheet/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://reqmd.xyz/cheat-sheet/</guid><description>&lt;p&gt;A quick reference for every reqmd command and every &lt;code&gt;schema.yaml&lt;/code&gt; option. Each command shows real output from the bundled &lt;code&gt;spec/&lt;/code&gt; tree. Bookmark this page.&lt;/p&gt;
&lt;h2 id="command-overview" class="heading-2"&gt;Command overview&lt;a class="heading-anchor" href="#command-overview" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="reqmd-check--validate-requirements-and-trace-links" class="heading-3"&gt;&lt;code&gt;reqmd check&lt;/code&gt; — validate requirements and trace links&lt;a class="heading-anchor" href="#reqmd-check--validate-requirements-and-trace-links" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The main command. Recursively finds all &lt;code&gt;schema.yaml&lt;/code&gt; files under the given directory and validates every &lt;code&gt;.md&lt;/code&gt; file with requirement &lt;code&gt;attr&lt;/code&gt; blocks.&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;reqmd check spec/ # validate everything under spec/
reqmd check spec/ --json # JSON output for CI parsing
reqmd check spec/ --results ci-out/ # load verification results
reqmd check spec/ --results ci-out/ --results reviews/
reqmd check file.md -s schema.yaml # single-file mode
reqmd check spec/ --relaxed-versions # demote version-pin errors to warnings&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Exit codes:&lt;/strong&gt; 0 = all valid, 1 = validation errors, 2 = parse error.&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>Benchmarks</title><link>https://reqmd.xyz/benchmarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://reqmd.xyz/benchmarks/</guid><description>&lt;p&gt;reqmd is fast enough to run on every commit, every save, and every pull request — without anyone noticing the wait. This page shows the real numbers and explains what drives them.&lt;/p&gt;
&lt;h2 id="the-headline" class="heading-2"&gt;The headline&lt;a class="heading-anchor" href="#the-headline" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The tool&amp;rsquo;s own spec — 249 requirements across 6 document directories — validates in &lt;strong&gt;16 milliseconds&lt;/strong&gt;. That&amp;rsquo;s faster than a page load. For context, a typical project spec is in the hundreds, not the thousands.&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>FAQ</title><link>https://reqmd.xyz/faq/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://reqmd.xyz/faq/</guid><description>&lt;p&gt;Questions about reqmd, grouped by topic: what it is, how to use it, and how it fits your workflow.&lt;/p&gt;
&lt;h2 id="what-is-reqmd" class="heading-2"&gt;What is reqmd?&lt;a class="heading-anchor" href="#what-is-reqmd" aria-label="Link to this section"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="faq"&gt;
&lt;details open&gt;
&lt;summary&gt;What does reqmd do?&lt;/summary&gt;
&lt;div class="faq-body"&gt;
&lt;p&gt;reqmd is a command-line tool for writing, linking, and checking requirements and verification measures in plain Markdown. You write each requirement as a heading, a small YAML block, and some prose. reqmd checks every cross-reference — broken links, missing coverage, circular dependencies, stale version pins — and tells you what's wrong. It also exports to HTML, CSV, and graph formats.&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>