@spec-engine/spec-engine 0.8.1 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/agent/AGENTS.md +678 -0
- package/dist/agent/mcp.json +11 -0
- package/dist/agent/pre-commit +3 -0
- package/dist/agent/skills/req-author/SKILL.md +102 -0
- package/dist/docs/agent-reference/index.html +1280 -33
- package/dist/docs/architecture/index.html +6 -6
- package/dist/docs/checks/index.html +19 -266
- package/dist/docs/commands/index.html +32 -164
- package/dist/docs/format/index.html +2 -9
- package/dist/docs/getting-started/index.html +3 -3
- package/dist/docs/guides/platform-setup/index.html +2 -2
- package/dist/docs/pagefind/fragment/en_10e3da6.pf_fragment +0 -0
- package/dist/docs/pagefind/fragment/en_37cae5e.pf_fragment +0 -0
- package/dist/docs/pagefind/fragment/en_7fc2fcd.pf_fragment +0 -0
- package/dist/docs/pagefind/fragment/en_96d3bc1.pf_fragment +0 -0
- package/dist/docs/pagefind/fragment/en_a26aa07.pf_fragment +0 -0
- package/dist/docs/pagefind/fragment/en_b7e68ef.pf_fragment +0 -0
- package/dist/docs/pagefind/fragment/en_d8a5bcd.pf_fragment +0 -0
- package/dist/docs/pagefind/fragment/en_de67937.pf_fragment +0 -0
- package/dist/docs/pagefind/fragment/en_fc3c55b.pf_fragment +0 -0
- package/dist/docs/pagefind/index/en_1664b45.pf_index +0 -0
- package/dist/docs/pagefind/index/en_a8b8bb6.pf_index +0 -0
- package/dist/docs/pagefind/pagefind-entry.json +1 -1
- package/dist/docs/pagefind/pagefind.en_bc3d4a7766.pf_meta +0 -0
- package/dist/docs/platform-mapping/index.html +2 -1
- package/dist/docs/tags/index.html +9 -92
- package/dist/impl.js +1948 -653
- package/package.json +1 -1
- package/dist/docs/pagefind/fragment/en_1f98c2d.pf_fragment +0 -0
- package/dist/docs/pagefind/fragment/en_24f76b6.pf_fragment +0 -0
- package/dist/docs/pagefind/fragment/en_2ee687a.pf_fragment +0 -0
- package/dist/docs/pagefind/fragment/en_4bd9de6.pf_fragment +0 -0
- package/dist/docs/pagefind/fragment/en_9cc1878.pf_fragment +0 -0
- package/dist/docs/pagefind/fragment/en_9cfc306.pf_fragment +0 -0
- package/dist/docs/pagefind/fragment/en_b81dc52.pf_fragment +0 -0
- package/dist/docs/pagefind/fragment/en_c3abf3d.pf_fragment +0 -0
- package/dist/docs/pagefind/fragment/en_c3e92c6.pf_fragment +0 -0
- package/dist/docs/pagefind/index/en_59c3abf.pf_index +0 -0
- package/dist/docs/pagefind/index/en_a630d23.pf_index +0 -0
- package/dist/docs/pagefind/pagefind.en_ced49c317e.pf_meta +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="en" dir="ltr" data-theme="dark" data-has-toc data-has-sidebar class="astro-kmpt7d6z"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><title>Commands | Spec Engine</title><link rel="canonical" href="https://docs.spec-engine.dev/commands/"/><link rel="sitemap" href="/sitemap-index.xml"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="true"/><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Archivo:wght@600;700;800;900&family=IBM+Plex+Mono:wght@400;500;600&family=IBM+Plex+Sans:wght@400;500;600&display=swap"/><link rel="icon" href="/favicon.ico" sizes="any"/><link rel="icon" type="image/png" sizes="32x32" href="/favicon-32.png"/><link rel="icon" type="image/png" sizes="16x16" href="/favicon-16.png"/><link rel="apple-touch-icon" sizes="180x180" href="/favicon-180.png"/><link rel="manifest" href="/site.webmanifest"/><link rel="shortcut icon" href="/favicon.svg" type="image/svg+xml"/><meta name="generator" content="Astro v7.2.8"/><meta name="generator" content="Starlight v0.40.0"/><meta property="og:title" content="Commands"/><meta property="og:type" content="article"/><meta property="og:url" content="https://docs.spec-engine.dev/commands/"/><meta property="og:locale" content="en"/><meta property="og:description" content="
|
|
1
|
+
<!DOCTYPE html><html lang="en" dir="ltr" data-theme="dark" data-has-toc data-has-sidebar class="astro-kmpt7d6z"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><title>Commands | Spec Engine</title><link rel="canonical" href="https://docs.spec-engine.dev/commands/"/><link rel="sitemap" href="/sitemap-index.xml"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="true"/><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Archivo:wght@600;700;800;900&family=IBM+Plex+Mono:wght@400;500;600&family=IBM+Plex+Sans:wght@400;500;600&display=swap"/><link rel="icon" href="/favicon.ico" sizes="any"/><link rel="icon" type="image/png" sizes="32x32" href="/favicon-32.png"/><link rel="icon" type="image/png" sizes="16x16" href="/favicon-16.png"/><link rel="apple-touch-icon" sizes="180x180" href="/favicon-180.png"/><link rel="manifest" href="/site.webmanifest"/><link rel="shortcut icon" href="/favicon.svg" type="image/svg+xml"/><meta name="generator" content="Astro v7.2.8"/><meta name="generator" content="Starlight v0.40.0"/><meta property="og:title" content="Commands"/><meta property="og:type" content="article"/><meta property="og:url" content="https://docs.spec-engine.dev/commands/"/><meta property="og:locale" content="en"/><meta property="og:description" content="Which spec command to reach for, by task"/><meta property="og:site_name" content="Spec Engine"/><meta name="twitter:card" content="summary_large_image"/><meta name="description" content="Which spec command to reach for, by task"/><meta name="theme-color" content="#0F1214"/><meta property="og:image" content="https://docs.spec-engine.dev/og-spec-engine-docs.png"/><meta property="og:image:width" content="1200"/><meta property="og:image:height" content="630"/><meta name="twitter:image" content="https://docs.spec-engine.dev/og-spec-engine-docs.png"/><script>
|
|
2
2
|
window.StarlightThemeProvider = (() => {
|
|
3
3
|
const storedTheme =
|
|
4
4
|
typeof localStorage !== 'undefined' && localStorage.getItem('starlight-theme');
|
|
@@ -70,171 +70,39 @@
|
|
|
70
70
|
})();
|
|
71
71
|
</script></sl-sidebar-state-persist><div class="md:sl-hidden"><div class="mobile-preferences sl-flex astro-hclhd3l6"><div class="social-icons astro-hclhd3l6"><a href="https://github.com/spec-engine/spec-engine" rel="me" class="sl-flex astro-n6yxnlqb"><span class="sr-only astro-n6yxnlqb">GitHub</span><svg aria-hidden="true" class="astro-n6yxnlqb astro-ica5m7eu" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M12 .3a12 12 0 0 0-3.8 23.38c.6.12.83-.26.83-.57L9 21.07c-3.34.72-4.04-1.61-4.04-1.61-.55-1.39-1.34-1.76-1.34-1.76-1.08-.74.09-.73.09-.73 1.2.09 1.83 1.24 1.83 1.24 1.08 1.83 2.81 1.3 3.5 1 .1-.78.42-1.31.76-1.61-2.67-.3-5.47-1.33-5.47-5.93 0-1.31.47-2.38 1.24-3.22-.14-.3-.54-1.52.1-3.18 0 0 1-.32 3.3 1.23a11.5 11.5 0 0 1 6 0c2.28-1.55 3.29-1.23 3.29-1.23.64 1.66.24 2.88.12 3.18a4.65 4.65 0 0 1 1.23 3.22c0 4.61-2.8 5.63-5.48 5.92.42.36.81 1.1.81 2.22l-.01 3.29c0 .31.2.69.82.57A12 12 0 0 0 12 .3Z"/></svg></a></div><starlight-theme-select><label style="--sl-select-width: 6.25em" class="astro-bqlrlpix"><span class="sr-only astro-bqlrlpix">Select theme</span><svg aria-hidden="true" class="icon label-icon astro-bqlrlpix astro-ica5m7eu" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21 14h-1V7a3 3 0 0 0-3-3H7a3 3 0 0 0-3 3v7H3a1 1 0 0 0-1 1v2a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3v-2a1 1 0 0 0-1-1ZM6 7a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v7H6V7Zm14 10a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-1h16v1Z"/></svg><select autocomplete="off" class="astro-bqlrlpix"><option value="dark" class="astro-bqlrlpix">Dark</option><option value="light" class="astro-bqlrlpix">Light</option><option value="auto" selected class="astro-bqlrlpix">Auto</option></select><svg aria-hidden="true" class="icon caret astro-bqlrlpix astro-ica5m7eu" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M17 9.17a1 1 0 0 0-1.41 0L12 12.71 8.46 9.17a1 1 0 1 0-1.41 1.42l4.24 4.24a1.002 1.002 0 0 0 1.42 0L17 10.59a1.002 1.002 0 0 0 0-1.42Z"/></svg></label></starlight-theme-select><script>
|
|
72
72
|
StarlightThemeProvider.updatePickers();
|
|
73
|
-
</script></div></div></div></div></nav><div class="main-frame astro-qobrlvtk"><script type="module">var e=document.getElementById(`starlight__sidebar`),t=e?.querySelector(`sl-sidebar-state-persist`),n=`sl-sidebar-state`,r=()=>{let r=[],i=t?.dataset.hash||``;try{let e=sessionStorage.getItem(n),t=JSON.parse(e||`{}`);Array.isArray(t.open)&&t.hash===i&&(r=t.open)}catch{}return{hash:i,open:r,scroll:e?.scrollTop||0}},i=e=>{try{sessionStorage.setItem(n,JSON.stringify(e))}catch{}},a=()=>i(r()),o=(e,t)=>{let n=r();n.open[t]=e,i(n)};t?.addEventListener(`click`,e=>{if(!(e.target instanceof Element))return;let t=e.target.closest(`summary`)?.closest(`details`);if(!t)return;let n=t.querySelector(`sl-sidebar-restore`),r=parseInt(n?.dataset.index||``);isNaN(r)||o(!t.open,r)}),addEventListener(`visibilitychange`,()=>{document.visibilityState===`hidden`&&a()}),addEventListener(`pageHide`,a);</script><div class="lg:sl-flex astro-iv7ihhtf"><aside class="right-sidebar-container print:hidden astro-iv7ihhtf"><div class="right-sidebar astro-iv7ihhtf"><div class="lg:sl-hidden astro-dfaa6j3s"><mobile-starlight-toc data-min-h="2" data-max-h="3" class="astro-hhhdejk6"><nav aria-labelledby="starlight__on-this-page--mobile" class="astro-hhhdejk6"><details id="starlight__mobile-toc" class="astro-hhhdejk6"><summary id="starlight__on-this-page--mobile" class="sl-flex astro-hhhdejk6"><span class="toggle sl-flex astro-hhhdejk6">On this page<svg aria-hidden="true" class="caret astro-hhhdejk6 astro-ica5m7eu" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg></span><span class="display-current astro-hhhdejk6"></span></summary><div class="dropdown astro-hhhdejk6"><ul class="isMobile astro-l6rvz6dz" style="--depth: 0;"><li style="--depth: 0;" class="astro-l6rvz6dz"><a href="#_top" style="--depth: 0;" class="astro-l6rvz6dz"><span style="--depth: 0;" class="astro-l6rvz6dz">Overview</span></a></li><li style="--depth: 0;" class="astro-l6rvz6dz"><a href="#exit-code-contract" style="--depth: 0;" class="astro-l6rvz6dz"><span style="--depth: 0;" class="astro-l6rvz6dz">Exit code contract</span></a></li><li style="--depth: 0;" class="astro-l6rvz6dz"><a href="#common-flags" style="--depth: 0;" class="astro-l6rvz6dz"><span style="--depth: 0;" class="astro-l6rvz6dz">Common flags</span></a></li><li style="--depth: 0;" class="astro-l6rvz6dz"><a href="#command-reference" style="--depth: 0;" class="astro-l6rvz6dz"><span style="--depth: 0;" class="astro-l6rvz6dz">Command reference</span></a><ul class="isMobile astro-l6rvz6dz" style="--depth: 1;"><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-index-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec index [platformDir]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-check-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec check [platformDir]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-guard-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec guard [platformDir]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-map-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec map [platformDir]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-get-key-nnn-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec get <KEY-NNN> [platformDir]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-list-platformdir---domain-key---status-s" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec list [platformDir] [--domain KEY] [--status S]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-query-text-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec query <text> [platformDir]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-relations-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec relations [platformDir]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-provenance-issueid-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec provenance [issueId] [platformDir]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-resolve-files-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec resolve <files...> [platformDir]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-propagation-reqid-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec propagation <reqId> [platformDir]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-gate-repo-reqid-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec gate <repo> <reqId> [platformDir]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-init-repo" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec init [repo]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-domain-new-name--spec-domain-list-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec domain new <name> / spec domain list [platformDir]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-domain-grammar-key-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec domain grammar <KEY> [platformDir]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-migrate-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec migrate [platformDir]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-req-domain-prefix-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec req <domain-prefix> [platformDir]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-term-" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec term …</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-glossary-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec glossary [platformDir]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-supersede-reqid-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec supersede <reqId> [platformDir]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-move-reqid-new-domain-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec move <reqId> <NEW-DOMAIN> [platformDir]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-amend-reqid-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec amend <reqId> [platformDir]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-accept-reqid-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec accept <reqId> [platformDir]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-serve-platformdir---port-n---host-ip---token-t---allow-writes" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec serve [platformDir] [--port N] [--host IP] [--token T] [--allow-writes]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-mcp-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec mcp [platformDir]</span></a></li></ul></li></ul></div></details></nav></mobile-starlight-toc><script type="module" src="/_astro/MobileTableOfContents.astro_astro_type_script_index_0_lang.BcSo_yiZ.js"></script></div><div class="right-sidebar-panel sl-hidden lg:sl-block astro-dfaa6j3s"><div class="sl-container astro-dfaa6j3s"><starlight-toc data-min-h="2" data-max-h="3"><nav aria-labelledby="starlight__on-this-page"><h2 id="starlight__on-this-page">On this page</h2><ul class="astro-l6rvz6dz" style="--depth: 0;"><li style="--depth: 0;" class="astro-l6rvz6dz"><a href="#_top" style="--depth: 0;" class="astro-l6rvz6dz"><span style="--depth: 0;" class="astro-l6rvz6dz">Overview</span></a></li><li style="--depth: 0;" class="astro-l6rvz6dz"><a href="#exit-code-contract" style="--depth: 0;" class="astro-l6rvz6dz"><span style="--depth: 0;" class="astro-l6rvz6dz">Exit code contract</span></a></li><li style="--depth: 0;" class="astro-l6rvz6dz"><a href="#common-flags" style="--depth: 0;" class="astro-l6rvz6dz"><span style="--depth: 0;" class="astro-l6rvz6dz">Common flags</span></a></li><li style="--depth: 0;" class="astro-l6rvz6dz"><a href="#command-reference" style="--depth: 0;" class="astro-l6rvz6dz"><span style="--depth: 0;" class="astro-l6rvz6dz">Command reference</span></a><ul class="astro-l6rvz6dz" style="--depth: 1;"><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-index-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec index [platformDir]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-check-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec check [platformDir]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-guard-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec guard [platformDir]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-map-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec map [platformDir]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-get-key-nnn-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec get <KEY-NNN> [platformDir]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-list-platformdir---domain-key---status-s" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec list [platformDir] [--domain KEY] [--status S]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-query-text-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec query <text> [platformDir]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-relations-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec relations [platformDir]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-provenance-issueid-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec provenance [issueId] [platformDir]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-resolve-files-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec resolve <files...> [platformDir]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-propagation-reqid-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec propagation <reqId> [platformDir]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-gate-repo-reqid-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec gate <repo> <reqId> [platformDir]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-init-repo" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec init [repo]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-domain-new-name--spec-domain-list-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec domain new <name> / spec domain list [platformDir]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-domain-grammar-key-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec domain grammar <KEY> [platformDir]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-migrate-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec migrate [platformDir]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-req-domain-prefix-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec req <domain-prefix> [platformDir]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-term-" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec term …</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-glossary-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec glossary [platformDir]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-supersede-reqid-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec supersede <reqId> [platformDir]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-move-reqid-new-domain-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec move <reqId> <NEW-DOMAIN> [platformDir]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-amend-reqid-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec amend <reqId> [platformDir]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-accept-reqid-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec accept <reqId> [platformDir]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-serve-platformdir---port-n---host-ip---token-t---allow-writes" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec serve [platformDir] [--port N] [--host IP] [--token T] [--allow-writes]</span></a></li><li style="--depth: 1;" class="astro-l6rvz6dz"><a href="#spec-mcp-platformdir" style="--depth: 1;" class="astro-l6rvz6dz"><span style="--depth: 1;" class="astro-l6rvz6dz">spec mcp [platformDir]</span></a></li></ul></li></ul></nav></starlight-toc><script type="module" src="/_astro/TableOfContents.astro_astro_type_script_index_0_lang.Csloo1VZ.js"></script></div></div></div></aside><div class="main-pane astro-iv7ihhtf"><main data-pagefind-body class="astro-kmpt7d6z" lang="en" dir="ltr"><div class="content-panel astro-d3w5v5qg"><div class="sl-container astro-d3w5v5qg"><h1 id="_top" class="astro-elp5pbgd">Commands</h1></div></div><div class="content-panel astro-d3w5v5qg"><div class="sl-container astro-d3w5v5qg"><div class="sl-markdown-content"><p>Install the CLI from npm — <code dir="auto">bun add -g @spec-engine/spec-engine</code> puts <code dir="auto">spec</code> on your PATH, and every command below is written that way. Without a global install, run any of them as <code dir="auto">bunx @spec-engine/spec-engine <command> [args]</code>; from a checkout, as <code dir="auto">bun packages/engine/src/cli.ts <command> [args]</code>. See <a href="/getting-started/">Getting Started</a> for the details.</p>
|
|
74
|
-
<
|
|
75
|
-
<
|
|
76
|
-
<thead>
|
|
77
|
-
<tr>
|
|
78
|
-
<th>Code</th>
|
|
79
|
-
<th>Meaning</th>
|
|
80
|
-
</tr>
|
|
81
|
-
</thead>
|
|
82
|
-
<tbody>
|
|
83
|
-
<tr>
|
|
84
|
-
<td>0</td>
|
|
85
|
-
<td>Success. Empty results are success (<code dir="auto">[]</code> on stdout, guidance on stderr).</td>
|
|
86
|
-
</tr>
|
|
87
|
-
<tr>
|
|
88
|
-
<td>1</td>
|
|
89
|
-
<td>Data-level failure: <code dir="auto">check</code> found ≥1 error-severity diagnostic; <code dir="auto">guard</code> found a loss; <code dir="auto">gate</code> failed; <code dir="auto">index</code> crashed mid-build.</td>
|
|
90
|
-
</tr>
|
|
91
|
-
<tr>
|
|
92
|
-
<td>2</td>
|
|
93
|
-
<td>Usage/environment error: bad args, not a Spec Engine platform, path-containment violation, etc.</td>
|
|
94
|
-
</tr>
|
|
95
|
-
</tbody>
|
|
96
|
-
</table>
|
|
97
|
-
<div class="sl-heading-wrapper level-h2"><h2 id="common-flags">Common flags</h2><a class="sl-anchor-link" href="#common-flags"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Common flags”</span></a></div>
|
|
98
|
-
<p>Index-touching commands (<code dir="auto">index</code>, <code dir="auto">check</code>, <code dir="auto">map</code>, <code dir="auto">query</code>, <code dir="auto">relations</code>, <code dir="auto">resolve</code>, <code dir="auto">propagation</code>, <code dir="auto">provenance</code>, <code dir="auto">gate</code>, <code dir="auto">serve</code>) accept:</p>
|
|
73
|
+
</script></div></div></div></div></nav><div class="main-frame astro-qobrlvtk"><script type="module">var e=document.getElementById(`starlight__sidebar`),t=e?.querySelector(`sl-sidebar-state-persist`),n=`sl-sidebar-state`,r=()=>{let r=[],i=t?.dataset.hash||``;try{let e=sessionStorage.getItem(n),t=JSON.parse(e||`{}`);Array.isArray(t.open)&&t.hash===i&&(r=t.open)}catch{}return{hash:i,open:r,scroll:e?.scrollTop||0}},i=e=>{try{sessionStorage.setItem(n,JSON.stringify(e))}catch{}},a=()=>i(r()),o=(e,t)=>{let n=r();n.open[t]=e,i(n)};t?.addEventListener(`click`,e=>{if(!(e.target instanceof Element))return;let t=e.target.closest(`summary`)?.closest(`details`);if(!t)return;let n=t.querySelector(`sl-sidebar-restore`),r=parseInt(n?.dataset.index||``);isNaN(r)||o(!t.open,r)}),addEventListener(`visibilitychange`,()=>{document.visibilityState===`hidden`&&a()}),addEventListener(`pageHide`,a);</script><div class="lg:sl-flex astro-iv7ihhtf"><aside class="right-sidebar-container print:hidden astro-iv7ihhtf"><div class="right-sidebar astro-iv7ihhtf"><div class="lg:sl-hidden astro-dfaa6j3s"><mobile-starlight-toc data-min-h="2" data-max-h="3" class="astro-hhhdejk6"><nav aria-labelledby="starlight__on-this-page--mobile" class="astro-hhhdejk6"><details id="starlight__mobile-toc" class="astro-hhhdejk6"><summary id="starlight__on-this-page--mobile" class="sl-flex astro-hhhdejk6"><span class="toggle sl-flex astro-hhhdejk6">On this page<svg aria-hidden="true" class="caret astro-hhhdejk6 astro-ica5m7eu" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg></span><span class="display-current astro-hhhdejk6"></span></summary><div class="dropdown astro-hhhdejk6"><ul class="isMobile astro-l6rvz6dz" style="--depth: 0;"><li style="--depth: 0;" class="astro-l6rvz6dz"><a href="#_top" style="--depth: 0;" class="astro-l6rvz6dz"><span style="--depth: 0;" class="astro-l6rvz6dz">Overview</span></a></li><li style="--depth: 0;" class="astro-l6rvz6dz"><a href="#find-the-requirements-a-change-touches" style="--depth: 0;" class="astro-l6rvz6dz"><span style="--depth: 0;" class="astro-l6rvz6dz">Find the requirements a change touches</span></a></li><li style="--depth: 0;" class="astro-l6rvz6dz"><a href="#check-a-change-before-it-ships" style="--depth: 0;" class="astro-l6rvz6dz"><span style="--depth: 0;" class="astro-l6rvz6dz">Check a change before it ships</span></a></li><li style="--depth: 0;" class="astro-l6rvz6dz"><a href="#author-and-change-requirements" style="--depth: 0;" class="astro-l6rvz6dz"><span style="--depth: 0;" class="astro-l6rvz6dz">Author and change requirements</span></a></li><li style="--depth: 0;" class="astro-l6rvz6dz"><a href="#see-coverage-across-a-platform" style="--depth: 0;" class="astro-l6rvz6dz"><span style="--depth: 0;" class="astro-l6rvz6dz">See coverage across a platform</span></a></li><li style="--depth: 0;" class="astro-l6rvz6dz"><a href="#set-up-and-serve" style="--depth: 0;" class="astro-l6rvz6dz"><span style="--depth: 0;" class="astro-l6rvz6dz">Set up and serve</span></a></li></ul></div></details></nav></mobile-starlight-toc><script type="module" src="/_astro/MobileTableOfContents.astro_astro_type_script_index_0_lang.BcSo_yiZ.js"></script></div><div class="right-sidebar-panel sl-hidden lg:sl-block astro-dfaa6j3s"><div class="sl-container astro-dfaa6j3s"><starlight-toc data-min-h="2" data-max-h="3"><nav aria-labelledby="starlight__on-this-page"><h2 id="starlight__on-this-page">On this page</h2><ul class="astro-l6rvz6dz" style="--depth: 0;"><li style="--depth: 0;" class="astro-l6rvz6dz"><a href="#_top" style="--depth: 0;" class="astro-l6rvz6dz"><span style="--depth: 0;" class="astro-l6rvz6dz">Overview</span></a></li><li style="--depth: 0;" class="astro-l6rvz6dz"><a href="#find-the-requirements-a-change-touches" style="--depth: 0;" class="astro-l6rvz6dz"><span style="--depth: 0;" class="astro-l6rvz6dz">Find the requirements a change touches</span></a></li><li style="--depth: 0;" class="astro-l6rvz6dz"><a href="#check-a-change-before-it-ships" style="--depth: 0;" class="astro-l6rvz6dz"><span style="--depth: 0;" class="astro-l6rvz6dz">Check a change before it ships</span></a></li><li style="--depth: 0;" class="astro-l6rvz6dz"><a href="#author-and-change-requirements" style="--depth: 0;" class="astro-l6rvz6dz"><span style="--depth: 0;" class="astro-l6rvz6dz">Author and change requirements</span></a></li><li style="--depth: 0;" class="astro-l6rvz6dz"><a href="#see-coverage-across-a-platform" style="--depth: 0;" class="astro-l6rvz6dz"><span style="--depth: 0;" class="astro-l6rvz6dz">See coverage across a platform</span></a></li><li style="--depth: 0;" class="astro-l6rvz6dz"><a href="#set-up-and-serve" style="--depth: 0;" class="astro-l6rvz6dz"><span style="--depth: 0;" class="astro-l6rvz6dz">Set up and serve</span></a></li></ul></nav></starlight-toc><script type="module" src="/_astro/TableOfContents.astro_astro_type_script_index_0_lang.Csloo1VZ.js"></script></div></div></div></aside><div class="main-pane astro-iv7ihhtf"><main data-pagefind-body class="astro-kmpt7d6z" lang="en" dir="ltr"><div class="content-panel astro-d3w5v5qg"><div class="sl-container astro-d3w5v5qg"><h1 id="_top" class="astro-elp5pbgd">Commands</h1></div></div><div class="content-panel astro-d3w5v5qg"><div class="sl-container astro-d3w5v5qg"><div class="sl-markdown-content"><p>Install the CLI from npm: <code dir="auto">bun add -g @spec-engine/spec-engine</code> puts <code dir="auto">spec</code> on your PATH. Without a global install, run any command as <code dir="auto">bunx @spec-engine/spec-engine <command> [args]</code>. See <a href="/getting-started/">Getting Started</a> for the details.</p>
|
|
74
|
+
<p>This page groups the commands by task. The exact contract of each one (flags, <code dir="auto">--json</code> shapes, exit codes) is in the <a href="/agent-reference/#command-reference">Agent Reference</a>, which is the one copy of it.</p>
|
|
75
|
+
<div class="sl-heading-wrapper level-h2"><h2 id="find-the-requirements-a-change-touches">Find the requirements a change touches</h2><a class="sl-anchor-link" href="#find-the-requirements-a-change-touches"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Find the requirements a change touches”</span></a></div>
|
|
99
76
|
<ul>
|
|
100
|
-
<li><code dir="auto"
|
|
101
|
-
<li><code dir="auto">--
|
|
102
|
-
<li><code dir="auto"
|
|
77
|
+
<li><a href="/agent-reference/#spec-query"><code dir="auto">spec query</code></a>: full-text search over requirement statements and glossary terms.</li>
|
|
78
|
+
<li><a href="/agent-reference/#spec-resolve"><code dir="auto">spec resolve</code></a>: the requirements tagged in given files, or with <code dir="auto">--req</code>, every tag site for one requirement.</li>
|
|
79
|
+
<li><a href="/agent-reference/#spec-get"><code dir="auto">spec get</code></a> and <a href="/agent-reference/#spec-list"><code dir="auto">spec list</code></a>: one requirement’s record, or every record with its history.</li>
|
|
103
80
|
</ul>
|
|
104
|
-
<
|
|
105
|
-
<div class="sl-heading-wrapper level-h2"><h2 id="command-reference">Command reference</h2><a class="sl-anchor-link" href="#command-reference"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Command reference”</span></a></div>
|
|
106
|
-
<div class="sl-heading-wrapper level-h3"><h3 id="spec-index-platformdir"><code dir="auto">spec index [platformDir]</code></h3><a class="sl-anchor-link" href="#spec-index-platformdir"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “spec index [platformDir]”</span></a></div>
|
|
107
|
-
<p>Build or refresh the derived SQLite index at <code dir="auto"><platformDir>/.spec-engine/index.sqlite</code>. <code dir="auto">--json</code> emits <code dir="auto">{ build_id, repos, domains, requirements, tags, diagnostics }</code>; <code dir="auto">build_id</code> is deterministic for identical inputs.</p>
|
|
108
|
-
<p><strong>Exit codes:</strong> 0 / 1 / 2</p>
|
|
109
|
-
<div class="sl-heading-wrapper level-h3"><h3 id="spec-check-platformdir"><code dir="auto">spec check [platformDir]</code></h3><a class="sl-anchor-link" href="#spec-check-platformdir"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “spec check [platformDir]”</span></a></div>
|
|
110
|
-
<p>Cross-repo integrity, coverage, and drift diagnostics. See <a href="/checks/">Integrity Checks</a> for every code.</p>
|
|
111
|
-
<table>
|
|
112
|
-
<thead>
|
|
113
|
-
<tr>
|
|
114
|
-
<th>Flag</th>
|
|
115
|
-
<th>Description</th>
|
|
116
|
-
</tr>
|
|
117
|
-
</thead>
|
|
118
|
-
<tbody>
|
|
119
|
-
<tr>
|
|
120
|
-
<td><code dir="auto">--ci</code></td>
|
|
121
|
-
<td>Force cold rebuild (delete DB first)</td>
|
|
122
|
-
</tr>
|
|
123
|
-
<tr>
|
|
124
|
-
<td><code dir="auto">--results <junit.xml></code></td>
|
|
125
|
-
<td>Trusted-red proof gate: a verifying tag only counts when its test <em>passed</em> — fires <code dir="auto">UNPROVEN_REQ</code> otherwise. Without it, <code dir="auto">PROOFS_UNCONFIRMED</code> reminds you the gate is presence-only</td>
|
|
126
|
-
</tr>
|
|
127
|
-
<tr>
|
|
128
|
-
<td><code dir="auto">--base <ref></code></td>
|
|
129
|
-
<td>Governance diff against a git ref: fires <code dir="auto">REQUIREMENT_REMOVED</code> / <code dir="auto">UNAPPROVED_STATUS_FLIP</code> (and <code dir="auto">PARTIAL_PROPAGATION</code> with <code dir="auto">--results</code>)</td>
|
|
130
|
-
</tr>
|
|
131
|
-
<tr>
|
|
132
|
-
<td><code dir="auto">--approved-by <list></code></td>
|
|
133
|
-
<td>Approver set consulted by the status-flip governance check</td>
|
|
134
|
-
</tr>
|
|
135
|
-
<tr>
|
|
136
|
-
<td><code dir="auto">--require-owner-approval</code></td>
|
|
137
|
-
<td>Escalate <code dir="auto">UNAPPROVED_STATUS_FLIP</code> from warning to error</td>
|
|
138
|
-
</tr>
|
|
139
|
-
<tr>
|
|
140
|
-
<td><code dir="auto">--unsourced-change</code></td>
|
|
141
|
-
<td>Opt-in: warn on superseded requirements lacking a <code dir="auto">supersedes-via</code> issue</td>
|
|
142
|
-
</tr>
|
|
143
|
-
</tbody>
|
|
144
|
-
</table>
|
|
145
|
-
<p><strong>Exit codes:</strong> 0 (clean) / 1 (errors found) / 2 (crash)</p>
|
|
146
|
-
<div class="sl-heading-wrapper level-h3"><h3 id="spec-guard-platformdir"><code dir="auto">spec guard [platformDir]</code></h3><a class="sl-anchor-link" href="#spec-guard-platformdir"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “spec guard [platformDir]”</span></a></div>
|
|
147
|
-
<p>The pre-commit <strong>loss gate</strong>: diffs the requirement derivation at <code dir="auto">--against <ref></code> (default <code dir="auto">HEAD</code>) against the working tree and blocks a change about to lose a requirement, its last implementation, or its last test. Losses: <code dir="auto">REQUIREMENT_REMOVED</code> (an active requirement gone with no supersession), <code dir="auto">IMPL_LOST</code> / <code dir="auto">VERIFY_LOST</code> (a surviving requirement’s last implementing/verifying tag removed), <code dir="auto">SPEC_FILE_DELETED</code>. A loss is suppressed only by superseding or deprecating the requirement in the same change — there is no override comment. A non-git tree or unknown ref warns and exits 0 — the guard is a safety net, not a git dependency.</p>
|
|
148
|
-
<table>
|
|
149
|
-
<thead>
|
|
150
|
-
<tr>
|
|
151
|
-
<th>Flag</th>
|
|
152
|
-
<th>Description</th>
|
|
153
|
-
</tr>
|
|
154
|
-
</thead>
|
|
155
|
-
<tbody>
|
|
156
|
-
<tr>
|
|
157
|
-
<td><code dir="auto">--against <ref></code></td>
|
|
158
|
-
<td>Git ref to diff against (default <code dir="auto">HEAD</code>)</td>
|
|
159
|
-
</tr>
|
|
160
|
-
<tr>
|
|
161
|
-
<td><code dir="auto">--json</code></td>
|
|
162
|
-
<td>Emit <code dir="auto">{ kind, req_id, file, line, detail }</code> rows, byte-stable</td>
|
|
163
|
-
</tr>
|
|
164
|
-
</tbody>
|
|
165
|
-
</table>
|
|
166
|
-
<p><strong>Exit codes:</strong> 0 (clean) / 1 (loss found) / 2</p>
|
|
167
|
-
<div class="sl-heading-wrapper level-h3"><h3 id="spec-map-platformdir"><code dir="auto">spec map [platformDir]</code></h3><a class="sl-anchor-link" href="#spec-map-platformdir"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “spec map [platformDir]”</span></a></div>
|
|
168
|
-
<p>Render the cross-repo coverage matrix. <strong>Exit codes:</strong> 0 / 2</p>
|
|
169
|
-
<div class="sl-heading-wrapper level-h3"><h3 id="spec-get-key-nnn-platformdir"><code dir="auto">spec get <KEY-NNN> [platformDir]</code></h3><a class="sl-anchor-link" href="#spec-get-key-nnn-platformdir"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “spec get <KEY-NNN> [platformDir]”</span></a></div>
|
|
170
|
-
<p>Print one requirement’s full record (status, key, seq, statement, why, versions, source location). <code dir="auto">--json</code> prints the same object <code dir="auto">GET /api/requirements/:id</code> serves. An unknown id prints <code dir="auto">[]</code> with guidance on stderr and exits 0. <strong>Exit codes:</strong> 0 / 2</p>
|
|
171
|
-
<div class="sl-heading-wrapper level-h3"><h3 id="spec-list-platformdir---domain-key---status-s"><code dir="auto">spec list [platformDir] [--domain KEY] [--status S]</code></h3><a class="sl-anchor-link" href="#spec-list-platformdir---domain-key---status-s"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “spec list [platformDir] [--domain KEY] [--status S]”</span></a></div>
|
|
172
|
-
<p>Print every requirement record in (key, seq) order, superseded and deprecated history included. <code dir="auto">--domain</code> narrows to one key; <code dir="auto">--status</code> to <code dir="auto">active</code>, <code dir="auto">draft</code>, <code dir="auto">superseded</code>, or <code dir="auto">deprecated</code> (any other word exits 2). <strong>Exit codes:</strong> 0 / 2</p>
|
|
173
|
-
<div class="sl-heading-wrapper level-h3"><h3 id="spec-query-text-platformdir"><code dir="auto">spec query <text> [platformDir]</code></h3><a class="sl-anchor-link" href="#spec-query-text-platformdir"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “spec query <text> [platformDir]”</span></a></div>
|
|
174
|
-
<p>Full-text retrieval over requirements (FTS5, BM25-ranked, best first). Superseded requirements are excluded. Glossary term definitions ride the same index and surface in a separate Terms group. <code dir="auto">--limit N</code> (default 10, max 1000). Wrap multi-word phrases in quotes; bare <code dir="auto">AND</code>/<code dir="auto">OR</code> is an FTS5 grammar error (exit 2).</p>
|
|
175
|
-
<p><strong>Exit codes:</strong> 0 / 2</p>
|
|
176
|
-
<div class="sl-heading-wrapper level-h3"><h3 id="spec-relations-platformdir"><code dir="auto">spec relations [platformDir]</code></h3><a class="sl-anchor-link" href="#spec-relations-platformdir"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “spec relations [platformDir]”</span></a></div>
|
|
177
|
-
<p>Render <code dir="auto">relates</code> links as a mermaid <code dir="auto">graph LR</code> diagram (text mode) or <code dir="auto">{ from_id, to_id, source_file, line }</code> rows (<code dir="auto">--json</code>). <strong>Exit codes:</strong> 0 / 2</p>
|
|
178
|
-
<div class="sl-heading-wrapper level-h3"><h3 id="spec-provenance-issueid-platformdir"><code dir="auto">spec provenance [issueId] [platformDir]</code></h3><a class="sl-anchor-link" href="#spec-provenance-issueid-platformdir"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “spec provenance [issueId] [platformDir]”</span></a></div>
|
|
179
|
-
<p>Per-requirement provenance matrix: the issues that created/revised/retired it (by role), the backing tests, and a git pointer. An optional leading <code dir="auto"><issueId></code> is a display-only reverse-lookup filter — the issue ID stays opaque, never a join key. <code dir="auto">--resolve-issues</code> overlays tracker title/status/URL via the optional adapter (needs <code dir="auto">SPEC_TRACKER_TOKEN</code>; off by default, degrades gracefully).</p>
|
|
180
|
-
<p><strong>Exit codes:</strong> 0 / 2</p>
|
|
181
|
-
<div class="sl-heading-wrapper level-h3"><h3 id="spec-resolve-files-platformdir"><code dir="auto">spec resolve <files...> [platformDir]</code></h3><a class="sl-anchor-link" href="#spec-resolve-files-platformdir"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “spec resolve <files...> [platformDir]”</span></a></div>
|
|
182
|
-
<p>Requirements tagged in the given files. Accepts multiple positionals, comma-split within a positional, and absolute paths under the platform tree. <code dir="auto">--req KEY-NNN</code> inverts the lookup: every tag site for that requirement across all repos.</p>
|
|
183
|
-
<p><strong>Exit codes:</strong> 0 / 2</p>
|
|
184
|
-
<div class="sl-heading-wrapper level-h3"><h3 id="spec-propagation-reqid-platformdir"><code dir="auto">spec propagation <reqId> [platformDir]</code></h3><a class="sl-anchor-link" href="#spec-propagation-reqid-platformdir"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “spec propagation <reqId> [platformDir]”</span></a></div>
|
|
185
|
-
<p>Classify each member repo’s relationship to a superseded requirement: <code dir="auto">MIGRATED_VERIFIED</code>, <code dir="auto">MIGRATED_UNVERIFIED</code>, <code dir="auto">ON_PREDECESSOR</code>, <code dir="auto">ON_OTHER_DOMAIN_REQ</code>, <code dir="auto">NO_DOMAIN_REFERENCE</code> — plus a <code dir="auto">drifted</code> flag per member. Rows are in dependency order, providers before consumers, read from platform-map’s <code dir="auto">dependsOn</code>; ties by name. See <a href="/platform-mapping/">Platform Mapping</a>.</p>
|
|
186
|
-
<p><strong>Exit codes:</strong> 0 / 2</p>
|
|
187
|
-
<div class="sl-heading-wrapper level-h3"><h3 id="spec-gate-repo-reqid-platformdir"><code dir="auto">spec gate <repo> <reqId> [platformDir]</code></h3><a class="sl-anchor-link" href="#spec-gate-repo-reqid-platformdir"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “spec gate <repo> <reqId> [platformDir]”</span></a></div>
|
|
188
|
-
<p>Approval primitive. Passes iff <code dir="auto"><reqId></code> is Active AND <code dir="auto"><repo></code>’s pin covers the requirement’s <code dir="auto">changed_at_version</code>. <strong>Decision order:</strong> <code dir="auto">NOT_FOUND</code> → <code dir="auto">DRAFT</code> → <code dir="auto">SUPERSEDED</code> → <code dir="auto">VERSION_PIN</code> → <code dir="auto">PASS</code>; pin equality passes. An unknown repo is a usage error (exit 2), not a gate failure.</p>
|
|
189
|
-
<p><strong>Exit codes:</strong> 0 (PASS) / 1 (failure) / 2 (bad args)</p>
|
|
190
|
-
<div class="sl-heading-wrapper level-h3"><h3 id="spec-init-repo"><code dir="auto">spec init [repo]</code></h3><a class="sl-anchor-link" href="#spec-init-repo"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “spec init [repo]”</span></a></div>
|
|
191
|
-
<p>Declare a member and write its <code dir="auto">spec-engine.member.json</code>. A repository directly under the platform folder that the platform file does not list is declared through platform-map first (a platform file entry and a marker), then pinned; a workspace package of a monorepo gets a nested pin and no declaration; a plain folder platform-map cannot declare is refused. Pin resolution: <code dir="auto">--specs <pin></code> wins; else the <strong>derived platform version</strong> (the max of the enclosing platform’s domain versions); else <code dir="auto">spec-engine@1</code> with a printed note. An existing config is left untouched (“already configured”, exit 0); <code dir="auto">--force</code> rewrites the pin while preserving an <code dir="auto">ignore</code> list. <code dir="auto">--platform <dir></code> records a declared member’s checkout that lives outside the platform folder in platform-map’s per-user file. See <a href="/platform-mapping/">Platform Mapping</a>.</p>
|
|
192
|
-
<p><strong>Exit codes:</strong> 0 / 2 (never exit 1)</p>
|
|
193
|
-
<div class="sl-heading-wrapper level-h3"><h3 id="spec-domain-new-name--spec-domain-list-platformdir"><code dir="auto">spec domain new <name></code> / <code dir="auto">spec domain list [platformDir]</code></h3><a class="sl-anchor-link" href="#spec-domain-new-name--spec-domain-list-platformdir"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “spec domain new <name> / spec domain list [platformDir]”</span></a></div>
|
|
194
|
-
<p>Scaffold <code dir="auto">spec-engine/<KEY>/SPEC.json</code> (input normalized to uppercase, whitespace stripped) / list domains with their charters (<code dir="auto">--json</code>: sorted <code dir="auto">{ key, scope }</code> array, read from the filesystem).</p>
|
|
195
|
-
<p><strong>Exit codes:</strong> 0 / 2</p>
|
|
196
|
-
<div class="sl-heading-wrapper level-h3"><h3 id="spec-domain-grammar-key-platformdir"><code dir="auto">spec domain grammar <KEY> [platformDir]</code></h3><a class="sl-anchor-link" href="#spec-domain-grammar-key-platformdir"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “spec domain grammar <KEY> [platformDir]”</span></a></div>
|
|
197
|
-
<p>Set a domain’s statement grammar (<code dir="auto">--grammar ears|freeform</code>) and/or its severity (<code dir="auto">--severity warning|error</code>) through the validating write seam; every other envelope field is written back as read. <code dir="auto">--json</code> prints <code dir="auto">{ key, grammar, grammar_severity, file }</code>. Under <code dir="auto">grammar: "ears"</code>, a statement must fit one of the five EARS shapes and pass the one-promise lint: no <code dir="auto">; </code> after the first <code dir="auto">shall</code>, no <code dir="auto">, and <subject> shall</code> second clause, no rationale connective (<code dir="auto">because</code>, <code dir="auto">so that</code>, <code dir="auto">in order to</code>). A trailing <code dir="auto">, so <observable consequence></code> stays legal. <code dir="auto">spec check</code> reports a miss as <code dir="auto">STATEMENT_GRAMMAR</code>, and <code dir="auto">spec req</code> / <code dir="auto">amend</code> / <code dir="auto">supersede</code> / <code dir="auto">move</code> warn or refuse at write time, both at the declared severity. The TERM domain is exempt.</p>
|
|
198
|
-
<p><strong>Exit codes:</strong> 0 / 2 (unknown domain, neither flag, or a value outside the enums)</p>
|
|
199
|
-
<div class="sl-heading-wrapper level-h3"><h3 id="spec-migrate-platformdir"><code dir="auto">spec migrate [platformDir]</code></h3><a class="sl-anchor-link" href="#spec-migrate-platformdir"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “spec migrate [platformDir]”</span></a></div>
|
|
200
|
-
<p>One-time hard cutover: convert every legacy canonical <code dir="auto">SPEC.md</code> to a schema-validated sibling <code dir="auto">SPEC.json</code>, then delete the <code dir="auto">SPEC.md</code>. Idempotent — skips already-migrated dirs.</p>
|
|
201
|
-
<p><strong>Exit codes:</strong> 0 / 2</p>
|
|
202
|
-
<div class="sl-heading-wrapper level-h3"><h3 id="spec-req-domain-prefix-platformdir"><code dir="auto">spec req <domain-prefix> [platformDir]</code></h3><a class="sl-anchor-link" href="#spec-req-domain-prefix-platformdir"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “spec req <domain-prefix> [platformDir]”</span></a></div>
|
|
203
|
-
<p><strong>Piped:</strong> prints the next unused requirement ID (e.g. <code dir="auto">BILLING-010</code>) — zero prompts, zero writes. <strong>TTY:</strong> interactive authoring. <strong><code dir="auto">--text</code> (+ <code dir="auto">--why</code> / <code dir="auto">--lives</code> / <code dir="auto">--tests</code> / <code dir="auto">--relates</code>):</strong> appends a born-active entry non-interactively through the validated write seam. <strong><code dir="auto">--draft</code>:</strong> the entry is born Draft instead (promote it with <code dir="auto">spec accept</code>). Prefix is case-insensitive (<code dir="auto">bil</code> → <code dir="auto">BILLING</code>; ambiguous → exit 2). <code dir="auto">spec req <domain></code> alone prints the domain’s charter before authoring.</p>
|
|
204
|
-
<p><strong>Exit codes:</strong> 0 / 2</p>
|
|
205
|
-
<div class="sl-heading-wrapper level-h3"><h3 id="spec-term-"><code dir="auto">spec term …</code></h3><a class="sl-anchor-link" href="#spec-term-"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “spec term …”</span></a></div>
|
|
206
|
-
<p>The glossary authoring surface — a term is a requirement row in the reserved <code dir="auto">TERM</code> domain (definition in the statement, headword in <code dir="auto">term</code>, synonyms in <code dir="auto">aliases</code>):</p>
|
|
81
|
+
<div class="sl-heading-wrapper level-h2"><h2 id="check-a-change-before-it-ships">Check a change before it ships</h2><a class="sl-anchor-link" href="#check-a-change-before-it-ships"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Check a change before it ships”</span></a></div>
|
|
207
82
|
<ul>
|
|
208
|
-
<li><code dir="auto">spec
|
|
209
|
-
<li><code dir="auto">spec
|
|
210
|
-
<li><code dir="auto">spec
|
|
211
|
-
<li><
|
|
83
|
+
<li><a href="/agent-reference/#spec-check"><code dir="auto">spec check</code></a>: integrity, coverage, drift, and governance diagnostics. See <a href="/checks/">Integrity Checks</a>.</li>
|
|
84
|
+
<li><a href="/agent-reference/#spec-guard"><code dir="auto">spec guard</code></a>: the pre-commit gate that blocks a change about to lose a requirement, its last implementation, or its last test.</li>
|
|
85
|
+
<li><a href="/agent-reference/#spec-lint"><code dir="auto">spec lint</code></a>: every statement-rule finding for the platform, a domain, or one requirement.</li>
|
|
86
|
+
<li><a href="/agent-reference/#spec-gate"><code dir="auto">spec gate</code></a>: the approval decision for one member and one requirement.</li>
|
|
87
|
+
</ul>
|
|
88
|
+
<div class="sl-heading-wrapper level-h2"><h2 id="author-and-change-requirements">Author and change requirements</h2><a class="sl-anchor-link" href="#author-and-change-requirements"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Author and change requirements”</span></a></div>
|
|
89
|
+
<ul>
|
|
90
|
+
<li><a href="/agent-reference/#spec-domain"><code dir="auto">spec domain</code></a>: scaffold a domain, list the charters, or set a domain’s statement grammar.</li>
|
|
91
|
+
<li><a href="/agent-reference/#spec-req"><code dir="auto">spec req</code></a>: print the next id, or mint a requirement.</li>
|
|
92
|
+
<li><a href="/agent-reference/#spec-amend"><code dir="auto">spec amend</code></a>, <a href="/agent-reference/#spec-supersede"><code dir="auto">spec supersede</code></a>, <a href="/agent-reference/#spec-move"><code dir="auto">spec move</code></a>, <a href="/agent-reference/#spec-deprecate"><code dir="auto">spec deprecate</code></a>, <a href="/agent-reference/#spec-accept"><code dir="auto">spec accept</code></a>: the requirement lifecycle.</li>
|
|
93
|
+
<li><a href="/agent-reference/#spec-term"><code dir="auto">spec term</code></a> and <a href="/agent-reference/#spec-glossary"><code dir="auto">spec glossary</code></a>: glossary terms and the generated <code dir="auto">GLOSSARY.md</code>.</li>
|
|
94
|
+
</ul>
|
|
95
|
+
<div class="sl-heading-wrapper level-h2"><h2 id="see-coverage-across-a-platform">See coverage across a platform</h2><a class="sl-anchor-link" href="#see-coverage-across-a-platform"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “See coverage across a platform”</span></a></div>
|
|
96
|
+
<ul>
|
|
97
|
+
<li><a href="/agent-reference/#spec-map"><code dir="auto">spec map</code></a>: the requirement by member coverage matrix.</li>
|
|
98
|
+
<li><a href="/agent-reference/#spec-propagation"><code dir="auto">spec propagation</code></a>: which members have moved to a superseded requirement’s successor.</li>
|
|
99
|
+
<li><a href="/agent-reference/#spec-relations"><code dir="auto">spec relations</code></a> and <a href="/agent-reference/#spec-provenance"><code dir="auto">spec provenance</code></a>: related requirements, and the tickets behind each one.</li>
|
|
100
|
+
</ul>
|
|
101
|
+
<div class="sl-heading-wrapper level-h2"><h2 id="set-up-and-serve">Set up and serve</h2><a class="sl-anchor-link" href="#set-up-and-serve"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Set up and serve”</span></a></div>
|
|
102
|
+
<ul>
|
|
103
|
+
<li><a href="/agent-reference/#spec-init"><code dir="auto">spec init</code></a>: declare a member, write its pin, and install the agent surface (the agent reference in <code dir="auto">AGENTS.md</code>, the <code dir="auto">req-author</code> skill, the <code dir="auto">spec</code> MCP entry, and a <code dir="auto">spec guard</code> pre-commit hook). See <a href="/platform-mapping/">Platform Mapping</a>.</li>
|
|
104
|
+
<li><a href="/agent-reference/#spec-index"><code dir="auto">spec index</code></a>: build the derived index; every other command builds it when needed.</li>
|
|
105
|
+
<li><a href="/agent-reference/#spec-migrate"><code dir="auto">spec migrate</code></a>: strip the retired <code dir="auto">livesIn</code> and <code dir="auto">verifiedIn</code> fields from every <code dir="auto">SPEC.json</code>.</li>
|
|
106
|
+
<li><a href="/agent-reference/#spec-serve"><code dir="auto">spec serve</code></a>, <a href="/agent-reference/#spec-mcp"><code dir="auto">spec mcp</code></a>, <a href="/agent-reference/#spec-docs"><code dir="auto">spec docs</code></a>: the local webapp, the MCP server, and this site offline.</li>
|
|
212
107
|
</ul>
|
|
213
|
-
<p><code dir="auto">spec supersede</code> and <code dir="auto">spec amend</code> work on TERM ids exactly as on requirements.</p>
|
|
214
|
-
<p><strong>Exit codes:</strong> 0 / 2</p>
|
|
215
|
-
<div class="sl-heading-wrapper level-h3"><h3 id="spec-glossary-platformdir"><code dir="auto">spec glossary [platformDir]</code></h3><a class="sl-anchor-link" href="#spec-glossary-platformdir"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “spec glossary [platformDir]”</span></a></div>
|
|
216
|
-
<p>The GLOSSARY.md round-trip. Default: <strong>generate</strong> GLOSSARY.md from the TERM store, byte-stable and LLM-free. <code dir="auto">--migrate</code>: one-time parse of an existing GLOSSARY.md into <code dir="auto">TERM-001..N</code> (idempotent-skip). <code dir="auto">--check</code>: regenerate into a buffer and fail (exit 1) if the committed file drifts — a CI fence.</p>
|
|
217
|
-
<p><strong>Exit codes:</strong> 0 / 1 / 2</p>
|
|
218
|
-
<div class="sl-heading-wrapper level-h3"><h3 id="spec-supersede-reqid-platformdir"><code dir="auto">spec supersede <reqId> [platformDir]</code></h3><a class="sl-anchor-link" href="#spec-supersede-reqid-platformdir"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “spec supersede <reqId> [platformDir]”</span></a></div>
|
|
219
|
-
<p>The post-ship lifecycle move, mechanized. Flips the entry to superseded, mints the successor (<code dir="auto">--text</code> required non-TTY; <code dir="auto">--why</code>, <code dir="auto">--lives</code>, <code dir="auto">--tests</code>, <code dir="auto">--relates</code>, cites, aliases, term, and section default to copies of the predecessor’s; issues do not carry over), reindexes, and prints the <strong>retag worklist</strong> — every code site still on the old ID. The target must be Active.</p>
|
|
220
|
-
<p>On a requirement domain the reported <code dir="auto">spec_version</code> is the <strong>derived</strong> domain version after the supersession — no authored counter is written, and <code dir="auto">--no-bump</code> is a no-op (there is no counter to hold back). On the reserved TERM domain the authored <code dir="auto">specVersion</code> still bumps (it is the term-drift pin) and <code dir="auto">--no-bump</code> opts out.</p>
|
|
221
|
-
<p><code dir="auto">--json</code>: <code dir="auto">{ old_id, new_id, file, spec_version, retag: [...] }</code></p>
|
|
222
|
-
<p><strong>Exit codes:</strong> 0 / 2</p>
|
|
223
|
-
<div class="sl-heading-wrapper level-h3"><h3 id="spec-move-reqid-new-domain-platformdir"><code dir="auto">spec move <reqId> <NEW-DOMAIN> [platformDir]</code></h3><a class="sl-anchor-link" href="#spec-move-reqid-new-domain-platformdir"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “spec move <reqId> <NEW-DOMAIN> [platformDir]”</span></a></div>
|
|
224
|
-
<p>Cross-domain supersede for taxonomy reorganization: mints the successor as the next id in <code dir="auto"><NEW-DOMAIN></code> (which must exist), carrying the source’s fields (<code dir="auto">--text</code>/<code dir="auto">--why</code>/<code dir="auto">--lives</code>/<code dir="auto">--tests</code> override), flips the source to superseded with a cross-domain <code dir="auto">supersededBy</code>, and emits the retag worklist. Both envelopes validate before either is written — a reject never half-applies. Only Active requirements move; moving into the source’s own domain is a usage error (use <code dir="auto">supersede</code>).</p>
|
|
225
|
-
<p><strong>Exit codes:</strong> 0 / 2</p>
|
|
226
|
-
<div class="sl-heading-wrapper level-h3"><h3 id="spec-amend-reqid-platformdir"><code dir="auto">spec amend <reqId> [platformDir]</code></h3><a class="sl-anchor-link" href="#spec-amend-reqid-platformdir"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “spec amend <reqId> [platformDir]”</span></a></div>
|
|
227
|
-
<p>Revise a requirement in place — same ID, no version change (the domain version only derives from supersessions). Field flags name what changes (<code dir="auto">--text</code>/<code dir="auto">--why</code>/<code dir="auto">--lives</code>/<code dir="auto">--tests</code>/<code dir="auto">--relates</code>, at least one); untouched fields stay byte-identical. <code dir="auto">--tests</code> sets <code dir="auto">verifiedIn</code>. <code dir="auto">--lives</code>, <code dir="auto">--tests</code>, and <code dir="auto">--relates</code> repeat or comma-separate and replace the whole list; an empty value clears it. Only Active and Draft entries amend. A requirement present in its domain file at the newest <code dir="auto">v*</code> tag merged into HEAD is released: its <code dir="auto">--text</code> and <code dir="auto">--why</code> refuse with exit 2 and name <code dir="auto">spec supersede</code>; <code dir="auto">--lives</code>, <code dir="auto">--tests</code>, and <code dir="auto">--relates</code> still write in place. With no <code dir="auto">v*</code> tag or no git, nothing is released.</p>
|
|
228
|
-
<p><strong>Exit codes:</strong> 0 / 2</p>
|
|
229
|
-
<div class="sl-heading-wrapper level-h3"><h3 id="spec-accept-reqid-platformdir"><code dir="auto">spec accept <reqId> [platformDir]</code></h3><a class="sl-anchor-link" href="#spec-accept-reqid-platformdir"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “spec accept <reqId> [platformDir]”</span></a></div>
|
|
230
|
-
<p>Promote a Draft requirement to Active — same ID, every other field untouched, no version change. A Draft is never an orphan, never unverified, and never counted in coverage; accepting it makes it an obligation.</p>
|
|
231
|
-
<p><strong>Exit codes:</strong> 0 / 2</p>
|
|
232
|
-
<div class="sl-heading-wrapper level-h3"><h3 id="spec-serve-platformdir---port-n---host-ip---token-t---allow-writes"><code dir="auto">spec serve [platformDir] [--port N] [--host IP] [--token T] [--allow-writes]</code></h3><a class="sl-anchor-link" href="#spec-serve-platformdir---port-n---host-ip---token-t---allow-writes"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “spec serve [platformDir] [--port N] [--host IP] [--token T] [--allow-writes]”</span></a></div>
|
|
233
|
-
<p>Launch the local webapp over the derived index on <code dir="auto">127.0.0.1</code>, or on a private <code dir="auto">--host</code> address that requires the printed token and is read-only unless <code dir="auto">--allow-writes</code>. <code dir="auto">--probe</code> smoke-tests and exits.</p>
|
|
234
|
-
<p><strong>API routes (always on):</strong> <code dir="auto">/api/coverage</code>, <code dir="auto">/api/report</code> (per-domain rollup over Active reqs), <code dir="auto">/api/repos</code>, <code dir="auto">/api/platform</code> (the derived platform version), <code dir="auto">/api/requirements[/:id]</code>, <code dir="auto">/api/propagation/:id</code>, <code dir="auto">/api/resolve?files=...</code></p>
|
|
235
|
-
<p><strong>Feature-flagged routes:</strong> <code dir="auto">/api/query?q=&limit=</code>, <code dir="auto">/api/relations[?format=mermaid]</code>, <code dir="auto">/api/provenance</code>, and the editor’s write routes answer <strong>404</strong> until their feature is enabled — the unshipped webapp features (query, relations, provenance, editor, glossary, logs) all default off. Opt in locally with a comma-separated <code dir="auto">SPEC_FLAGS</code> env var: <code dir="auto">SPEC_FLAGS=query,relations spec serve .</code> (unknown keys are ignored).</p>
|
|
236
|
-
<p><strong>Exit codes:</strong> 0 / 1 / 2</p>
|
|
237
|
-
<div class="sl-heading-wrapper level-h3"><h3 id="spec-mcp-platformdir"><code dir="auto">spec mcp [platformDir]</code></h3><a class="sl-anchor-link" href="#spec-mcp-platformdir"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “spec mcp [platformDir]”</span></a></div>
|
|
238
|
-
<p>Serve Spec Engine as a Model Context Protocol server over stdio. Tools: <code dir="auto">spec_query</code>, <code dir="auto">spec_resolve</code>, <code dir="auto">spec_req_tags</code>, <code dir="auto">spec_coverage_report</code>, <code dir="auto">spec_check</code>, <code dir="auto">spec_propagation</code>, <code dir="auto">spec_next_id</code>, <code dir="auto">spec_get</code>, <code dir="auto">spec_list</code>, <code dir="auto">spec_req</code>, <code dir="auto">spec_amend</code>, <code dir="auto">spec_supersede</code>, <code dir="auto">spec_move</code>, <code dir="auto">spec_deprecate</code>, <code dir="auto">spec_accept</code> — the same JSON the CLI’s <code dir="auto">--json</code> modes emit, reindexed fresh per call. Also advertises the <code dir="auto">author_requirements</code> prompt (a static authoring playbook; the engine itself runs no model).</p>
|
|
239
|
-
<p><strong>Exit codes:</strong> 0 / 2</p>
|
|
240
108
|
</div><footer class="sl-flex astro-yaxnhex4"><div class="meta sl-flex astro-yaxnhex4"><a href="https://github.com/spec-engine/spec-engine/edit/main/packages/site/src/content/docs/commands.md" class="sl-flex print:hidden astro-uulcuzsf"><svg aria-hidden="true" class="astro-uulcuzsf astro-ica5m7eu" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.2em;"><path d="M22 7.24a1 1 0 0 0-.29-.71l-4.24-4.24a1 1 0 0 0-1.1-.22 1 1 0 0 0-.32.22l-2.83 2.83L2.29 16.05a1 1 0 0 0-.29.71V21a1 1 0 0 0 1 1h4.24a1 1 0 0 0 .76-.29l10.87-10.93L21.71 8c.1-.1.17-.2.22-.33a1 1 0 0 0 0-.24v-.14l.07-.05ZM6.83 20H4v-2.83l9.93-9.93 2.83 2.83L6.83 20ZM18.17 8.66l-2.83-2.83 1.42-1.41 2.82 2.82-1.41 1.42Z"/></svg>Edit page</a></div><div class="pagination-links print:hidden astro-kestnrba" dir="ltr"><a href="/platform-mapping/" rel="prev" class="astro-kestnrba"><svg aria-hidden="true" class="astro-kestnrba astro-ica5m7eu" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.5rem;"><path d="M17 11H9.41l3.3-3.29a1.004 1.004 0 1 0-1.42-1.42l-5 5a1 1 0 0 0-.21.33 1 1 0 0 0 0 .76 1 1 0 0 0 .21.33l5 5a1.002 1.002 0 0 0 1.639-.325 1 1 0 0 0-.219-1.095L9.41 13H17a1 1 0 0 0 0-2Z"/></svg><span class="astro-kestnrba">Previous<br class="astro-kestnrba"><span class="link-title astro-kestnrba">Platform Mapping</span></span></a><a href="/format/" rel="next" class="astro-kestnrba"><svg aria-hidden="true" class="astro-kestnrba astro-ica5m7eu" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.5rem;"><path d="M17.92 11.62a1.001 1.001 0 0 0-.21-.33l-5-5a1.003 1.003 0 1 0-1.42 1.42l3.3 3.29H7a1 1 0 0 0 0 2h7.59l-3.3 3.29a1.002 1.002 0 0 0 .325 1.639 1 1 0 0 0 1.095-.219l5-5a1 1 0 0 0 .21-.33 1 1 0 0 0 0-.76Z"/></svg><span class="astro-kestnrba">Next<br class="astro-kestnrba"><span class="link-title astro-kestnrba">SPEC.json Format</span></span></a></div></footer></div></div></main></div></div></div></div></body></html>
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
</script></sl-sidebar-state-persist><div class="md:sl-hidden"><div class="mobile-preferences sl-flex astro-hclhd3l6"><div class="social-icons astro-hclhd3l6"><a href="https://github.com/spec-engine/spec-engine" rel="me" class="sl-flex astro-n6yxnlqb"><span class="sr-only astro-n6yxnlqb">GitHub</span><svg aria-hidden="true" class="astro-n6yxnlqb astro-ica5m7eu" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M12 .3a12 12 0 0 0-3.8 23.38c.6.12.83-.26.83-.57L9 21.07c-3.34.72-4.04-1.61-4.04-1.61-.55-1.39-1.34-1.76-1.34-1.76-1.08-.74.09-.73.09-.73 1.2.09 1.83 1.24 1.83 1.24 1.08 1.83 2.81 1.3 3.5 1 .1-.78.42-1.31.76-1.61-2.67-.3-5.47-1.33-5.47-5.93 0-1.31.47-2.38 1.24-3.22-.14-.3-.54-1.52.1-3.18 0 0 1-.32 3.3 1.23a11.5 11.5 0 0 1 6 0c2.28-1.55 3.29-1.23 3.29-1.23.64 1.66.24 2.88.12 3.18a4.65 4.65 0 0 1 1.23 3.22c0 4.61-2.8 5.63-5.48 5.92.42.36.81 1.1.81 2.22l-.01 3.29c0 .31.2.69.82.57A12 12 0 0 0 12 .3Z"/></svg></a></div><starlight-theme-select><label style="--sl-select-width: 6.25em" class="astro-bqlrlpix"><span class="sr-only astro-bqlrlpix">Select theme</span><svg aria-hidden="true" class="icon label-icon astro-bqlrlpix astro-ica5m7eu" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21 14h-1V7a3 3 0 0 0-3-3H7a3 3 0 0 0-3 3v7H3a1 1 0 0 0-1 1v2a3 3 0 0 0 3 3h14a3 3 0 0 0 3-3v-2a1 1 0 0 0-1-1ZM6 7a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v7H6V7Zm14 10a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-1h16v1Z"/></svg><select autocomplete="off" class="astro-bqlrlpix"><option value="dark" class="astro-bqlrlpix">Dark</option><option value="light" class="astro-bqlrlpix">Light</option><option value="auto" selected class="astro-bqlrlpix">Auto</option></select><svg aria-hidden="true" class="icon caret astro-bqlrlpix astro-ica5m7eu" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M17 9.17a1 1 0 0 0-1.41 0L12 12.71 8.46 9.17a1 1 0 1 0-1.41 1.42l4.24 4.24a1.002 1.002 0 0 0 1.42 0L17 10.59a1.002 1.002 0 0 0 0-1.42Z"/></svg></label></starlight-theme-select><script>
|
|
72
72
|
StarlightThemeProvider.updatePickers();
|
|
73
73
|
</script></div></div></div></div></nav><div class="main-frame astro-qobrlvtk"><script type="module">var e=document.getElementById(`starlight__sidebar`),t=e?.querySelector(`sl-sidebar-state-persist`),n=`sl-sidebar-state`,r=()=>{let r=[],i=t?.dataset.hash||``;try{let e=sessionStorage.getItem(n),t=JSON.parse(e||`{}`);Array.isArray(t.open)&&t.hash===i&&(r=t.open)}catch{}return{hash:i,open:r,scroll:e?.scrollTop||0}},i=e=>{try{sessionStorage.setItem(n,JSON.stringify(e))}catch{}},a=()=>i(r()),o=(e,t)=>{let n=r();n.open[t]=e,i(n)};t?.addEventListener(`click`,e=>{if(!(e.target instanceof Element))return;let t=e.target.closest(`summary`)?.closest(`details`);if(!t)return;let n=t.querySelector(`sl-sidebar-restore`),r=parseInt(n?.dataset.index||``);isNaN(r)||o(!t.open,r)}),addEventListener(`visibilitychange`,()=>{document.visibilityState===`hidden`&&a()}),addEventListener(`pageHide`,a);</script><div class="lg:sl-flex astro-iv7ihhtf"><aside class="right-sidebar-container print:hidden astro-iv7ihhtf"><div class="right-sidebar astro-iv7ihhtf"><div class="lg:sl-hidden astro-dfaa6j3s"><mobile-starlight-toc data-min-h="2" data-max-h="3" class="astro-hhhdejk6"><nav aria-labelledby="starlight__on-this-page--mobile" class="astro-hhhdejk6"><details id="starlight__mobile-toc" class="astro-hhhdejk6"><summary id="starlight__on-this-page--mobile" class="sl-flex astro-hhhdejk6"><span class="toggle sl-flex astro-hhhdejk6">On this page<svg aria-hidden="true" class="caret astro-hhhdejk6 astro-ica5m7eu" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1rem;"><path d="m14.83 11.29-4.24-4.24a1 1 0 1 0-1.42 1.41L12.71 12l-3.54 3.54a1 1 0 0 0 0 1.41 1 1 0 0 0 .71.29 1 1 0 0 0 .71-.29l4.24-4.24a1.002 1.002 0 0 0 0-1.42Z"/></svg></span><span class="display-current astro-hhhdejk6"></span></summary><div class="dropdown astro-hhhdejk6"><ul class="isMobile astro-l6rvz6dz" style="--depth: 0;"><li style="--depth: 0;" class="astro-l6rvz6dz"><a href="#_top" style="--depth: 0;" class="astro-l6rvz6dz"><span style="--depth: 0;" class="astro-l6rvz6dz">Overview</span></a></li><li style="--depth: 0;" class="astro-l6rvz6dz"><a href="#the-envelope" style="--depth: 0;" class="astro-l6rvz6dz"><span style="--depth: 0;" class="astro-l6rvz6dz">The envelope</span></a></li><li style="--depth: 0;" class="astro-l6rvz6dz"><a href="#requirement-fields" style="--depth: 0;" class="astro-l6rvz6dz"><span style="--depth: 0;" class="astro-l6rvz6dz">Requirement fields</span></a></li><li style="--depth: 0;" class="astro-l6rvz6dz"><a href="#status-lifecycle" style="--depth: 0;" class="astro-l6rvz6dz"><span style="--depth: 0;" class="astro-l6rvz6dz">Status lifecycle</span></a></li><li style="--depth: 0;" class="astro-l6rvz6dz"><a href="#provenance-issues" style="--depth: 0;" class="astro-l6rvz6dz"><span style="--depth: 0;" class="astro-l6rvz6dz">Provenance (issues)</span></a></li><li style="--depth: 0;" class="astro-l6rvz6dz"><a href="#amend-vs-supersede" style="--depth: 0;" class="astro-l6rvz6dz"><span style="--depth: 0;" class="astro-l6rvz6dz">Amend vs supersede</span></a></li></ul></div></details></nav></mobile-starlight-toc><script type="module" src="/_astro/MobileTableOfContents.astro_astro_type_script_index_0_lang.BcSo_yiZ.js"></script></div><div class="right-sidebar-panel sl-hidden lg:sl-block astro-dfaa6j3s"><div class="sl-container astro-dfaa6j3s"><starlight-toc data-min-h="2" data-max-h="3"><nav aria-labelledby="starlight__on-this-page"><h2 id="starlight__on-this-page">On this page</h2><ul class="astro-l6rvz6dz" style="--depth: 0;"><li style="--depth: 0;" class="astro-l6rvz6dz"><a href="#_top" style="--depth: 0;" class="astro-l6rvz6dz"><span style="--depth: 0;" class="astro-l6rvz6dz">Overview</span></a></li><li style="--depth: 0;" class="astro-l6rvz6dz"><a href="#the-envelope" style="--depth: 0;" class="astro-l6rvz6dz"><span style="--depth: 0;" class="astro-l6rvz6dz">The envelope</span></a></li><li style="--depth: 0;" class="astro-l6rvz6dz"><a href="#requirement-fields" style="--depth: 0;" class="astro-l6rvz6dz"><span style="--depth: 0;" class="astro-l6rvz6dz">Requirement fields</span></a></li><li style="--depth: 0;" class="astro-l6rvz6dz"><a href="#status-lifecycle" style="--depth: 0;" class="astro-l6rvz6dz"><span style="--depth: 0;" class="astro-l6rvz6dz">Status lifecycle</span></a></li><li style="--depth: 0;" class="astro-l6rvz6dz"><a href="#provenance-issues" style="--depth: 0;" class="astro-l6rvz6dz"><span style="--depth: 0;" class="astro-l6rvz6dz">Provenance (issues)</span></a></li><li style="--depth: 0;" class="astro-l6rvz6dz"><a href="#amend-vs-supersede" style="--depth: 0;" class="astro-l6rvz6dz"><span style="--depth: 0;" class="astro-l6rvz6dz">Amend vs supersede</span></a></li></ul></nav></starlight-toc><script type="module" src="/_astro/TableOfContents.astro_astro_type_script_index_0_lang.Csloo1VZ.js"></script></div></div></div></aside><div class="main-pane astro-iv7ihhtf"><main data-pagefind-body class="astro-kmpt7d6z" lang="en" dir="ltr"><div class="content-panel astro-d3w5v5qg"><div class="sl-container astro-d3w5v5qg"><h1 id="_top" class="astro-elp5pbgd">SPEC.json Format</h1></div></div><div class="content-panel astro-d3w5v5qg"><div class="sl-container astro-d3w5v5qg"><div class="sl-markdown-content"><p>One JSON <strong>domain envelope</strong> per domain, at <code dir="auto">spec-engine/<KEY>/SPEC.json</code>. Human-readable, machine-validated — every read and write surface (CLI, webapp, MCP) validates it through the same shared schema. Prefer authoring through the CLI (<code dir="auto">spec domain new</code>, <code dir="auto">spec req</code>, <code dir="auto">spec supersede</code>, …), which writes through a single validated seam; hand-edits are legal but validated on the next index.</p>
|
|
74
|
-
<div class="expressive-code"><link rel="stylesheet" href="/_astro/ec.v4551.css"><script type="module" src="/_astro/ec.0vx5m.js"></script><figure class="frame not-content"><figcaption class="header"></figcaption><pre data-language="json"><code><div class="ec-line"><div class="code"><span style="--0:#D6DEEB;--1:#403F53">{</span></div></div><div class="ec-line"><div class="code"><span class="indent"> </span><span style="--0:#7FDBCA;--1:#096E72">"key"</span><span style="--0:#D6DEEB;--1:#403F53">: </span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#C789D6;--1:#7C5686">BILLING</span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#D6DEEB;--1:#403F53">,</span></div></div><div class="ec-line"><div class="code"><span class="indent"> </span><span style="--0:#7FDBCA;--1:#096E72">"owner"</span><span style="--0:#D6DEEB;--1:#403F53">: </span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#C789D6;--1:#7C5686">drea</span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#D6DEEB;--1:#403F53">,</span></div></div><div class="ec-line"><div class="code"><span class="indent"> </span><span style="--0:#7FDBCA;--1:#096E72">"updated"</span><span style="--0:#D6DEEB;--1:#403F53">: </span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#C789D6;--1:#7C5686">2026-06-02</span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#D6DEEB;--1:#403F53">,</span></div></div><div class="ec-line"><div class="code"><span class="indent"> </span><span style="--0:#7FDBCA;--1:#096E72">"scope"</span><span style="--0:#D6DEEB;--1:#403F53">: </span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#C789D6;--1:#7C5686">Charging, renewal, refunds. Does not belong here: tax rules (TAX).</span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#D6DEEB;--1:#403F53">,</span></div></div><div class="ec-line"><div class="code"><span class="indent"> </span><span style="--0:#7FDBCA;--1:#096E72">"requirements"</span><span style="--0:#D6DEEB;--1:#403F53">: [</span></div></div><div class="ec-line"><div class="code"><span class="indent"><span style="--0:#D6DEEB;--1:#403F53"> </span></span><span style="--0:#D6DEEB;--1:#403F53">{</span></div></div><div class="ec-line"><div class="code"><span class="indent"> </span><span style="--0:#7FDBCA;--1:#096E72">"id"</span><span style="--0:#D6DEEB;--1:#403F53">: </span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#C789D6;--1:#7C5686">BILLING-009</span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#D6DEEB;--1:#403F53">,</span></div></div><div class="ec-line"><div class="code"><span class="indent"> </span><span style="--0:#7FDBCA;--1:#096E72">"status"</span><span style="--0:#D6DEEB;--1:#403F53">: </span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#C789D6;--1:#7C5686">active</span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#D6DEEB;--1:#403F53">,</span></div></div><div class="ec-line"><div class="code"><span class="indent"> </span><span style="--0:#7FDBCA;--1:#096E72">"statement"</span><span style="--0:#D6DEEB;--1:#403F53">: </span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#C789D6;--1:#7C5686">When a subscription renews, charge the saved payment method at the current plan price.</span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#D6DEEB;--1:#403F53">,</span></div></div><div class="ec-line"><div class="code"><span class="indent"> </span><span style="--0:#7FDBCA;--1:#096E72">"why"</span><span style="--0:#D6DEEB;--1:#403F53">: </span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#C789D6;--1:#7C5686">Revenue path. Silent failure loses money with no visible error.</span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#D6DEEB;--1:#403F53">,</span></div></div><div class="ec-line"><div class="code"><span class="indent"> </span><span style="--0:#7FDBCA;--1:#096E72">"issues"</span><span style="--0:#D6DEEB;--1:#403F53">: [{ </span><span style="--0:#7FDBCA;--1:#096E72">"role"</span><span style="--0:#D6DEEB;--1:#403F53">: </span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#C789D6;--1:#7C5686">created</span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#D6DEEB;--1:#403F53">, </span><span style="--0:#7FDBCA;--1:#096E72">"id"</span><span style="--0:#D6DEEB;--1:#403F53">: </span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#C789D6;--1:#7C5686">ENG-1432</span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#D6DEEB;--1:#403F53"> }],</span></div></div><div class="ec-line"><div class="code"><span class="indent"> </span><span style="--0:#7FDBCA;--1:#096E72">"relates"</span><span style="--0:#D6DEEB;--1:#403F53">: [</span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#C789D6;--1:#7C5686">BILLING-002</span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#D6DEEB;--1:#403F53">, </span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#C789D6;--1:#7C5686">BILLING-007</span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#D6DEEB;--1:#403F53">]
|
|
74
|
+
<div class="expressive-code"><link rel="stylesheet" href="/_astro/ec.v4551.css"><script type="module" src="/_astro/ec.0vx5m.js"></script><figure class="frame not-content"><figcaption class="header"></figcaption><pre data-language="json"><code><div class="ec-line"><div class="code"><span style="--0:#D6DEEB;--1:#403F53">{</span></div></div><div class="ec-line"><div class="code"><span class="indent"> </span><span style="--0:#7FDBCA;--1:#096E72">"key"</span><span style="--0:#D6DEEB;--1:#403F53">: </span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#C789D6;--1:#7C5686">BILLING</span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#D6DEEB;--1:#403F53">,</span></div></div><div class="ec-line"><div class="code"><span class="indent"> </span><span style="--0:#7FDBCA;--1:#096E72">"owner"</span><span style="--0:#D6DEEB;--1:#403F53">: </span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#C789D6;--1:#7C5686">drea</span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#D6DEEB;--1:#403F53">,</span></div></div><div class="ec-line"><div class="code"><span class="indent"> </span><span style="--0:#7FDBCA;--1:#096E72">"updated"</span><span style="--0:#D6DEEB;--1:#403F53">: </span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#C789D6;--1:#7C5686">2026-06-02</span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#D6DEEB;--1:#403F53">,</span></div></div><div class="ec-line"><div class="code"><span class="indent"> </span><span style="--0:#7FDBCA;--1:#096E72">"scope"</span><span style="--0:#D6DEEB;--1:#403F53">: </span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#C789D6;--1:#7C5686">Charging, renewal, refunds. Does not belong here: tax rules (TAX).</span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#D6DEEB;--1:#403F53">,</span></div></div><div class="ec-line"><div class="code"><span class="indent"> </span><span style="--0:#7FDBCA;--1:#096E72">"requirements"</span><span style="--0:#D6DEEB;--1:#403F53">: [</span></div></div><div class="ec-line"><div class="code"><span class="indent"><span style="--0:#D6DEEB;--1:#403F53"> </span></span><span style="--0:#D6DEEB;--1:#403F53">{</span></div></div><div class="ec-line"><div class="code"><span class="indent"> </span><span style="--0:#7FDBCA;--1:#096E72">"id"</span><span style="--0:#D6DEEB;--1:#403F53">: </span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#C789D6;--1:#7C5686">BILLING-009</span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#D6DEEB;--1:#403F53">,</span></div></div><div class="ec-line"><div class="code"><span class="indent"> </span><span style="--0:#7FDBCA;--1:#096E72">"status"</span><span style="--0:#D6DEEB;--1:#403F53">: </span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#C789D6;--1:#7C5686">active</span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#D6DEEB;--1:#403F53">,</span></div></div><div class="ec-line"><div class="code"><span class="indent"> </span><span style="--0:#7FDBCA;--1:#096E72">"statement"</span><span style="--0:#D6DEEB;--1:#403F53">: </span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#C789D6;--1:#7C5686">When a subscription renews, charge the saved payment method at the current plan price.</span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#D6DEEB;--1:#403F53">,</span></div></div><div class="ec-line"><div class="code"><span class="indent"> </span><span style="--0:#7FDBCA;--1:#096E72">"why"</span><span style="--0:#D6DEEB;--1:#403F53">: </span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#C789D6;--1:#7C5686">Revenue path. Silent failure loses money with no visible error.</span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#D6DEEB;--1:#403F53">,</span></div></div><div class="ec-line"><div class="code"><span class="indent"> </span><span style="--0:#7FDBCA;--1:#096E72">"issues"</span><span style="--0:#D6DEEB;--1:#403F53">: [{ </span><span style="--0:#7FDBCA;--1:#096E72">"role"</span><span style="--0:#D6DEEB;--1:#403F53">: </span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#C789D6;--1:#7C5686">created</span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#D6DEEB;--1:#403F53">, </span><span style="--0:#7FDBCA;--1:#096E72">"id"</span><span style="--0:#D6DEEB;--1:#403F53">: </span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#C789D6;--1:#7C5686">ENG-1432</span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#D6DEEB;--1:#403F53"> }],</span></div></div><div class="ec-line"><div class="code"><span class="indent"> </span><span style="--0:#7FDBCA;--1:#096E72">"relates"</span><span style="--0:#D6DEEB;--1:#403F53">: [</span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#C789D6;--1:#7C5686">BILLING-002</span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#D6DEEB;--1:#403F53">, </span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#C789D6;--1:#7C5686">BILLING-007</span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#D6DEEB;--1:#403F53">]</span></div></div><div class="ec-line"><div class="code"><span class="indent"><span style="--0:#D6DEEB;--1:#403F53"> </span></span><span style="--0:#D6DEEB;--1:#403F53">}</span></div></div><div class="ec-line"><div class="code"><span class="indent"><span style="--0:#D6DEEB;--1:#403F53"> </span></span><span style="--0:#D6DEEB;--1:#403F53">]</span></div></div><div class="ec-line"><div class="code"><span style="--0:#D6DEEB;--1:#403F53">}</span></div></div></code></pre><div class="copy"><div aria-live="polite"></div><button title="Copy to clipboard" data-copied="Copied!" data-code="{ "key": "BILLING", "owner": "drea", "updated": "2026-06-02", "scope": "Charging, renewal, refunds. Does not belong here: tax rules (TAX).", "requirements": [ { "id": "BILLING-009", "status": "active", "statement": "When a subscription renews, charge the saved payment method at the current plan price.", "why": "Revenue path. Silent failure loses money with no visible error.", "issues": [{ "role": "created", "id": "ENG-1432" }], "relates": ["BILLING-002", "BILLING-007"] } ]}"><div></div></button></div></figure></div>
|
|
75
75
|
<div class="sl-heading-wrapper level-h2"><h2 id="the-envelope">The envelope</h2><a class="sl-anchor-link" href="#the-envelope"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “The envelope”</span></a></div>
|
|
76
76
|
<table>
|
|
77
77
|
<thead>
|
|
@@ -142,19 +142,12 @@
|
|
|
142
142
|
<td>Advisory links to other requirement ids (rendered by <code dir="auto">spec relations</code>)</td>
|
|
143
143
|
</tr>
|
|
144
144
|
<tr>
|
|
145
|
-
<td><code dir="auto">livesIn</code></td>
|
|
146
|
-
<td>Where the requirement is <em>enforced</em> — <code dir="auto">@<path></code> refs. Metadata, not identity</td>
|
|
147
|
-
</tr>
|
|
148
|
-
<tr>
|
|
149
|
-
<td><code dir="auto">verifiedIn</code></td>
|
|
150
|
-
<td>The test files that verify the requirement — platform-relative paths. Optional, defaults to empty. Metadata, not identity</td>
|
|
151
|
-
</tr>
|
|
152
|
-
<tr>
|
|
153
145
|
<td><code dir="auto">issues</code></td>
|
|
154
146
|
<td>Optional provenance — see below</td>
|
|
155
147
|
</tr>
|
|
156
148
|
</tbody>
|
|
157
149
|
</table>
|
|
150
|
+
<p>No field says where a requirement is implemented or verified: the <code dir="auto">@spec</code> tags in code are the only record, and <code dir="auto">spec get</code> lists them. A file that still carries the retired <code dir="auto">livesIn</code> or <code dir="auto">verifiedIn</code> fields is read with them ignored; <code dir="auto">spec migrate</code> strips them.</p>
|
|
158
151
|
<p>Glossary <code dir="auto">TERM</code> entries reuse the same shape plus <code dir="auto">term</code> (the headword), <code dir="auto">aliases</code>, <code dir="auto">cites</code> (pinned term citations), and <code dir="auto">section</code> (the GLOSSARY.md heading).</p>
|
|
159
152
|
<div class="sl-heading-wrapper level-h2"><h2 id="status-lifecycle">Status lifecycle</h2><a class="sl-anchor-link" href="#status-lifecycle"><span aria-hidden="true" class="sl-anchor-icon"><svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentcolor" d="m12.11 15.39-3.88 3.88a2.52 2.52 0 0 1-3.5 0 2.47 2.47 0 0 1 0-3.5l3.88-3.88a1 1 0 0 0-1.42-1.42l-3.88 3.89a4.48 4.48 0 0 0 6.33 6.33l3.89-3.88a1 1 0 1 0-1.42-1.42Zm8.58-12.08a4.49 4.49 0 0 0-6.33 0l-3.89 3.88a1 1 0 0 0 1.42 1.42l3.88-3.88a2.52 2.52 0 0 1 3.5 0 2.47 2.47 0 0 1 0 3.5l-3.88 3.88a1 1 0 1 0 1.42 1.42l3.88-3.89a4.49 4.49 0 0 0 0-6.33ZM8.83 15.17a1 1 0 0 0 1.1.22 1 1 0 0 0 .32-.22l4.92-4.92a1 1 0 0 0-1.42-1.42l-4.92 4.92a1 1 0 0 0 0 1.42Z"></path></svg></span><span class="sr-only" data-pagefind-ignore>Section titled “Status lifecycle”</span></a></div>
|
|
160
153
|
<ul>
|