@spec-engine/spec-engine 0.1.0 → 0.2.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.
Files changed (44) hide show
  1. package/dist/docs/404.html +4 -4
  2. package/dist/docs/_astro/{Code.DfIJP77p.css → Code.CAimF0uL.css} +1 -1
  3. package/dist/docs/_astro/{common.xlUlWolS.css → common.DslAiFsT.css} +1 -1
  4. package/dist/docs/agent-reference/index.html +9 -9
  5. package/dist/docs/architecture/index.html +8 -8
  6. package/dist/docs/checks/index.html +10 -10
  7. package/dist/docs/commands/index.html +11 -10
  8. package/dist/docs/format/index.html +10 -10
  9. package/dist/docs/getting-started/index.html +35 -18
  10. package/dist/docs/guides/adoption/index.html +9 -9
  11. package/dist/docs/guides/platform-setup/index.html +9 -8
  12. package/dist/docs/guides/single-repo/index.html +9 -8
  13. package/dist/docs/index.html +2 -2
  14. package/dist/docs/overview/index.html +31 -43
  15. package/dist/docs/pagefind/fragment/en_2d1adec.pf_fragment +0 -0
  16. package/dist/docs/pagefind/fragment/en_3b7d939.pf_fragment +0 -0
  17. package/dist/docs/pagefind/fragment/en_435dca1.pf_fragment +0 -0
  18. package/dist/docs/pagefind/fragment/en_4bdd17f.pf_fragment +0 -0
  19. package/dist/docs/pagefind/fragment/en_523ebff.pf_fragment +0 -0
  20. package/dist/docs/pagefind/fragment/en_649983a.pf_fragment +0 -0
  21. package/dist/docs/pagefind/fragment/en_6c144c1.pf_fragment +0 -0
  22. package/dist/docs/pagefind/fragment/en_8d65739.pf_fragment +0 -0
  23. package/dist/docs/pagefind/fragment/en_8ef15c5.pf_fragment +0 -0
  24. package/dist/docs/pagefind/fragment/en_93176f1.pf_fragment +0 -0
  25. package/dist/docs/pagefind/index/en_d1196c8.pf_index +0 -0
  26. package/dist/docs/pagefind/pagefind-entry.json +1 -1
  27. package/dist/docs/pagefind/pagefind.en_f3d65f37ce.pf_meta +0 -0
  28. package/dist/docs/pagefind/wasm.en.pagefind +0 -0
  29. package/dist/docs/pagefind/wasm.unknown.pagefind +0 -0
  30. package/dist/docs/tags/index.html +8 -8
  31. package/dist/impl.js +1201 -638
  32. package/package.json +5 -1
  33. package/dist/docs/pagefind/fragment/en_3f97d08.pf_fragment +0 -0
  34. package/dist/docs/pagefind/fragment/en_51433aa.pf_fragment +0 -0
  35. package/dist/docs/pagefind/fragment/en_629887a.pf_fragment +0 -0
  36. package/dist/docs/pagefind/fragment/en_6339f38.pf_fragment +0 -0
  37. package/dist/docs/pagefind/fragment/en_74b2c3a.pf_fragment +0 -0
  38. package/dist/docs/pagefind/fragment/en_a4de4f3.pf_fragment +0 -0
  39. package/dist/docs/pagefind/fragment/en_ae342c4.pf_fragment +0 -0
  40. package/dist/docs/pagefind/fragment/en_b571467.pf_fragment +0 -0
  41. package/dist/docs/pagefind/fragment/en_cc9f632.pf_fragment +0 -0
  42. package/dist/docs/pagefind/fragment/en_dc8d1bd.pf_fragment +0 -0
  43. package/dist/docs/pagefind/index/en_4f59892.pf_index +0 -0
  44. package/dist/docs/pagefind/pagefind.en_c8da4a195d.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-hke2hksx"> <head><meta charset="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><title>Overview | Spec Engine</title><link rel="canonical" href="https://docs.spec-engine.dev/overview/"/><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&amp;family=IBM+Plex+Mono:wght@400;500;600&amp;family=IBM+Plex+Sans:wght@400;500;600&amp;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 v6.4.8"/><meta name="generator" content="Starlight v0.40.0"/><meta property="og:title" content="Overview"/><meta property="og:type" content="article"/><meta property="og:url" content="https://docs.spec-engine.dev/overview/"/><meta property="og:locale" content="en"/><meta property="og:description" content="What Spec Engine is and why it exists"/><meta property="og:site_name" content="Spec Engine"/><meta name="twitter:card" content="summary_large_image"/><meta name="description" content="What Spec Engine is and why it exists"/><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>
1
+ <!DOCTYPE html><html lang="en" dir="ltr" data-theme="dark" data-has-toc data-has-sidebar class="astro-ioexmpvj"> <head><meta charset="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><title>Overview | Spec Engine</title><link rel="canonical" href="https://docs.spec-engine.dev/overview/"/><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&amp;family=IBM+Plex+Mono:wght@400;500;600&amp;family=IBM+Plex+Sans:wght@400;500;600&amp;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 v6.4.8"/><meta name="generator" content="Starlight v0.40.0"/><meta property="og:title" content="Overview"/><meta property="og:type" content="article"/><meta property="og:url" content="https://docs.spec-engine.dev/overview/"/><meta property="og:locale" content="en"/><meta property="og:description" content="What Spec Engine is and why it exists"/><meta property="og:site_name" content="Spec Engine"/><meta name="twitter:card" content="summary_large_image"/><meta name="description" content="What Spec Engine is and why it exists"/><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');
@@ -24,7 +24,7 @@
24
24
  },
25
25
  };
26
26
  })();
27
- </script><template id="theme-icons"><svg aria-hidden="true" class="light astro-kyfdspn7" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M5 12a1 1 0 0 0-1-1H3a1 1 0 0 0 0 2h1a1 1 0 0 0 1-1Zm.64 5-.71.71a1 1 0 0 0 0 1.41 1 1 0 0 0 1.41 0l.71-.71A1 1 0 0 0 5.64 17ZM12 5a1 1 0 0 0 1-1V3a1 1 0 0 0-2 0v1a1 1 0 0 0 1 1Zm5.66 2.34a1 1 0 0 0 .7-.29l.71-.71a1 1 0 1 0-1.41-1.41l-.66.71a1 1 0 0 0 0 1.41 1 1 0 0 0 .66.29Zm-12-.29a1 1 0 0 0 1.41 0 1 1 0 0 0 0-1.41l-.71-.71a1.004 1.004 0 1 0-1.43 1.41l.73.71ZM21 11h-1a1 1 0 0 0 0 2h1a1 1 0 0 0 0-2Zm-2.64 6A1 1 0 0 0 17 18.36l.71.71a1 1 0 0 0 1.41 0 1 1 0 0 0 0-1.41l-.76-.66ZM12 6.5a5.5 5.5 0 1 0 5.5 5.5A5.51 5.51 0 0 0 12 6.5Zm0 9a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7Zm0 3.5a1 1 0 0 0-1 1v1a1 1 0 0 0 2 0v-1a1 1 0 0 0-1-1Z"/></svg><svg aria-hidden="true" class="dark astro-kyfdspn7" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21.64 13a1 1 0 0 0-1.05-.14 8.049 8.049 0 0 1-3.37.73 8.15 8.15 0 0 1-8.14-8.1 8.59 8.59 0 0 1 .25-2A1 1 0 0 0 8 2.36a10.14 10.14 0 1 0 14 11.69 1 1 0 0 0-.36-1.05Zm-9.5 6.69A8.14 8.14 0 0 1 7.08 5.22v.27a10.15 10.15 0 0 0 10.14 10.14 9.784 9.784 0 0 0 2.1-.22 8.11 8.11 0 0 1-7.18 4.32v-.04Z"/></svg><svg aria-hidden="true" class="auto astro-kyfdspn7" 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></template><link rel="stylesheet" href="/_astro/print.DNXP8c50.css" media="print"><link rel="stylesheet" href="/_astro/common.xlUlWolS.css"><link rel="stylesheet" href="/_astro/Code.DfIJP77p.css"><script type="module" src="/_astro/page.B_tncCx8.js"></script></head> <body class="astro-hke2hksx"> <a href="#_top" class="astro-ln4bs55d">Skip to content</a> <div class="page sl-flex astro-4azfgxa5"> <header class="header astro-4azfgxa5"><div class="header astro-huokaw3t"> <div class="title-wrapper sl-flex astro-huokaw3t"> <a href="/" class="site-title sl-flex astro-pf7uwcts"> <img class="light:sl-hidden print:hidden astro-pf7uwcts" alt="Spec Engine" src="/_astro/spec-mark-white.DJBFLLUP.svg" width="512" height="512"> <img class="dark:sl-hidden print:block astro-pf7uwcts" alt="Spec Engine" src="/_astro/spec-mark-black.ZCN22lJi.svg" width="512" height="512"> <span class="astro-pf7uwcts" translate="no"> Spec Engine </span> </a> </div> <div class="sl-flex print:hidden astro-huokaw3t"> <site-search class="astro-huokaw3t astro-6oz6ysne" data-translations="{&quot;placeholder&quot;:&quot;Search&quot;}"> <button data-open-modal disabled aria-label="Search" aria-keyshortcuts="Control+K" class="astro-6oz6ysne"> <svg aria-hidden="true" class="astro-6oz6ysne astro-kyfdspn7" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21.71 20.29 18 16.61A9 9 0 1 0 16.61 18l3.68 3.68a.999.999 0 0 0 1.42 0 1 1 0 0 0 0-1.39ZM11 18a7 7 0 1 1 0-14 7 7 0 0 1 0 14Z"/></svg> <span class="sl-hidden md:sl-block astro-6oz6ysne" aria-hidden="true">Search</span> <kbd class="sl-hidden md:sl-flex astro-6oz6ysne" style="display: none;"> <kbd class="astro-6oz6ysne">Ctrl</kbd><kbd class="astro-6oz6ysne">K</kbd> </kbd> </button> <dialog style="padding:0" aria-label="Search" class="astro-6oz6ysne"> <div class="dialog-frame sl-flex astro-6oz6ysne"> <button data-close-modal class="sl-flex md:sl-hidden astro-6oz6ysne"> Cancel </button> <div class="search-container astro-6oz6ysne"> <div id="starlight__search" class="astro-6oz6ysne"></div> </div> </div> </dialog> </site-search> <script>
27
+ </script><template id="theme-icons"><svg aria-hidden="true" class="light astro-lm5mbbcm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M5 12a1 1 0 0 0-1-1H3a1 1 0 0 0 0 2h1a1 1 0 0 0 1-1Zm.64 5-.71.71a1 1 0 0 0 0 1.41 1 1 0 0 0 1.41 0l.71-.71A1 1 0 0 0 5.64 17ZM12 5a1 1 0 0 0 1-1V3a1 1 0 0 0-2 0v1a1 1 0 0 0 1 1Zm5.66 2.34a1 1 0 0 0 .7-.29l.71-.71a1 1 0 1 0-1.41-1.41l-.66.71a1 1 0 0 0 0 1.41 1 1 0 0 0 .66.29Zm-12-.29a1 1 0 0 0 1.41 0 1 1 0 0 0 0-1.41l-.71-.71a1.004 1.004 0 1 0-1.43 1.41l.73.71ZM21 11h-1a1 1 0 0 0 0 2h1a1 1 0 0 0 0-2Zm-2.64 6A1 1 0 0 0 17 18.36l.71.71a1 1 0 0 0 1.41 0 1 1 0 0 0 0-1.41l-.76-.66ZM12 6.5a5.5 5.5 0 1 0 5.5 5.5A5.51 5.51 0 0 0 12 6.5Zm0 9a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7Zm0 3.5a1 1 0 0 0-1 1v1a1 1 0 0 0 2 0v-1a1 1 0 0 0-1-1Z"/></svg><svg aria-hidden="true" class="dark astro-lm5mbbcm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21.64 13a1 1 0 0 0-1.05-.14 8.049 8.049 0 0 1-3.37.73 8.15 8.15 0 0 1-8.14-8.1 8.59 8.59 0 0 1 .25-2A1 1 0 0 0 8 2.36a10.14 10.14 0 1 0 14 11.69 1 1 0 0 0-.36-1.05Zm-9.5 6.69A8.14 8.14 0 0 1 7.08 5.22v.27a10.15 10.15 0 0 0 10.14 10.14 9.784 9.784 0 0 0 2.1-.22 8.11 8.11 0 0 1-7.18 4.32v-.04Z"/></svg><svg aria-hidden="true" class="auto astro-lm5mbbcm" 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></template><link rel="stylesheet" href="/_astro/print.DNXP8c50.css" media="print"><link rel="stylesheet" href="/_astro/common.DslAiFsT.css"><link rel="stylesheet" href="/_astro/Code.CAimF0uL.css"><script type="module" src="/_astro/page.B_tncCx8.js"></script></head> <body class="astro-ioexmpvj"> <a href="#_top" class="astro-exkej44h">Skip to content</a> <div class="page sl-flex astro-to3xypmc"> <header class="header astro-to3xypmc"><div class="header astro-shhymrmb"> <div class="title-wrapper sl-flex astro-shhymrmb"> <a href="/" class="site-title sl-flex astro-6qdjqr3f"> <img class="light:sl-hidden print:hidden astro-6qdjqr3f" alt="Spec Engine" src="/_astro/spec-mark-white.DJBFLLUP.svg" width="512" height="512"> <img class="dark:sl-hidden print:block astro-6qdjqr3f" alt="Spec Engine" src="/_astro/spec-mark-black.ZCN22lJi.svg" width="512" height="512"> <span class="astro-6qdjqr3f" translate="no"> Spec Engine </span> </a> </div> <div class="sl-flex print:hidden astro-shhymrmb"> <site-search class="astro-shhymrmb astro-7vagb36t" data-translations="{&quot;placeholder&quot;:&quot;Search&quot;}"> <button data-open-modal disabled aria-label="Search" aria-keyshortcuts="Control+K" class="astro-7vagb36t"> <svg aria-hidden="true" class="astro-7vagb36t astro-lm5mbbcm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21.71 20.29 18 16.61A9 9 0 1 0 16.61 18l3.68 3.68a.999.999 0 0 0 1.42 0 1 1 0 0 0 0-1.39ZM11 18a7 7 0 1 1 0-14 7 7 0 0 1 0 14Z"/></svg> <span class="sl-hidden md:sl-block astro-7vagb36t" aria-hidden="true">Search</span> <kbd class="sl-hidden md:sl-flex astro-7vagb36t" style="display: none;"> <kbd class="astro-7vagb36t">Ctrl</kbd><kbd class="astro-7vagb36t">K</kbd> </kbd> </button> <dialog style="padding:0" aria-label="Search" class="astro-7vagb36t"> <div class="dialog-frame sl-flex astro-7vagb36t"> <button data-close-modal class="sl-flex md:sl-hidden astro-7vagb36t"> Cancel </button> <div class="search-container astro-7vagb36t"> <div id="starlight__search" class="astro-7vagb36t"></div> </div> </div> </dialog> </site-search> <script>
28
28
  (() => {
29
29
  const openBtn = document.querySelector('button[data-open-modal]');
30
30
  const shortcut = openBtn?.querySelector('kbd');
@@ -36,9 +36,9 @@
36
36
  }
37
37
  shortcut.style.display = '';
38
38
  })();
39
- </script> <script type="module" src="/_astro/Search.astro_astro_type_script_index_0_lang.lq3t8uE2.js"></script> </div> <div class="sl-hidden md:sl-flex print:hidden right-group astro-huokaw3t"> <div class="sl-flex social-icons astro-huokaw3t"> <a href="https://github.com/spec-engine/spec-engine" rel="me" class="sl-flex astro-7c53pyad"><span class="sr-only astro-7c53pyad">GitHub</span><svg aria-hidden="true" class="astro-7c53pyad astro-kyfdspn7" 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-xrbm3f6n"> <span class="sr-only astro-xrbm3f6n">Select theme</span> <svg aria-hidden="true" class="icon label-icon astro-xrbm3f6n astro-kyfdspn7" 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-xrbm3f6n"> <option value="dark" class="astro-xrbm3f6n">Dark</option><option value="light" class="astro-xrbm3f6n">Light</option><option value="auto" selected class="astro-xrbm3f6n">Auto</option> </select> <svg aria-hidden="true" class="icon caret astro-xrbm3f6n astro-kyfdspn7" 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>
39
+ </script> <script type="module" src="/_astro/Search.astro_astro_type_script_index_0_lang.lq3t8uE2.js"></script> </div> <div class="sl-hidden md:sl-flex print:hidden right-group astro-shhymrmb"> <div class="sl-flex social-icons astro-shhymrmb"> <a href="https://github.com/spec-engine/spec-engine" rel="me" class="sl-flex astro-opyhioab"><span class="sr-only astro-opyhioab">GitHub</span><svg aria-hidden="true" class="astro-opyhioab astro-lm5mbbcm" 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-oxpvutiw"> <span class="sr-only astro-oxpvutiw">Select theme</span> <svg aria-hidden="true" class="icon label-icon astro-oxpvutiw astro-lm5mbbcm" 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-oxpvutiw"> <option value="dark" class="astro-oxpvutiw">Dark</option><option value="light" class="astro-oxpvutiw">Light</option><option value="auto" selected class="astro-oxpvutiw">Auto</option> </select> <svg aria-hidden="true" class="icon caret astro-oxpvutiw astro-lm5mbbcm" 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>
40
40
  StarlightThemeProvider.updatePickers();
41
- </script> <script type="module">const r="starlight-theme",o=e=>e==="auto"||e==="dark"||e==="light"?e:"auto",c=()=>o(typeof localStorage<"u"&&localStorage.getItem(r));function n(e){typeof localStorage<"u"&&localStorage.setItem(r,e==="light"||e==="dark"?e:"")}const l=()=>matchMedia("(prefers-color-scheme: light)").matches?"light":"dark";function t(e){StarlightThemeProvider.updatePickers(e),document.documentElement.dataset.theme=e==="auto"?l():e,n(e)}matchMedia("(prefers-color-scheme: light)").addEventListener("change",()=>{c()==="auto"&&t("auto")});class s extends HTMLElement{constructor(){super(),t(c()),this.querySelector("select")?.addEventListener("change",a=>{a.currentTarget instanceof HTMLSelectElement&&t(o(a.currentTarget.value))})}}customElements.define("starlight-theme-select",s);</script> <script type="module">class s extends HTMLElement{constructor(){super();const e=this.querySelector("select");e&&(e.addEventListener("change",t=>{t.currentTarget instanceof HTMLSelectElement&&(window.location.pathname=t.currentTarget.value)}),window.addEventListener("pageshow",t=>{if(!t.persisted)return;const n=e.querySelector("option[selected]")?.index;n!==e.selectedIndex&&(e.selectedIndex=n??0)}))}}customElements.define("starlight-lang-select",s);</script> </div> </div></header> <nav class="sidebar print:hidden astro-4azfgxa5" aria-label="Main"> <starlight-menu-button class="print:hidden astro-5hpi47kq"> <button aria-expanded="false" aria-label="Menu" aria-controls="starlight__sidebar" class="sl-flex md:sl-hidden astro-5hpi47kq"> <svg aria-hidden="true" class="open-menu astro-5hpi47kq astro-kyfdspn7" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M3 8h18a1 1 0 1 0 0-2H3a1 1 0 0 0 0 2Zm18 8H3a1 1 0 0 0 0 2h18a1 1 0 0 0 0-2Zm0-5H3a1 1 0 0 0 0 2h18a1 1 0 0 0 0-2Z"/></svg> <svg aria-hidden="true" class="close-menu astro-5hpi47kq astro-kyfdspn7" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="m13.41 12 6.3-6.29a1.004 1.004 0 1 0-1.42-1.42L12 10.59l-6.29-6.3a1.004 1.004 0 0 0-1.42 1.42l6.3 6.29-6.3 6.29a1 1 0 0 0 0 1.42.998.998 0 0 0 1.42 0l6.29-6.3 6.29 6.3a.999.999 0 0 0 1.42 0 1 1 0 0 0 0-1.42L13.41 12Z"/></svg> </button> </starlight-menu-button> <script type="module">class s extends HTMLElement{constructor(){super(),this.btn=this.querySelector("button"),this.btn.addEventListener("click",()=>this.toggleExpanded());const t=this.closest("nav");t&&t.addEventListener("keyup",e=>this.closeOnEscape(e))}setExpanded(t){this.setAttribute("aria-expanded",String(t)),document.body.toggleAttribute("data-mobile-menu-expanded",t)}toggleExpanded(){this.setExpanded(this.getAttribute("aria-expanded")!=="true")}closeOnEscape(t){t.code==="Escape"&&(this.setExpanded(!1),this.btn.focus())}}customElements.define("starlight-menu-button",s);</script> <div id="starlight__sidebar" class="sidebar-pane astro-4azfgxa5"> <div class="sidebar-content sl-flex astro-4azfgxa5"> <sl-sidebar-state-persist data-hash="0fmmri7" class="astro-buzsinug"> <script aria-hidden="true">
41
+ </script> <script type="module">const r="starlight-theme",o=e=>e==="auto"||e==="dark"||e==="light"?e:"auto",c=()=>o(typeof localStorage<"u"&&localStorage.getItem(r));function n(e){typeof localStorage<"u"&&localStorage.setItem(r,e==="light"||e==="dark"?e:"")}const l=()=>matchMedia("(prefers-color-scheme: light)").matches?"light":"dark";function t(e){StarlightThemeProvider.updatePickers(e),document.documentElement.dataset.theme=e==="auto"?l():e,n(e)}matchMedia("(prefers-color-scheme: light)").addEventListener("change",()=>{c()==="auto"&&t("auto")});class s extends HTMLElement{constructor(){super(),t(c()),this.querySelector("select")?.addEventListener("change",a=>{a.currentTarget instanceof HTMLSelectElement&&t(o(a.currentTarget.value))})}}customElements.define("starlight-theme-select",s);</script> <script type="module">class s extends HTMLElement{constructor(){super();const e=this.querySelector("select");e&&(e.addEventListener("change",t=>{t.currentTarget instanceof HTMLSelectElement&&(window.location.pathname=t.currentTarget.value)}),window.addEventListener("pageshow",t=>{if(!t.persisted)return;const n=e.querySelector("option[selected]")?.index;n!==e.selectedIndex&&(e.selectedIndex=n??0)}))}}customElements.define("starlight-lang-select",s);</script> </div> </div></header> <nav class="sidebar print:hidden astro-to3xypmc" aria-label="Main"> <starlight-menu-button class="print:hidden astro-l43anhaf"> <button aria-expanded="false" aria-label="Menu" aria-controls="starlight__sidebar" class="sl-flex md:sl-hidden astro-l43anhaf"> <svg aria-hidden="true" class="open-menu astro-l43anhaf astro-lm5mbbcm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M3 8h18a1 1 0 1 0 0-2H3a1 1 0 0 0 0 2Zm18 8H3a1 1 0 0 0 0 2h18a1 1 0 0 0 0-2Zm0-5H3a1 1 0 0 0 0 2h18a1 1 0 0 0 0-2Z"/></svg> <svg aria-hidden="true" class="close-menu astro-l43anhaf astro-lm5mbbcm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="m13.41 12 6.3-6.29a1.004 1.004 0 1 0-1.42-1.42L12 10.59l-6.29-6.3a1.004 1.004 0 0 0-1.42 1.42l6.3 6.29-6.3 6.29a1 1 0 0 0 0 1.42.998.998 0 0 0 1.42 0l6.29-6.3 6.29 6.3a.999.999 0 0 0 1.42 0 1 1 0 0 0 0-1.42L13.41 12Z"/></svg> </button> </starlight-menu-button> <script type="module">class s extends HTMLElement{constructor(){super(),this.btn=this.querySelector("button"),this.btn.addEventListener("click",()=>this.toggleExpanded());const t=this.closest("nav");t&&t.addEventListener("keyup",e=>this.closeOnEscape(e))}setExpanded(t){this.setAttribute("aria-expanded",String(t)),document.body.toggleAttribute("data-mobile-menu-expanded",t)}toggleExpanded(){this.setExpanded(this.getAttribute("aria-expanded")!=="true")}closeOnEscape(t){t.code==="Escape"&&(this.setExpanded(!1),this.btn.focus())}}customElements.define("starlight-menu-button",s);</script> <div id="starlight__sidebar" class="sidebar-pane astro-to3xypmc"> <div class="sidebar-content sl-flex astro-to3xypmc"> <sl-sidebar-state-persist data-hash="0fmmri7" class="astro-znqwvy6e"> <script aria-hidden="true">
42
42
  (() => {
43
43
  try {
44
44
  if (!matchMedia('(min-width: 50em)').matches) return;
@@ -61,64 +61,52 @@
61
61
  );
62
62
  } catch {}
63
63
  })();
64
- </script> <ul class="top-level astro-ftvsh3ht"> <li class="astro-ftvsh3ht"> <a href="/overview/" aria-current="page" class="large astro-ftvsh3ht"> <span class="astro-ftvsh3ht">Overview</span> </a> </li><li class="astro-ftvsh3ht"> <a href="/getting-started/" class="large astro-ftvsh3ht"> <span class="astro-ftvsh3ht">Getting Started</span> </a> </li><li class="astro-ftvsh3ht"> <a href="/architecture/" class="large astro-ftvsh3ht"> <span class="astro-ftvsh3ht">Architecture</span> </a> </li><li class="astro-ftvsh3ht"> <a href="/commands/" class="large astro-ftvsh3ht"> <span class="astro-ftvsh3ht">Commands</span> </a> </li><li class="astro-ftvsh3ht"> <a href="/format/" class="large astro-ftvsh3ht"> <span class="astro-ftvsh3ht">SPEC.json Format</span> </a> </li><li class="astro-ftvsh3ht"> <a href="/tags/" class="large astro-ftvsh3ht"> <span class="astro-ftvsh3ht">Tags</span> </a> </li><li class="astro-ftvsh3ht"> <a href="/checks/" class="large astro-ftvsh3ht"> <span class="astro-ftvsh3ht">Integrity Checks</span> </a> </li><li class="astro-ftvsh3ht"> <details open class="astro-ftvsh3ht"> <summary class="astro-ftvsh3ht"> <span class="group-label astro-ftvsh3ht"> <span class="large astro-ftvsh3ht">Guides</span> </span> <svg aria-hidden="true" class="caret astro-ftvsh3ht astro-kyfdspn7" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><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> </summary> <sl-sidebar-restore data-index="0"></sl-sidebar-restore> <ul class="astro-ftvsh3ht"> <li class="astro-ftvsh3ht"> <a href="/guides/adoption/" class="astro-ftvsh3ht"> <span class="astro-ftvsh3ht">Adoption Guide</span> </a> </li><li class="astro-ftvsh3ht"> <a href="/guides/platform-setup/" class="astro-ftvsh3ht"> <span class="astro-ftvsh3ht">Platform Setup</span> </a> </li><li class="astro-ftvsh3ht"> <a href="/guides/single-repo/" class="astro-ftvsh3ht"> <span class="astro-ftvsh3ht">Single Repo (Rung 1)</span> </a> </li> </ul> </details> </li><li class="astro-ftvsh3ht"> <a href="/agent-reference/" class="large astro-ftvsh3ht"> <span class="astro-ftvsh3ht">Agent Reference</span> </a> </li> </ul> <script aria-hidden="true">
64
+ </script> <ul class="top-level astro-ux7joveq"> <li class="astro-ux7joveq"> <a href="/overview/" aria-current="page" class="large astro-ux7joveq"> <span class="astro-ux7joveq">Overview</span> </a> </li><li class="astro-ux7joveq"> <a href="/getting-started/" class="large astro-ux7joveq"> <span class="astro-ux7joveq">Getting Started</span> </a> </li><li class="astro-ux7joveq"> <a href="/architecture/" class="large astro-ux7joveq"> <span class="astro-ux7joveq">Architecture</span> </a> </li><li class="astro-ux7joveq"> <a href="/commands/" class="large astro-ux7joveq"> <span class="astro-ux7joveq">Commands</span> </a> </li><li class="astro-ux7joveq"> <a href="/format/" class="large astro-ux7joveq"> <span class="astro-ux7joveq">SPEC.json Format</span> </a> </li><li class="astro-ux7joveq"> <a href="/tags/" class="large astro-ux7joveq"> <span class="astro-ux7joveq">Tags</span> </a> </li><li class="astro-ux7joveq"> <a href="/checks/" class="large astro-ux7joveq"> <span class="astro-ux7joveq">Integrity Checks</span> </a> </li><li class="astro-ux7joveq"> <details open class="astro-ux7joveq"> <summary class="astro-ux7joveq"> <span class="group-label astro-ux7joveq"> <span class="large astro-ux7joveq">Guides</span> </span> <svg aria-hidden="true" class="caret astro-ux7joveq astro-lm5mbbcm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><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> </summary> <sl-sidebar-restore data-index="0"></sl-sidebar-restore> <ul class="astro-ux7joveq"> <li class="astro-ux7joveq"> <a href="/guides/adoption/" class="astro-ux7joveq"> <span class="astro-ux7joveq">Adoption Guide</span> </a> </li><li class="astro-ux7joveq"> <a href="/guides/platform-setup/" class="astro-ux7joveq"> <span class="astro-ux7joveq">Platform Setup</span> </a> </li><li class="astro-ux7joveq"> <a href="/guides/single-repo/" class="astro-ux7joveq"> <span class="astro-ux7joveq">Single Repo (Rung 1)</span> </a> </li> </ul> </details> </li><li class="astro-ux7joveq"> <a href="/agent-reference/" class="large astro-ux7joveq"> <span class="astro-ux7joveq">Agent Reference</span> </a> </li> </ul> <script aria-hidden="true">
65
65
  (() => {
66
66
  const scroller = document.getElementById('starlight__sidebar');
67
67
  if (!window._starlightScrollRestore || !scroller) return;
68
68
  scroller.scrollTop = window._starlightScrollRestore;
69
69
  delete window._starlightScrollRestore;
70
70
  })();
71
- </script> </sl-sidebar-state-persist> <div class="md:sl-hidden"> <div class="mobile-preferences sl-flex astro-q2jvmmon"> <div class="social-icons astro-q2jvmmon"> <a href="https://github.com/spec-engine/spec-engine" rel="me" class="sl-flex astro-7c53pyad"><span class="sr-only astro-7c53pyad">GitHub</span><svg aria-hidden="true" class="astro-7c53pyad astro-kyfdspn7" 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-xrbm3f6n"> <span class="sr-only astro-xrbm3f6n">Select theme</span> <svg aria-hidden="true" class="icon label-icon astro-xrbm3f6n astro-kyfdspn7" 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-xrbm3f6n"> <option value="dark" class="astro-xrbm3f6n">Dark</option><option value="light" class="astro-xrbm3f6n">Light</option><option value="auto" selected class="astro-xrbm3f6n">Auto</option> </select> <svg aria-hidden="true" class="icon caret astro-xrbm3f6n astro-kyfdspn7" 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>
71
+ </script> </sl-sidebar-state-persist> <div class="md:sl-hidden"> <div class="mobile-preferences sl-flex astro-2lx56rho"> <div class="social-icons astro-2lx56rho"> <a href="https://github.com/spec-engine/spec-engine" rel="me" class="sl-flex astro-opyhioab"><span class="sr-only astro-opyhioab">GitHub</span><svg aria-hidden="true" class="astro-opyhioab astro-lm5mbbcm" 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-oxpvutiw"> <span class="sr-only astro-oxpvutiw">Select theme</span> <svg aria-hidden="true" class="icon label-icon astro-oxpvutiw astro-lm5mbbcm" 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-oxpvutiw"> <option value="dark" class="astro-oxpvutiw">Dark</option><option value="light" class="astro-oxpvutiw">Light</option><option value="auto" selected class="astro-oxpvutiw">Auto</option> </select> <svg aria-hidden="true" class="icon caret astro-oxpvutiw astro-lm5mbbcm" 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-4azfgxa5"> <script type="module">const a=document.getElementById("starlight__sidebar"),n=a?.querySelector("sl-sidebar-state-persist"),o="sl-sidebar-state",i=()=>{let t=[];const e=n?.dataset.hash||"";try{const s=sessionStorage.getItem(o),r=JSON.parse(s||"{}");Array.isArray(r.open)&&r.hash===e&&(t=r.open)}catch{}return{hash:e,open:t,scroll:a?.scrollTop||0}},c=t=>{try{sessionStorage.setItem(o,JSON.stringify(t))}catch{}},d=()=>c(i()),l=(t,e)=>{const s=i();s.open[e]=t,c(s)};n?.addEventListener("click",t=>{if(!(t.target instanceof Element))return;const e=t.target.closest("summary")?.closest("details");if(!e)return;const s=e.querySelector("sl-sidebar-restore"),r=parseInt(s?.dataset.index||"");isNaN(r)||l(!e.open,r)});addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&d()});addEventListener("pageHide",d);</script> <div class="lg:sl-flex astro-7dbgj2gg"> <aside class="right-sidebar-container print:hidden astro-7dbgj2gg"> <div class="right-sidebar astro-7dbgj2gg"> <div class="lg:sl-hidden astro-ungkjbep"><mobile-starlight-toc data-min-h="2" data-max-h="3" class="astro-qoe4sryv"><nav aria-labelledby="starlight__on-this-page--mobile" class="astro-qoe4sryv"><details id="starlight__mobile-toc" class="astro-qoe4sryv"><summary id="starlight__on-this-page--mobile" class="sl-flex astro-qoe4sryv"><span class="toggle sl-flex astro-qoe4sryv">On this page<svg aria-hidden="true" class="caret astro-qoe4sryv astro-kyfdspn7" 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-qoe4sryv"></span></summary><div class="dropdown astro-qoe4sryv"><ul class="isMobile astro-mc3l7tuo" style="--depth: 0;"> <li class="astro-mc3l7tuo" style="--depth: 0;"> <a href="#_top" class="astro-mc3l7tuo" style="--depth: 0;"> <span class="astro-mc3l7tuo" style="--depth: 0;">Overview</span> </a> </li><li class="astro-mc3l7tuo" style="--depth: 0;"> <a href="#why-it-exists" class="astro-mc3l7tuo" style="--depth: 0;"> <span class="astro-mc3l7tuo" style="--depth: 0;">Why it exists</span> </a> </li><li class="astro-mc3l7tuo" style="--depth: 0;"> <a href="#provenance--the-external-join" class="astro-mc3l7tuo" style="--depth: 0;"> <span class="astro-mc3l7tuo" style="--depth: 0;">Provenance — the external join</span> </a> </li><li class="astro-mc3l7tuo" style="--depth: 0;"> <a href="#deployment-tiers" class="astro-mc3l7tuo" style="--depth: 0;"> <span class="astro-mc3l7tuo" style="--depth: 0;">Deployment tiers</span> </a> </li><li class="astro-mc3l7tuo" style="--depth: 0;"> <a href="#the-four-moves" class="astro-mc3l7tuo" style="--depth: 0;"> <span class="astro-mc3l7tuo" style="--depth: 0;">The four moves</span> </a> </li> </ul></div></details></nav></mobile-starlight-toc><script type="module" src="/_astro/MobileTableOfContents.astro_astro_type_script_index_0_lang.hwBsy0Mo.js"></script></div><div class="right-sidebar-panel sl-hidden lg:sl-block astro-ungkjbep"><div class="sl-container astro-ungkjbep"><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-mc3l7tuo" style="--depth: 0;"> <li class="astro-mc3l7tuo" style="--depth: 0;"> <a href="#_top" class="astro-mc3l7tuo" style="--depth: 0;"> <span class="astro-mc3l7tuo" style="--depth: 0;">Overview</span> </a> </li><li class="astro-mc3l7tuo" style="--depth: 0;"> <a href="#why-it-exists" class="astro-mc3l7tuo" style="--depth: 0;"> <span class="astro-mc3l7tuo" style="--depth: 0;">Why it exists</span> </a> </li><li class="astro-mc3l7tuo" style="--depth: 0;"> <a href="#provenance--the-external-join" class="astro-mc3l7tuo" style="--depth: 0;"> <span class="astro-mc3l7tuo" style="--depth: 0;">Provenance — the external join</span> </a> </li><li class="astro-mc3l7tuo" style="--depth: 0;"> <a href="#deployment-tiers" class="astro-mc3l7tuo" style="--depth: 0;"> <span class="astro-mc3l7tuo" style="--depth: 0;">Deployment tiers</span> </a> </li><li class="astro-mc3l7tuo" style="--depth: 0;"> <a href="#the-four-moves" class="astro-mc3l7tuo" style="--depth: 0;"> <span class="astro-mc3l7tuo" style="--depth: 0;">The four moves</span> </a> </li> </ul></nav></starlight-toc><script type="module" src="/_astro/TableOfContents.astro_astro_type_script_index_0_lang.FuRcXuRY.js"></script></div></div> </div> </aside> <div class="main-pane astro-7dbgj2gg"> <main data-pagefind-body class="astro-hke2hksx" lang="en" dir="ltr"> <div class="content-panel astro-cwqdebiv"> <div class="sl-container astro-cwqdebiv"> <h1 id="_top" class="astro-jkmikw3m">Overview</h1> </div> </div> <div class="content-panel astro-cwqdebiv"> <div class="sl-container astro-cwqdebiv"> <div class="sl-markdown-content"> <starlight-tabs class="astro-kxdxunri"> <div class="tablist-wrapper not-content astro-kxdxunri"> <ul role="tablist" class="astro-kxdxunri"> <li role="presentation" class="tab astro-kxdxunri"> <a role="tab" href="#tab-panel-0" id="tab-0" aria-selected="true" tabindex="0" class="astro-kxdxunri"> 👤 Human </a> </li><li role="presentation" class="tab astro-kxdxunri"> <a role="tab" href="#tab-panel-1" id="tab-1" aria-selected="false" tabindex="-1" class="astro-kxdxunri"> 🤖 Agent </a> </li> </ul> </div> <div id="tab-panel-0" aria-labelledby="tab-0" role="tabpanel"> <p><strong>Start here.</strong> Read <a href="/getting-started/">Getting Started</a> for a walkthrough, then explore <a href="/architecture/">Architecture</a>, <a href="/commands/">Commands</a>, and the <a href="/guides/adoption/">Guides</a>.</p><p>These docs are written in narrative style with rationale, examples, and context.</p> </div><div id="tab-panel-1" aria-labelledby="tab-1" role="tabpanel" hidden> <p><strong>You’re told to “use Spec Engine.”</strong> Go straight to the <a href="/agent-reference/">Agent Reference</a> — it has the exact CLI contracts, exit codes, JSON shapes, and the route → tag → check loop in as few tokens as possible. That page is optimized for agents, not humans.</p> </div> </starlight-tabs> <script type="module">class r extends HTMLElement{static#e=new Map;#t;#n="starlight-synced-tabs__";constructor(){super();const t=this.querySelector('[role="tablist"]');if(this.tabs=[...t.querySelectorAll('[role="tab"]')],this.panels=[...this.querySelectorAll(':scope > [role="tabpanel"]')],this.#t=this.dataset.syncKey,this.#t){const i=r.#e.get(this.#t)??[];i.push(this),r.#e.set(this.#t,i)}this.tabs.forEach((i,c)=>{i.addEventListener("click",e=>{e.preventDefault();const n=t.querySelector('[aria-selected="true"]');e.currentTarget!==n&&this.switchTab(e.currentTarget,c)}),i.addEventListener("keydown",e=>{const n=this.tabs.indexOf(e.currentTarget),s=e.key==="ArrowLeft"?n-1:e.key==="ArrowRight"?n+1:e.key==="Home"?0:e.key==="End"?this.tabs.length-1:null;s!==null&&this.tabs[s]&&(e.preventDefault(),this.switchTab(this.tabs[s],s))})})}switchTab(t,i,c=!0){if(!t)return;const e=c?this.getBoundingClientRect().top:0;this.tabs.forEach(s=>{s.setAttribute("aria-selected","false"),s.setAttribute("tabindex","-1")}),this.panels.forEach(s=>{s.hidden=!0});const n=this.panels[i];n&&(n.hidden=!1),t.removeAttribute("tabindex"),t.setAttribute("aria-selected","true"),c&&(t.focus(),r.#r(this,t),window.scrollTo({top:window.scrollY+(this.getBoundingClientRect().top-e),behavior:"instant"}))}#i(t){!this.#t||typeof localStorage>"u"||localStorage.setItem(this.#n+this.#t,t)}static#r(t,i){const c=t.#t,e=r.#s(i);if(!c||!e)return;const n=r.#e.get(c);if(n){for(const s of n){if(s===t)continue;const a=s.tabs.findIndex(o=>r.#s(o)===e);a!==-1&&s.switchTab(s.tabs[a],a,!1)}t.#i(e)}}static#s(t){return t.textContent?.trim()}}customElements.define("starlight-tabs",r);</script>
73
+ </script> </div> </div> </div> </div> </nav> <div class="main-frame astro-to3xypmc"> <script type="module">const a=document.getElementById("starlight__sidebar"),n=a?.querySelector("sl-sidebar-state-persist"),o="sl-sidebar-state",i=()=>{let t=[];const e=n?.dataset.hash||"";try{const s=sessionStorage.getItem(o),r=JSON.parse(s||"{}");Array.isArray(r.open)&&r.hash===e&&(t=r.open)}catch{}return{hash:e,open:t,scroll:a?.scrollTop||0}},c=t=>{try{sessionStorage.setItem(o,JSON.stringify(t))}catch{}},d=()=>c(i()),l=(t,e)=>{const s=i();s.open[e]=t,c(s)};n?.addEventListener("click",t=>{if(!(t.target instanceof Element))return;const e=t.target.closest("summary")?.closest("details");if(!e)return;const s=e.querySelector("sl-sidebar-restore"),r=parseInt(s?.dataset.index||"");isNaN(r)||l(!e.open,r)});addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&d()});addEventListener("pageHide",d);</script> <div class="lg:sl-flex astro-blhl7r6q"> <aside class="right-sidebar-container print:hidden astro-blhl7r6q"> <div class="right-sidebar astro-blhl7r6q"> <div class="lg:sl-hidden astro-l5m3cfel"><mobile-starlight-toc data-min-h="2" data-max-h="3" class="astro-goxitxj7"><nav aria-labelledby="starlight__on-this-page--mobile" class="astro-goxitxj7"><details id="starlight__mobile-toc" class="astro-goxitxj7"><summary id="starlight__on-this-page--mobile" class="sl-flex astro-goxitxj7"><span class="toggle sl-flex astro-goxitxj7">On this page<svg aria-hidden="true" class="caret astro-goxitxj7 astro-lm5mbbcm" 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-goxitxj7"></span></summary><div class="dropdown astro-goxitxj7"><ul class="isMobile astro-xz67lhkg" style="--depth: 0;"> <li class="astro-xz67lhkg" style="--depth: 0;"> <a href="#_top" class="astro-xz67lhkg" style="--depth: 0;"> <span class="astro-xz67lhkg" style="--depth: 0;">Overview</span> </a> </li><li class="astro-xz67lhkg" style="--depth: 0;"> <a href="#the-idea" class="astro-xz67lhkg" style="--depth: 0;"> <span class="astro-xz67lhkg" style="--depth: 0;">The idea</span> </a> </li><li class="astro-xz67lhkg" style="--depth: 0;"> <a href="#why-it-exists" class="astro-xz67lhkg" style="--depth: 0;"> <span class="astro-xz67lhkg" style="--depth: 0;">Why it exists</span> </a> </li><li class="astro-xz67lhkg" style="--depth: 0;"> <a href="#provenance--the-external-join" class="astro-xz67lhkg" style="--depth: 0;"> <span class="astro-xz67lhkg" style="--depth: 0;">Provenance — the external join</span> </a> </li><li class="astro-xz67lhkg" style="--depth: 0;"> <a href="#what-ships-today-and-what-is-planned" class="astro-xz67lhkg" style="--depth: 0;"> <span class="astro-xz67lhkg" style="--depth: 0;">What ships today, and what is planned</span> </a> </li><li class="astro-xz67lhkg" style="--depth: 0;"> <a href="#the-working-loop" class="astro-xz67lhkg" style="--depth: 0;"> <span class="astro-xz67lhkg" style="--depth: 0;">The working loop</span> </a> </li> </ul></div></details></nav></mobile-starlight-toc><script type="module" src="/_astro/MobileTableOfContents.astro_astro_type_script_index_0_lang.hwBsy0Mo.js"></script></div><div class="right-sidebar-panel sl-hidden lg:sl-block astro-l5m3cfel"><div class="sl-container astro-l5m3cfel"><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-xz67lhkg" style="--depth: 0;"> <li class="astro-xz67lhkg" style="--depth: 0;"> <a href="#_top" class="astro-xz67lhkg" style="--depth: 0;"> <span class="astro-xz67lhkg" style="--depth: 0;">Overview</span> </a> </li><li class="astro-xz67lhkg" style="--depth: 0;"> <a href="#the-idea" class="astro-xz67lhkg" style="--depth: 0;"> <span class="astro-xz67lhkg" style="--depth: 0;">The idea</span> </a> </li><li class="astro-xz67lhkg" style="--depth: 0;"> <a href="#why-it-exists" class="astro-xz67lhkg" style="--depth: 0;"> <span class="astro-xz67lhkg" style="--depth: 0;">Why it exists</span> </a> </li><li class="astro-xz67lhkg" style="--depth: 0;"> <a href="#provenance--the-external-join" class="astro-xz67lhkg" style="--depth: 0;"> <span class="astro-xz67lhkg" style="--depth: 0;">Provenance — the external join</span> </a> </li><li class="astro-xz67lhkg" style="--depth: 0;"> <a href="#what-ships-today-and-what-is-planned" class="astro-xz67lhkg" style="--depth: 0;"> <span class="astro-xz67lhkg" style="--depth: 0;">What ships today, and what is planned</span> </a> </li><li class="astro-xz67lhkg" style="--depth: 0;"> <a href="#the-working-loop" class="astro-xz67lhkg" style="--depth: 0;"> <span class="astro-xz67lhkg" style="--depth: 0;">The working loop</span> </a> </li> </ul></nav></starlight-toc><script type="module" src="/_astro/TableOfContents.astro_astro_type_script_index_0_lang.FuRcXuRY.js"></script></div></div> </div> </aside> <div class="main-pane astro-blhl7r6q"> <main data-pagefind-body class="astro-ioexmpvj" lang="en" dir="ltr"> <div class="content-panel astro-sfndtt72"> <div class="sl-container astro-sfndtt72"> <h1 id="_top" class="astro-4b4mtvou">Overview</h1> </div> </div> <div class="content-panel astro-sfndtt72"> <div class="sl-container astro-sfndtt72"> <div class="sl-markdown-content"> <starlight-tabs class="astro-njbqzmfe"> <div class="tablist-wrapper not-content astro-njbqzmfe"> <ul role="tablist" class="astro-njbqzmfe"> <li role="presentation" class="tab astro-njbqzmfe"> <a role="tab" href="#tab-panel-0" id="tab-0" aria-selected="true" tabindex="0" class="astro-njbqzmfe"> 👤 Human </a> </li><li role="presentation" class="tab astro-njbqzmfe"> <a role="tab" href="#tab-panel-1" id="tab-1" aria-selected="false" tabindex="-1" class="astro-njbqzmfe"> 🤖 Agent </a> </li> </ul> </div> <div id="tab-panel-0" aria-labelledby="tab-0" role="tabpanel"> <p><strong>Start here.</strong> Read <a href="/getting-started/">Getting Started</a> for a walkthrough, then explore <a href="/architecture/">Architecture</a>, <a href="/commands/">Commands</a>, and the <a href="/guides/adoption/">Guides</a>.</p><p>These docs are written in narrative style with rationale, examples, and context.</p> </div><div id="tab-panel-1" aria-labelledby="tab-1" role="tabpanel" hidden> <p><strong>You’re told to “use Spec Engine.”</strong> Go straight to the <a href="/agent-reference/">Agent Reference</a> — it has the exact CLI contracts, exit codes, JSON shapes, and the route → tag → check loop in as few tokens as possible. That page is optimized for agents, not humans.</p> </div> </starlight-tabs> <script type="module">class r extends HTMLElement{static#e=new Map;#t;#n="starlight-synced-tabs__";constructor(){super();const t=this.querySelector('[role="tablist"]');if(this.tabs=[...t.querySelectorAll('[role="tab"]')],this.panels=[...this.querySelectorAll(':scope > [role="tabpanel"]')],this.#t=this.dataset.syncKey,this.#t){const i=r.#e.get(this.#t)??[];i.push(this),r.#e.set(this.#t,i)}this.tabs.forEach((i,c)=>{i.addEventListener("click",e=>{e.preventDefault();const n=t.querySelector('[aria-selected="true"]');e.currentTarget!==n&&this.switchTab(e.currentTarget,c)}),i.addEventListener("keydown",e=>{const n=this.tabs.indexOf(e.currentTarget),s=e.key==="ArrowLeft"?n-1:e.key==="ArrowRight"?n+1:e.key==="Home"?0:e.key==="End"?this.tabs.length-1:null;s!==null&&this.tabs[s]&&(e.preventDefault(),this.switchTab(this.tabs[s],s))})})}switchTab(t,i,c=!0){if(!t)return;const e=c?this.getBoundingClientRect().top:0;this.tabs.forEach(s=>{s.setAttribute("aria-selected","false"),s.setAttribute("tabindex","-1")}),this.panels.forEach(s=>{s.hidden=!0});const n=this.panels[i];n&&(n.hidden=!1),t.removeAttribute("tabindex"),t.setAttribute("aria-selected","true"),c&&(t.focus(),r.#r(this,t),window.scrollTo({top:window.scrollY+(this.getBoundingClientRect().top-e),behavior:"instant"}))}#i(t){!this.#t||typeof localStorage>"u"||localStorage.setItem(this.#n+this.#t,t)}static#r(t,i){const c=t.#t,e=r.#s(i);if(!c||!e)return;const n=r.#e.get(c);if(n){for(const s of n){if(s===t)continue;const a=s.tabs.findIndex(o=>r.#s(o)===e);a!==-1&&s.switchTab(s.tabs[a],a,!1)}t.#i(e)}}static#s(t){return t.textContent?.trim()}}customElements.define("starlight-tabs",r);</script>
74
74
  <p>Spec Engine is a cross-repo requirements engine. It manages durable domain requirements that survive past production, addressed by permanent ID, bound to code, and checkable in CI.</p>
75
+ <p>It ships as one npm package — no clone, no build step, no service. With <a href="https://bun.sh">Bun</a> installed:</p>
76
+ <div class="expressive-code"><link rel="stylesheet" href="/_astro/ec.v4551.css"><script type="module" src="/_astro/ec.0vx5m.js"></script><figure class="frame is-terminal not-content"><figcaption class="header"><span class="title"></span><span class="sr-only">Terminal window</span></figcaption><pre data-language="shell"><code><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">$</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">bunx</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">@spec-engine/spec-engine</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#82AAFF;--1:#3B61B0">--help</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#919F9F;--1:#5F636F"># run without installing</span></div></div><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">$</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">bun</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">add</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#82AAFF;--1:#3B61B0">-g</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#ECC48D;--1:#3B61B0">@spec-engine/spec-engine</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#919F9F;--1:#5F636F"># or put the `spec` bin on your PATH</span></div></div></code></pre><div class="copy"><div aria-live="polite"></div><button title="Copy to clipboard" data-copied="Copied!" data-code="$ bunx @spec-engine/spec-engine --help # run without installing$ bun add -g @spec-engine/spec-engine # or put the &#x60;spec&#x60; bin on your PATH"><div></div></button></div></figure></div>
77
+ <p>That package carries the CLI, the local coverage webapp (<code dir="auto">spec serve</code>), and these docs offline (<code dir="auto">spec docs</code>). See <a href="/getting-started/">Getting Started</a> to run your first check.</p>
75
78
  <p>A <strong>spec</strong> is the standing specification of one domain. Requirements carry permanent IDs (<code dir="auto">KEY-NNN</code>); code points back at them with a <code dir="auto">// @spec KEY-NNN</code> tag. From that one convention you get three things:</p>
76
79
  <ol>
77
80
  <li>An agent can be routed to exactly the requirements a task touches</li>
78
81
  <li>Integrity can be checked mechanically</li>
79
82
  <li>A requirement’s history survives every refactor because IDs are permanent and changes supersede rather than overwrite</li>
80
83
  </ol>
84
+ <div class="sl-heading-wrapper level-h2"><h2 id="the-idea">The idea</h2><a class="sl-anchor-link" href="#the-idea"><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 idea”</span></a></div>
85
+ <p>Everything in Spec Engine follows from eight statements:</p>
86
+ <ol>
87
+ <li>A requirement represents a single behavior.</li>
88
+ <li>A requirement is never deleted. When behavior changes, it is superseded or deprecated.</li>
89
+ <li>The written requirements are the single source of truth for what the software is supposed to do.</li>
90
+ <li>A requirement can be linked to the code that implements it and to the tests that prove it.</li>
91
+ <li>Reports are computed from the requirements and their links.</li>
92
+ <li>You can check whether the requirements, code, and tests agree, and exactly where they don’t.</li>
93
+ <li>Tickets are not requirements. A ticket is temporary work; requirements outlive it.</li>
94
+ <li>Requirements are written in a fixed shape (when X happens, the system shall do Y).</li>
95
+ </ol>
81
96
  <div class="sl-heading-wrapper level-h2"><h2 id="why-it-exists">Why it exists</h2><a class="sl-anchor-link" href="#why-it-exists"><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 “Why it exists”</span></a></div>
82
- <p>Feature-generation tools (Spec Kit, Kiro, GSD/DFC) are keyed to the change you are about to make; their specs are per-feature and end at “implemented.” Spec Engine is keyed to the <strong>domain</strong>, which outlives every feature. Its first-class operation is <strong>life after production</strong>: superseding established truth, not generating new work.</p>
97
+ <p>Most spec tools are keyed to the change you are about to make: their specs describe one feature and end at “implemented.” Spec Engine is keyed to the <strong>domain</strong>, which outlives every feature. Its first-class operation is what happens after production: superseding established truth, not generating new work.</p>
83
98
  <p>When AI agents produce more code in an afternoon than a person can carefully read in a week, Spec Engine answers by making the mission-critical path defend itself: <code dir="auto">spec check</code> runs on every change and reports whether a load-bearing requirement was broken, orphaned, or left unverified.</p>
84
99
  <div class="sl-heading-wrapper level-h2"><h2 id="provenance--the-external-join">Provenance — the external join</h2><a class="sl-anchor-link" href="#provenance--the-external-join"><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 “Provenance — the external join”</span></a></div>
85
100
  <p>A requirement can also carry an optional <strong><code dir="auto">Issues:</code></strong> field linking it back to the tracker where the <em>why</em> lives, by role (<code dir="auto">created</code>, <code dir="auto">supersedes-via</code>, <code dir="auto">amends-via</code>). <code dir="auto">spec provenance</code> widens the coverage matrix into a provenance matrix: per requirement, the issue that birthed it, the issues that revised or retired it, and the tests backing it. The engine treats issue IDs as opaque strings and never makes a network call; an optional tracker adapter resolves them to titles and URLs. See <a href="/format/">SPEC.json Format</a> and <a href="/commands/">Commands</a>.</p>
86
- <div class="sl-heading-wrapper level-h2"><h2 id="deployment-tiers">Deployment tiers</h2><a class="sl-anchor-link" href="#deployment-tiers"><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 “Deployment tiers”</span></a></div>
87
-
88
-
89
-
90
-
91
-
92
-
93
-
94
-
95
-
96
-
97
-
98
-
99
-
100
-
101
-
102
-
103
-
104
-
105
-
106
-
107
-
108
-
109
-
110
-
111
-
112
-
113
-
114
-
115
-
116
- <table><thead><tr><th>Tier</th><th>Form</th><th>Scope</th><th>Price</th></tr></thead><tbody><tr><td>Local platform</td><td>CLI + SQLite + local webapp</td><td>repos on this machine</td><td>free</td></tr><tr><td>Cloud service</td><td>same, hosted</td><td>the org’s complete repo set, always-on, CI-wired</td><td>paid</td></tr><tr><td>On-prem / air-gapped</td><td>the service in their infra</td><td>same as cloud, self-run</td><td>enterprise</td></tr></tbody></table>
117
- <p>Same CLI, same schema, same webapp the whole way up.</p>
118
- <div class="sl-heading-wrapper level-h2"><h2 id="the-four-moves">The four moves</h2><a class="sl-anchor-link" href="#the-four-moves"><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 four moves”</span></a></div>
101
+ <div class="sl-heading-wrapper level-h2"><h2 id="what-ships-today-and-what-is-planned">What ships today, and what is planned</h2><a class="sl-anchor-link" href="#what-ships-today-and-what-is-planned"><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 “What ships today, and what is planned”</span></a></div>
102
+ <p>What ships today is the local platform: the CLI, the SQLite index, and the
103
+ local webapp — free, MIT-licensed, running entirely on your machine. A hosted
104
+ service and an on-premises version are planned but do not exist yet; nothing
105
+ on this site describes a product you can buy today.</p>
106
+ <div class="sl-heading-wrapper level-h2"><h2 id="the-working-loop">The working loop</h2><a class="sl-anchor-link" href="#the-working-loop"><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 working loop”</span></a></div>
119
107
  <ul>
120
- <li><strong>Author</strong> — write a requirement before code. Agent drafts, human merges.</li>
108
+ <li><strong>Author</strong> — write a requirement before code. Agent drafts, human approves.</li>
121
109
  <li><strong>Route</strong> — <code dir="auto">spec resolve</code> / <code dir="auto">spec query</code> to load the requirements a task touches.</li>
122
110
  <li><strong>Tag</strong> — add <code dir="auto">@spec KEY-NNN</code> in code as you satisfy a requirement.</li>
123
111
  <li><strong>Check</strong> — <code dir="auto">spec check --ci</code> as a gate.</li>
124
- </ul> </div> <footer class="sl-flex astro-g7gasbrj"> <div class="meta sl-flex astro-g7gasbrj"> <a href="https://github.com/spec-engine/spec-engine/edit/main/packages/site/src/content/docs/overview.mdx" class="sl-flex print:hidden astro-tr6myc4c"><svg aria-hidden="true" class="astro-tr6myc4c astro-kyfdspn7" 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-iud5vnm7" dir="ltr"> <a href="/getting-started/" rel="next" class="astro-iud5vnm7"> <svg aria-hidden="true" class="astro-iud5vnm7 astro-kyfdspn7" 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-iud5vnm7"> Next <br class="astro-iud5vnm7"> <span class="link-title astro-iud5vnm7">Getting Started</span> </span> </a> </div> </footer> </div> </div> </main> </div> </div> </div> </div> </body></html>
112
+ </ul> </div> <footer class="sl-flex astro-5h22m7ac"> <div class="meta sl-flex astro-5h22m7ac"> <a href="https://github.com/spec-engine/spec-engine/edit/main/packages/site/src/content/docs/overview.mdx" class="sl-flex print:hidden astro-txs4wy42"><svg aria-hidden="true" class="astro-txs4wy42 astro-lm5mbbcm" 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-7kn6nbmm" dir="ltr"> <a href="/getting-started/" rel="next" class="astro-7kn6nbmm"> <svg aria-hidden="true" class="astro-7kn6nbmm astro-lm5mbbcm" 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-7kn6nbmm"> Next <br class="astro-7kn6nbmm"> <span class="link-title astro-7kn6nbmm">Getting Started</span> </span> </a> </div> </footer> </div> </div> </main> </div> </div> </div> </div> </body></html>
@@ -1 +1 @@
1
- {"version":"1.5.2","languages":{"en":{"hash":"en_c8da4a195d","wasm":"en","page_count":11}},"include_characters":["_","‿","⁀","⁔","︳","︴","﹍","﹎","﹏","_"]}
1
+ {"version":"1.5.2","languages":{"en":{"hash":"en_f3d65f37ce","wasm":"en","page_count":11}},"include_characters":["_","‿","⁀","⁔","︳","︴","﹍","﹎","﹏","_"]}
Binary file
@@ -1,4 +1,4 @@
1
- <!DOCTYPE html><html lang="en" dir="ltr" data-theme="dark" data-has-toc data-has-sidebar class="astro-hke2hksx"> <head><meta charset="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><title>Tags | Spec Engine</title><link rel="canonical" href="https://docs.spec-engine.dev/tags/"/><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&amp;family=IBM+Plex+Mono:wght@400;500;600&amp;family=IBM+Plex+Sans:wght@400;500;600&amp;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 v6.4.8"/><meta name="generator" content="Starlight v0.40.0"/><meta property="og:title" content="Tags"/><meta property="og:type" content="article"/><meta property="og:url" content="https://docs.spec-engine.dev/tags/"/><meta property="og:locale" content="en"/><meta property="og:description" content="How code binds to requirements with @spec tags"/><meta property="og:site_name" content="Spec Engine"/><meta name="twitter:card" content="summary_large_image"/><meta name="description" content="How code binds to requirements with @spec tags"/><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>
1
+ <!DOCTYPE html><html lang="en" dir="ltr" data-theme="dark" data-has-toc data-has-sidebar class="astro-ioexmpvj"> <head><meta charset="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><title>Tags | Spec Engine</title><link rel="canonical" href="https://docs.spec-engine.dev/tags/"/><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&amp;family=IBM+Plex+Mono:wght@400;500;600&amp;family=IBM+Plex+Sans:wght@400;500;600&amp;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 v6.4.8"/><meta name="generator" content="Starlight v0.40.0"/><meta property="og:title" content="Tags"/><meta property="og:type" content="article"/><meta property="og:url" content="https://docs.spec-engine.dev/tags/"/><meta property="og:locale" content="en"/><meta property="og:description" content="How code binds to requirements with @spec tags"/><meta property="og:site_name" content="Spec Engine"/><meta name="twitter:card" content="summary_large_image"/><meta name="description" content="How code binds to requirements with @spec tags"/><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');
@@ -24,7 +24,7 @@
24
24
  },
25
25
  };
26
26
  })();
27
- </script><template id="theme-icons"><svg aria-hidden="true" class="light astro-kyfdspn7" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M5 12a1 1 0 0 0-1-1H3a1 1 0 0 0 0 2h1a1 1 0 0 0 1-1Zm.64 5-.71.71a1 1 0 0 0 0 1.41 1 1 0 0 0 1.41 0l.71-.71A1 1 0 0 0 5.64 17ZM12 5a1 1 0 0 0 1-1V3a1 1 0 0 0-2 0v1a1 1 0 0 0 1 1Zm5.66 2.34a1 1 0 0 0 .7-.29l.71-.71a1 1 0 1 0-1.41-1.41l-.66.71a1 1 0 0 0 0 1.41 1 1 0 0 0 .66.29Zm-12-.29a1 1 0 0 0 1.41 0 1 1 0 0 0 0-1.41l-.71-.71a1.004 1.004 0 1 0-1.43 1.41l.73.71ZM21 11h-1a1 1 0 0 0 0 2h1a1 1 0 0 0 0-2Zm-2.64 6A1 1 0 0 0 17 18.36l.71.71a1 1 0 0 0 1.41 0 1 1 0 0 0 0-1.41l-.76-.66ZM12 6.5a5.5 5.5 0 1 0 5.5 5.5A5.51 5.51 0 0 0 12 6.5Zm0 9a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7Zm0 3.5a1 1 0 0 0-1 1v1a1 1 0 0 0 2 0v-1a1 1 0 0 0-1-1Z"/></svg><svg aria-hidden="true" class="dark astro-kyfdspn7" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21.64 13a1 1 0 0 0-1.05-.14 8.049 8.049 0 0 1-3.37.73 8.15 8.15 0 0 1-8.14-8.1 8.59 8.59 0 0 1 .25-2A1 1 0 0 0 8 2.36a10.14 10.14 0 1 0 14 11.69 1 1 0 0 0-.36-1.05Zm-9.5 6.69A8.14 8.14 0 0 1 7.08 5.22v.27a10.15 10.15 0 0 0 10.14 10.14 9.784 9.784 0 0 0 2.1-.22 8.11 8.11 0 0 1-7.18 4.32v-.04Z"/></svg><svg aria-hidden="true" class="auto astro-kyfdspn7" 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></template><link rel="stylesheet" href="/_astro/print.DNXP8c50.css" media="print"><link rel="stylesheet" href="/_astro/common.xlUlWolS.css"><link rel="stylesheet" href="/_astro/Code.DfIJP77p.css"><script type="module" src="/_astro/page.B_tncCx8.js"></script></head> <body class="astro-hke2hksx"> <a href="#_top" class="astro-ln4bs55d">Skip to content</a> <div class="page sl-flex astro-4azfgxa5"> <header class="header astro-4azfgxa5"><div class="header astro-huokaw3t"> <div class="title-wrapper sl-flex astro-huokaw3t"> <a href="/" class="site-title sl-flex astro-pf7uwcts"> <img class="light:sl-hidden print:hidden astro-pf7uwcts" alt="Spec Engine" src="/_astro/spec-mark-white.DJBFLLUP.svg" width="512" height="512"> <img class="dark:sl-hidden print:block astro-pf7uwcts" alt="Spec Engine" src="/_astro/spec-mark-black.ZCN22lJi.svg" width="512" height="512"> <span class="astro-pf7uwcts" translate="no"> Spec Engine </span> </a> </div> <div class="sl-flex print:hidden astro-huokaw3t"> <site-search class="astro-huokaw3t astro-6oz6ysne" data-translations="{&quot;placeholder&quot;:&quot;Search&quot;}"> <button data-open-modal disabled aria-label="Search" aria-keyshortcuts="Control+K" class="astro-6oz6ysne"> <svg aria-hidden="true" class="astro-6oz6ysne astro-kyfdspn7" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21.71 20.29 18 16.61A9 9 0 1 0 16.61 18l3.68 3.68a.999.999 0 0 0 1.42 0 1 1 0 0 0 0-1.39ZM11 18a7 7 0 1 1 0-14 7 7 0 0 1 0 14Z"/></svg> <span class="sl-hidden md:sl-block astro-6oz6ysne" aria-hidden="true">Search</span> <kbd class="sl-hidden md:sl-flex astro-6oz6ysne" style="display: none;"> <kbd class="astro-6oz6ysne">Ctrl</kbd><kbd class="astro-6oz6ysne">K</kbd> </kbd> </button> <dialog style="padding:0" aria-label="Search" class="astro-6oz6ysne"> <div class="dialog-frame sl-flex astro-6oz6ysne"> <button data-close-modal class="sl-flex md:sl-hidden astro-6oz6ysne"> Cancel </button> <div class="search-container astro-6oz6ysne"> <div id="starlight__search" class="astro-6oz6ysne"></div> </div> </div> </dialog> </site-search> <script>
27
+ </script><template id="theme-icons"><svg aria-hidden="true" class="light astro-lm5mbbcm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M5 12a1 1 0 0 0-1-1H3a1 1 0 0 0 0 2h1a1 1 0 0 0 1-1Zm.64 5-.71.71a1 1 0 0 0 0 1.41 1 1 0 0 0 1.41 0l.71-.71A1 1 0 0 0 5.64 17ZM12 5a1 1 0 0 0 1-1V3a1 1 0 0 0-2 0v1a1 1 0 0 0 1 1Zm5.66 2.34a1 1 0 0 0 .7-.29l.71-.71a1 1 0 1 0-1.41-1.41l-.66.71a1 1 0 0 0 0 1.41 1 1 0 0 0 .66.29Zm-12-.29a1 1 0 0 0 1.41 0 1 1 0 0 0 0-1.41l-.71-.71a1.004 1.004 0 1 0-1.43 1.41l.73.71ZM21 11h-1a1 1 0 0 0 0 2h1a1 1 0 0 0 0-2Zm-2.64 6A1 1 0 0 0 17 18.36l.71.71a1 1 0 0 0 1.41 0 1 1 0 0 0 0-1.41l-.76-.66ZM12 6.5a5.5 5.5 0 1 0 5.5 5.5A5.51 5.51 0 0 0 12 6.5Zm0 9a3.5 3.5 0 1 1 0-7 3.5 3.5 0 0 1 0 7Zm0 3.5a1 1 0 0 0-1 1v1a1 1 0 0 0 2 0v-1a1 1 0 0 0-1-1Z"/></svg><svg aria-hidden="true" class="dark astro-lm5mbbcm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21.64 13a1 1 0 0 0-1.05-.14 8.049 8.049 0 0 1-3.37.73 8.15 8.15 0 0 1-8.14-8.1 8.59 8.59 0 0 1 .25-2A1 1 0 0 0 8 2.36a10.14 10.14 0 1 0 14 11.69 1 1 0 0 0-.36-1.05Zm-9.5 6.69A8.14 8.14 0 0 1 7.08 5.22v.27a10.15 10.15 0 0 0 10.14 10.14 9.784 9.784 0 0 0 2.1-.22 8.11 8.11 0 0 1-7.18 4.32v-.04Z"/></svg><svg aria-hidden="true" class="auto astro-lm5mbbcm" 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></template><link rel="stylesheet" href="/_astro/print.DNXP8c50.css" media="print"><link rel="stylesheet" href="/_astro/common.DslAiFsT.css"><link rel="stylesheet" href="/_astro/Code.CAimF0uL.css"><script type="module" src="/_astro/page.B_tncCx8.js"></script></head> <body class="astro-ioexmpvj"> <a href="#_top" class="astro-exkej44h">Skip to content</a> <div class="page sl-flex astro-to3xypmc"> <header class="header astro-to3xypmc"><div class="header astro-shhymrmb"> <div class="title-wrapper sl-flex astro-shhymrmb"> <a href="/" class="site-title sl-flex astro-6qdjqr3f"> <img class="light:sl-hidden print:hidden astro-6qdjqr3f" alt="Spec Engine" src="/_astro/spec-mark-white.DJBFLLUP.svg" width="512" height="512"> <img class="dark:sl-hidden print:block astro-6qdjqr3f" alt="Spec Engine" src="/_astro/spec-mark-black.ZCN22lJi.svg" width="512" height="512"> <span class="astro-6qdjqr3f" translate="no"> Spec Engine </span> </a> </div> <div class="sl-flex print:hidden astro-shhymrmb"> <site-search class="astro-shhymrmb astro-7vagb36t" data-translations="{&quot;placeholder&quot;:&quot;Search&quot;}"> <button data-open-modal disabled aria-label="Search" aria-keyshortcuts="Control+K" class="astro-7vagb36t"> <svg aria-hidden="true" class="astro-7vagb36t astro-lm5mbbcm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M21.71 20.29 18 16.61A9 9 0 1 0 16.61 18l3.68 3.68a.999.999 0 0 0 1.42 0 1 1 0 0 0 0-1.39ZM11 18a7 7 0 1 1 0-14 7 7 0 0 1 0 14Z"/></svg> <span class="sl-hidden md:sl-block astro-7vagb36t" aria-hidden="true">Search</span> <kbd class="sl-hidden md:sl-flex astro-7vagb36t" style="display: none;"> <kbd class="astro-7vagb36t">Ctrl</kbd><kbd class="astro-7vagb36t">K</kbd> </kbd> </button> <dialog style="padding:0" aria-label="Search" class="astro-7vagb36t"> <div class="dialog-frame sl-flex astro-7vagb36t"> <button data-close-modal class="sl-flex md:sl-hidden astro-7vagb36t"> Cancel </button> <div class="search-container astro-7vagb36t"> <div id="starlight__search" class="astro-7vagb36t"></div> </div> </div> </dialog> </site-search> <script>
28
28
  (() => {
29
29
  const openBtn = document.querySelector('button[data-open-modal]');
30
30
  const shortcut = openBtn?.querySelector('kbd');
@@ -36,9 +36,9 @@
36
36
  }
37
37
  shortcut.style.display = '';
38
38
  })();
39
- </script> <script type="module" src="/_astro/Search.astro_astro_type_script_index_0_lang.lq3t8uE2.js"></script> </div> <div class="sl-hidden md:sl-flex print:hidden right-group astro-huokaw3t"> <div class="sl-flex social-icons astro-huokaw3t"> <a href="https://github.com/spec-engine/spec-engine" rel="me" class="sl-flex astro-7c53pyad"><span class="sr-only astro-7c53pyad">GitHub</span><svg aria-hidden="true" class="astro-7c53pyad astro-kyfdspn7" 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-xrbm3f6n"> <span class="sr-only astro-xrbm3f6n">Select theme</span> <svg aria-hidden="true" class="icon label-icon astro-xrbm3f6n astro-kyfdspn7" 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-xrbm3f6n"> <option value="dark" class="astro-xrbm3f6n">Dark</option><option value="light" class="astro-xrbm3f6n">Light</option><option value="auto" selected class="astro-xrbm3f6n">Auto</option> </select> <svg aria-hidden="true" class="icon caret astro-xrbm3f6n astro-kyfdspn7" 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>
39
+ </script> <script type="module" src="/_astro/Search.astro_astro_type_script_index_0_lang.lq3t8uE2.js"></script> </div> <div class="sl-hidden md:sl-flex print:hidden right-group astro-shhymrmb"> <div class="sl-flex social-icons astro-shhymrmb"> <a href="https://github.com/spec-engine/spec-engine" rel="me" class="sl-flex astro-opyhioab"><span class="sr-only astro-opyhioab">GitHub</span><svg aria-hidden="true" class="astro-opyhioab astro-lm5mbbcm" 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-oxpvutiw"> <span class="sr-only astro-oxpvutiw">Select theme</span> <svg aria-hidden="true" class="icon label-icon astro-oxpvutiw astro-lm5mbbcm" 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-oxpvutiw"> <option value="dark" class="astro-oxpvutiw">Dark</option><option value="light" class="astro-oxpvutiw">Light</option><option value="auto" selected class="astro-oxpvutiw">Auto</option> </select> <svg aria-hidden="true" class="icon caret astro-oxpvutiw astro-lm5mbbcm" 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>
40
40
  StarlightThemeProvider.updatePickers();
41
- </script> <script type="module">const r="starlight-theme",o=e=>e==="auto"||e==="dark"||e==="light"?e:"auto",c=()=>o(typeof localStorage<"u"&&localStorage.getItem(r));function n(e){typeof localStorage<"u"&&localStorage.setItem(r,e==="light"||e==="dark"?e:"")}const l=()=>matchMedia("(prefers-color-scheme: light)").matches?"light":"dark";function t(e){StarlightThemeProvider.updatePickers(e),document.documentElement.dataset.theme=e==="auto"?l():e,n(e)}matchMedia("(prefers-color-scheme: light)").addEventListener("change",()=>{c()==="auto"&&t("auto")});class s extends HTMLElement{constructor(){super(),t(c()),this.querySelector("select")?.addEventListener("change",a=>{a.currentTarget instanceof HTMLSelectElement&&t(o(a.currentTarget.value))})}}customElements.define("starlight-theme-select",s);</script> <script type="module">class s extends HTMLElement{constructor(){super();const e=this.querySelector("select");e&&(e.addEventListener("change",t=>{t.currentTarget instanceof HTMLSelectElement&&(window.location.pathname=t.currentTarget.value)}),window.addEventListener("pageshow",t=>{if(!t.persisted)return;const n=e.querySelector("option[selected]")?.index;n!==e.selectedIndex&&(e.selectedIndex=n??0)}))}}customElements.define("starlight-lang-select",s);</script> </div> </div></header> <nav class="sidebar print:hidden astro-4azfgxa5" aria-label="Main"> <starlight-menu-button class="print:hidden astro-5hpi47kq"> <button aria-expanded="false" aria-label="Menu" aria-controls="starlight__sidebar" class="sl-flex md:sl-hidden astro-5hpi47kq"> <svg aria-hidden="true" class="open-menu astro-5hpi47kq astro-kyfdspn7" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M3 8h18a1 1 0 1 0 0-2H3a1 1 0 0 0 0 2Zm18 8H3a1 1 0 0 0 0 2h18a1 1 0 0 0 0-2Zm0-5H3a1 1 0 0 0 0 2h18a1 1 0 0 0 0-2Z"/></svg> <svg aria-hidden="true" class="close-menu astro-5hpi47kq astro-kyfdspn7" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="m13.41 12 6.3-6.29a1.004 1.004 0 1 0-1.42-1.42L12 10.59l-6.29-6.3a1.004 1.004 0 0 0-1.42 1.42l6.3 6.29-6.3 6.29a1 1 0 0 0 0 1.42.998.998 0 0 0 1.42 0l6.29-6.3 6.29 6.3a.999.999 0 0 0 1.42 0 1 1 0 0 0 0-1.42L13.41 12Z"/></svg> </button> </starlight-menu-button> <script type="module">class s extends HTMLElement{constructor(){super(),this.btn=this.querySelector("button"),this.btn.addEventListener("click",()=>this.toggleExpanded());const t=this.closest("nav");t&&t.addEventListener("keyup",e=>this.closeOnEscape(e))}setExpanded(t){this.setAttribute("aria-expanded",String(t)),document.body.toggleAttribute("data-mobile-menu-expanded",t)}toggleExpanded(){this.setExpanded(this.getAttribute("aria-expanded")!=="true")}closeOnEscape(t){t.code==="Escape"&&(this.setExpanded(!1),this.btn.focus())}}customElements.define("starlight-menu-button",s);</script> <div id="starlight__sidebar" class="sidebar-pane astro-4azfgxa5"> <div class="sidebar-content sl-flex astro-4azfgxa5"> <sl-sidebar-state-persist data-hash="0fmmri7" class="astro-buzsinug"> <script aria-hidden="true">
41
+ </script> <script type="module">const r="starlight-theme",o=e=>e==="auto"||e==="dark"||e==="light"?e:"auto",c=()=>o(typeof localStorage<"u"&&localStorage.getItem(r));function n(e){typeof localStorage<"u"&&localStorage.setItem(r,e==="light"||e==="dark"?e:"")}const l=()=>matchMedia("(prefers-color-scheme: light)").matches?"light":"dark";function t(e){StarlightThemeProvider.updatePickers(e),document.documentElement.dataset.theme=e==="auto"?l():e,n(e)}matchMedia("(prefers-color-scheme: light)").addEventListener("change",()=>{c()==="auto"&&t("auto")});class s extends HTMLElement{constructor(){super(),t(c()),this.querySelector("select")?.addEventListener("change",a=>{a.currentTarget instanceof HTMLSelectElement&&t(o(a.currentTarget.value))})}}customElements.define("starlight-theme-select",s);</script> <script type="module">class s extends HTMLElement{constructor(){super();const e=this.querySelector("select");e&&(e.addEventListener("change",t=>{t.currentTarget instanceof HTMLSelectElement&&(window.location.pathname=t.currentTarget.value)}),window.addEventListener("pageshow",t=>{if(!t.persisted)return;const n=e.querySelector("option[selected]")?.index;n!==e.selectedIndex&&(e.selectedIndex=n??0)}))}}customElements.define("starlight-lang-select",s);</script> </div> </div></header> <nav class="sidebar print:hidden astro-to3xypmc" aria-label="Main"> <starlight-menu-button class="print:hidden astro-l43anhaf"> <button aria-expanded="false" aria-label="Menu" aria-controls="starlight__sidebar" class="sl-flex md:sl-hidden astro-l43anhaf"> <svg aria-hidden="true" class="open-menu astro-l43anhaf astro-lm5mbbcm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="M3 8h18a1 1 0 1 0 0-2H3a1 1 0 0 0 0 2Zm18 8H3a1 1 0 0 0 0 2h18a1 1 0 0 0 0-2Zm0-5H3a1 1 0 0 0 0 2h18a1 1 0 0 0 0-2Z"/></svg> <svg aria-hidden="true" class="close-menu astro-l43anhaf astro-lm5mbbcm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1em;"><path d="m13.41 12 6.3-6.29a1.004 1.004 0 1 0-1.42-1.42L12 10.59l-6.29-6.3a1.004 1.004 0 0 0-1.42 1.42l6.3 6.29-6.3 6.29a1 1 0 0 0 0 1.42.998.998 0 0 0 1.42 0l6.29-6.3 6.29 6.3a.999.999 0 0 0 1.42 0 1 1 0 0 0 0-1.42L13.41 12Z"/></svg> </button> </starlight-menu-button> <script type="module">class s extends HTMLElement{constructor(){super(),this.btn=this.querySelector("button"),this.btn.addEventListener("click",()=>this.toggleExpanded());const t=this.closest("nav");t&&t.addEventListener("keyup",e=>this.closeOnEscape(e))}setExpanded(t){this.setAttribute("aria-expanded",String(t)),document.body.toggleAttribute("data-mobile-menu-expanded",t)}toggleExpanded(){this.setExpanded(this.getAttribute("aria-expanded")!=="true")}closeOnEscape(t){t.code==="Escape"&&(this.setExpanded(!1),this.btn.focus())}}customElements.define("starlight-menu-button",s);</script> <div id="starlight__sidebar" class="sidebar-pane astro-to3xypmc"> <div class="sidebar-content sl-flex astro-to3xypmc"> <sl-sidebar-state-persist data-hash="0fmmri7" class="astro-znqwvy6e"> <script aria-hidden="true">
42
42
  (() => {
43
43
  try {
44
44
  if (!matchMedia('(min-width: 50em)').matches) return;
@@ -61,16 +61,16 @@
61
61
  );
62
62
  } catch {}
63
63
  })();
64
- </script> <ul class="top-level astro-ftvsh3ht"> <li class="astro-ftvsh3ht"> <a href="/overview/" class="large astro-ftvsh3ht"> <span class="astro-ftvsh3ht">Overview</span> </a> </li><li class="astro-ftvsh3ht"> <a href="/getting-started/" class="large astro-ftvsh3ht"> <span class="astro-ftvsh3ht">Getting Started</span> </a> </li><li class="astro-ftvsh3ht"> <a href="/architecture/" class="large astro-ftvsh3ht"> <span class="astro-ftvsh3ht">Architecture</span> </a> </li><li class="astro-ftvsh3ht"> <a href="/commands/" class="large astro-ftvsh3ht"> <span class="astro-ftvsh3ht">Commands</span> </a> </li><li class="astro-ftvsh3ht"> <a href="/format/" class="large astro-ftvsh3ht"> <span class="astro-ftvsh3ht">SPEC.json Format</span> </a> </li><li class="astro-ftvsh3ht"> <a href="/tags/" aria-current="page" class="large astro-ftvsh3ht"> <span class="astro-ftvsh3ht">Tags</span> </a> </li><li class="astro-ftvsh3ht"> <a href="/checks/" class="large astro-ftvsh3ht"> <span class="astro-ftvsh3ht">Integrity Checks</span> </a> </li><li class="astro-ftvsh3ht"> <details open class="astro-ftvsh3ht"> <summary class="astro-ftvsh3ht"> <span class="group-label astro-ftvsh3ht"> <span class="large astro-ftvsh3ht">Guides</span> </span> <svg aria-hidden="true" class="caret astro-ftvsh3ht astro-kyfdspn7" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><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> </summary> <sl-sidebar-restore data-index="0"></sl-sidebar-restore> <ul class="astro-ftvsh3ht"> <li class="astro-ftvsh3ht"> <a href="/guides/adoption/" class="astro-ftvsh3ht"> <span class="astro-ftvsh3ht">Adoption Guide</span> </a> </li><li class="astro-ftvsh3ht"> <a href="/guides/platform-setup/" class="astro-ftvsh3ht"> <span class="astro-ftvsh3ht">Platform Setup</span> </a> </li><li class="astro-ftvsh3ht"> <a href="/guides/single-repo/" class="astro-ftvsh3ht"> <span class="astro-ftvsh3ht">Single Repo (Rung 1)</span> </a> </li> </ul> </details> </li><li class="astro-ftvsh3ht"> <a href="/agent-reference/" class="large astro-ftvsh3ht"> <span class="astro-ftvsh3ht">Agent Reference</span> </a> </li> </ul> <script aria-hidden="true">
64
+ </script> <ul class="top-level astro-ux7joveq"> <li class="astro-ux7joveq"> <a href="/overview/" class="large astro-ux7joveq"> <span class="astro-ux7joveq">Overview</span> </a> </li><li class="astro-ux7joveq"> <a href="/getting-started/" class="large astro-ux7joveq"> <span class="astro-ux7joveq">Getting Started</span> </a> </li><li class="astro-ux7joveq"> <a href="/architecture/" class="large astro-ux7joveq"> <span class="astro-ux7joveq">Architecture</span> </a> </li><li class="astro-ux7joveq"> <a href="/commands/" class="large astro-ux7joveq"> <span class="astro-ux7joveq">Commands</span> </a> </li><li class="astro-ux7joveq"> <a href="/format/" class="large astro-ux7joveq"> <span class="astro-ux7joveq">SPEC.json Format</span> </a> </li><li class="astro-ux7joveq"> <a href="/tags/" aria-current="page" class="large astro-ux7joveq"> <span class="astro-ux7joveq">Tags</span> </a> </li><li class="astro-ux7joveq"> <a href="/checks/" class="large astro-ux7joveq"> <span class="astro-ux7joveq">Integrity Checks</span> </a> </li><li class="astro-ux7joveq"> <details open class="astro-ux7joveq"> <summary class="astro-ux7joveq"> <span class="group-label astro-ux7joveq"> <span class="large astro-ux7joveq">Guides</span> </span> <svg aria-hidden="true" class="caret astro-ux7joveq astro-lm5mbbcm" width="16" height="16" viewBox="0 0 24 24" fill="currentColor" style="--sl-icon-size: 1.25rem;"><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> </summary> <sl-sidebar-restore data-index="0"></sl-sidebar-restore> <ul class="astro-ux7joveq"> <li class="astro-ux7joveq"> <a href="/guides/adoption/" class="astro-ux7joveq"> <span class="astro-ux7joveq">Adoption Guide</span> </a> </li><li class="astro-ux7joveq"> <a href="/guides/platform-setup/" class="astro-ux7joveq"> <span class="astro-ux7joveq">Platform Setup</span> </a> </li><li class="astro-ux7joveq"> <a href="/guides/single-repo/" class="astro-ux7joveq"> <span class="astro-ux7joveq">Single Repo (Rung 1)</span> </a> </li> </ul> </details> </li><li class="astro-ux7joveq"> <a href="/agent-reference/" class="large astro-ux7joveq"> <span class="astro-ux7joveq">Agent Reference</span> </a> </li> </ul> <script aria-hidden="true">
65
65
  (() => {
66
66
  const scroller = document.getElementById('starlight__sidebar');
67
67
  if (!window._starlightScrollRestore || !scroller) return;
68
68
  scroller.scrollTop = window._starlightScrollRestore;
69
69
  delete window._starlightScrollRestore;
70
70
  })();
71
- </script> </sl-sidebar-state-persist> <div class="md:sl-hidden"> <div class="mobile-preferences sl-flex astro-q2jvmmon"> <div class="social-icons astro-q2jvmmon"> <a href="https://github.com/spec-engine/spec-engine" rel="me" class="sl-flex astro-7c53pyad"><span class="sr-only astro-7c53pyad">GitHub</span><svg aria-hidden="true" class="astro-7c53pyad astro-kyfdspn7" 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-xrbm3f6n"> <span class="sr-only astro-xrbm3f6n">Select theme</span> <svg aria-hidden="true" class="icon label-icon astro-xrbm3f6n astro-kyfdspn7" 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-xrbm3f6n"> <option value="dark" class="astro-xrbm3f6n">Dark</option><option value="light" class="astro-xrbm3f6n">Light</option><option value="auto" selected class="astro-xrbm3f6n">Auto</option> </select> <svg aria-hidden="true" class="icon caret astro-xrbm3f6n astro-kyfdspn7" 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>
71
+ </script> </sl-sidebar-state-persist> <div class="md:sl-hidden"> <div class="mobile-preferences sl-flex astro-2lx56rho"> <div class="social-icons astro-2lx56rho"> <a href="https://github.com/spec-engine/spec-engine" rel="me" class="sl-flex astro-opyhioab"><span class="sr-only astro-opyhioab">GitHub</span><svg aria-hidden="true" class="astro-opyhioab astro-lm5mbbcm" 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-oxpvutiw"> <span class="sr-only astro-oxpvutiw">Select theme</span> <svg aria-hidden="true" class="icon label-icon astro-oxpvutiw astro-lm5mbbcm" 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-oxpvutiw"> <option value="dark" class="astro-oxpvutiw">Dark</option><option value="light" class="astro-oxpvutiw">Light</option><option value="auto" selected class="astro-oxpvutiw">Auto</option> </select> <svg aria-hidden="true" class="icon caret astro-oxpvutiw astro-lm5mbbcm" 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-4azfgxa5"> <script type="module">const a=document.getElementById("starlight__sidebar"),n=a?.querySelector("sl-sidebar-state-persist"),o="sl-sidebar-state",i=()=>{let t=[];const e=n?.dataset.hash||"";try{const s=sessionStorage.getItem(o),r=JSON.parse(s||"{}");Array.isArray(r.open)&&r.hash===e&&(t=r.open)}catch{}return{hash:e,open:t,scroll:a?.scrollTop||0}},c=t=>{try{sessionStorage.setItem(o,JSON.stringify(t))}catch{}},d=()=>c(i()),l=(t,e)=>{const s=i();s.open[e]=t,c(s)};n?.addEventListener("click",t=>{if(!(t.target instanceof Element))return;const e=t.target.closest("summary")?.closest("details");if(!e)return;const s=e.querySelector("sl-sidebar-restore"),r=parseInt(s?.dataset.index||"");isNaN(r)||l(!e.open,r)});addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&d()});addEventListener("pageHide",d);</script> <div class="lg:sl-flex astro-7dbgj2gg"> <aside class="right-sidebar-container print:hidden astro-7dbgj2gg"> <div class="right-sidebar astro-7dbgj2gg"> <div class="lg:sl-hidden astro-ungkjbep"><mobile-starlight-toc data-min-h="2" data-max-h="3" class="astro-qoe4sryv"><nav aria-labelledby="starlight__on-this-page--mobile" class="astro-qoe4sryv"><details id="starlight__mobile-toc" class="astro-qoe4sryv"><summary id="starlight__on-this-page--mobile" class="sl-flex astro-qoe4sryv"><span class="toggle sl-flex astro-qoe4sryv">On this page<svg aria-hidden="true" class="caret astro-qoe4sryv astro-kyfdspn7" 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-qoe4sryv"></span></summary><div class="dropdown astro-qoe4sryv"><ul class="isMobile astro-mc3l7tuo" style="--depth: 0;"> <li class="astro-mc3l7tuo" style="--depth: 0;"> <a href="#_top" class="astro-mc3l7tuo" style="--depth: 0;"> <span class="astro-mc3l7tuo" style="--depth: 0;">Overview</span> </a> </li><li class="astro-mc3l7tuo" style="--depth: 0;"> <a href="#tag-kind" class="astro-mc3l7tuo" style="--depth: 0;"> <span class="astro-mc3l7tuo" style="--depth: 0;">Tag kind</span> </a> </li><li class="astro-mc3l7tuo" style="--depth: 0;"> <a href="#verification-levels" class="astro-mc3l7tuo" style="--depth: 0;"> <span class="astro-mc3l7tuo" style="--depth: 0;">Verification levels</span> </a> </li><li class="astro-mc3l7tuo" style="--depth: 0;"> <a href="#coverage" class="astro-mc3l7tuo" style="--depth: 0;"> <span class="astro-mc3l7tuo" style="--depth: 0;">Coverage</span> </a> </li><li class="astro-mc3l7tuo" style="--depth: 0;"> <a href="#tag-scanner-notes" class="astro-mc3l7tuo" style="--depth: 0;"> <span class="astro-mc3l7tuo" style="--depth: 0;">Tag scanner notes</span> </a> </li> </ul></div></details></nav></mobile-starlight-toc><script type="module" src="/_astro/MobileTableOfContents.astro_astro_type_script_index_0_lang.hwBsy0Mo.js"></script></div><div class="right-sidebar-panel sl-hidden lg:sl-block astro-ungkjbep"><div class="sl-container astro-ungkjbep"><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-mc3l7tuo" style="--depth: 0;"> <li class="astro-mc3l7tuo" style="--depth: 0;"> <a href="#_top" class="astro-mc3l7tuo" style="--depth: 0;"> <span class="astro-mc3l7tuo" style="--depth: 0;">Overview</span> </a> </li><li class="astro-mc3l7tuo" style="--depth: 0;"> <a href="#tag-kind" class="astro-mc3l7tuo" style="--depth: 0;"> <span class="astro-mc3l7tuo" style="--depth: 0;">Tag kind</span> </a> </li><li class="astro-mc3l7tuo" style="--depth: 0;"> <a href="#verification-levels" class="astro-mc3l7tuo" style="--depth: 0;"> <span class="astro-mc3l7tuo" style="--depth: 0;">Verification levels</span> </a> </li><li class="astro-mc3l7tuo" style="--depth: 0;"> <a href="#coverage" class="astro-mc3l7tuo" style="--depth: 0;"> <span class="astro-mc3l7tuo" style="--depth: 0;">Coverage</span> </a> </li><li class="astro-mc3l7tuo" style="--depth: 0;"> <a href="#tag-scanner-notes" class="astro-mc3l7tuo" style="--depth: 0;"> <span class="astro-mc3l7tuo" style="--depth: 0;">Tag scanner notes</span> </a> </li> </ul></nav></starlight-toc><script type="module" src="/_astro/TableOfContents.astro_astro_type_script_index_0_lang.FuRcXuRY.js"></script></div></div> </div> </aside> <div class="main-pane astro-7dbgj2gg"> <main data-pagefind-body class="astro-hke2hksx" lang="en" dir="ltr"> <div class="content-panel astro-cwqdebiv"> <div class="sl-container astro-cwqdebiv"> <h1 id="_top" class="astro-jkmikw3m">Tags</h1> </div> </div> <div class="content-panel astro-cwqdebiv"> <div class="sl-container astro-cwqdebiv"> <div class="sl-markdown-content"> <p>A tag in implementation code <strong>implements</strong> a requirement; a tag in a test file <strong>verifies</strong> it, optionally at a level.</p>
73
+ </script> </div> </div> </div> </div> </nav> <div class="main-frame astro-to3xypmc"> <script type="module">const a=document.getElementById("starlight__sidebar"),n=a?.querySelector("sl-sidebar-state-persist"),o="sl-sidebar-state",i=()=>{let t=[];const e=n?.dataset.hash||"";try{const s=sessionStorage.getItem(o),r=JSON.parse(s||"{}");Array.isArray(r.open)&&r.hash===e&&(t=r.open)}catch{}return{hash:e,open:t,scroll:a?.scrollTop||0}},c=t=>{try{sessionStorage.setItem(o,JSON.stringify(t))}catch{}},d=()=>c(i()),l=(t,e)=>{const s=i();s.open[e]=t,c(s)};n?.addEventListener("click",t=>{if(!(t.target instanceof Element))return;const e=t.target.closest("summary")?.closest("details");if(!e)return;const s=e.querySelector("sl-sidebar-restore"),r=parseInt(s?.dataset.index||"");isNaN(r)||l(!e.open,r)});addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&d()});addEventListener("pageHide",d);</script> <div class="lg:sl-flex astro-blhl7r6q"> <aside class="right-sidebar-container print:hidden astro-blhl7r6q"> <div class="right-sidebar astro-blhl7r6q"> <div class="lg:sl-hidden astro-l5m3cfel"><mobile-starlight-toc data-min-h="2" data-max-h="3" class="astro-goxitxj7"><nav aria-labelledby="starlight__on-this-page--mobile" class="astro-goxitxj7"><details id="starlight__mobile-toc" class="astro-goxitxj7"><summary id="starlight__on-this-page--mobile" class="sl-flex astro-goxitxj7"><span class="toggle sl-flex astro-goxitxj7">On this page<svg aria-hidden="true" class="caret astro-goxitxj7 astro-lm5mbbcm" 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-goxitxj7"></span></summary><div class="dropdown astro-goxitxj7"><ul class="isMobile astro-xz67lhkg" style="--depth: 0;"> <li class="astro-xz67lhkg" style="--depth: 0;"> <a href="#_top" class="astro-xz67lhkg" style="--depth: 0;"> <span class="astro-xz67lhkg" style="--depth: 0;">Overview</span> </a> </li><li class="astro-xz67lhkg" style="--depth: 0;"> <a href="#tag-kind" class="astro-xz67lhkg" style="--depth: 0;"> <span class="astro-xz67lhkg" style="--depth: 0;">Tag kind</span> </a> </li><li class="astro-xz67lhkg" style="--depth: 0;"> <a href="#verification-levels" class="astro-xz67lhkg" style="--depth: 0;"> <span class="astro-xz67lhkg" style="--depth: 0;">Verification levels</span> </a> </li><li class="astro-xz67lhkg" style="--depth: 0;"> <a href="#coverage" class="astro-xz67lhkg" style="--depth: 0;"> <span class="astro-xz67lhkg" style="--depth: 0;">Coverage</span> </a> </li><li class="astro-xz67lhkg" style="--depth: 0;"> <a href="#tag-scanner-notes" class="astro-xz67lhkg" style="--depth: 0;"> <span class="astro-xz67lhkg" style="--depth: 0;">Tag scanner notes</span> </a> </li> </ul></div></details></nav></mobile-starlight-toc><script type="module" src="/_astro/MobileTableOfContents.astro_astro_type_script_index_0_lang.hwBsy0Mo.js"></script></div><div class="right-sidebar-panel sl-hidden lg:sl-block astro-l5m3cfel"><div class="sl-container astro-l5m3cfel"><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-xz67lhkg" style="--depth: 0;"> <li class="astro-xz67lhkg" style="--depth: 0;"> <a href="#_top" class="astro-xz67lhkg" style="--depth: 0;"> <span class="astro-xz67lhkg" style="--depth: 0;">Overview</span> </a> </li><li class="astro-xz67lhkg" style="--depth: 0;"> <a href="#tag-kind" class="astro-xz67lhkg" style="--depth: 0;"> <span class="astro-xz67lhkg" style="--depth: 0;">Tag kind</span> </a> </li><li class="astro-xz67lhkg" style="--depth: 0;"> <a href="#verification-levels" class="astro-xz67lhkg" style="--depth: 0;"> <span class="astro-xz67lhkg" style="--depth: 0;">Verification levels</span> </a> </li><li class="astro-xz67lhkg" style="--depth: 0;"> <a href="#coverage" class="astro-xz67lhkg" style="--depth: 0;"> <span class="astro-xz67lhkg" style="--depth: 0;">Coverage</span> </a> </li><li class="astro-xz67lhkg" style="--depth: 0;"> <a href="#tag-scanner-notes" class="astro-xz67lhkg" style="--depth: 0;"> <span class="astro-xz67lhkg" style="--depth: 0;">Tag scanner notes</span> </a> </li> </ul></nav></starlight-toc><script type="module" src="/_astro/TableOfContents.astro_astro_type_script_index_0_lang.FuRcXuRY.js"></script></div></div> </div> </aside> <div class="main-pane astro-blhl7r6q"> <main data-pagefind-body class="astro-ioexmpvj" lang="en" dir="ltr"> <div class="content-panel astro-sfndtt72"> <div class="sl-container astro-sfndtt72"> <h1 id="_top" class="astro-4b4mtvou">Tags</h1> </div> </div> <div class="content-panel astro-sfndtt72"> <div class="sl-container astro-sfndtt72"> <div class="sl-markdown-content"> <p>A tag in implementation code <strong>implements</strong> a requirement; a tag in a test file <strong>verifies</strong> it, optionally at a level.</p>
74
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="ts"><code><div class="ec-line"><div class="code"><span style="--0:#C792EA;--1:#8844AE">export</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#C792EA;--1:#8844AE">function</span><span style="--0:#D6DEEB;--1:#403F53"> </span><span style="--0:#82AAFF;--1:#3B61B0">renew</span><span style="--0:#D9F5DD;--1:#111111">()</span><span style="--0:#D6DEEB;--1:#403F53"> { </span><span style="--0:#919F9F;--1:#5F636F">/* ... */</span><span style="--0:#D6DEEB;--1:#403F53"> } </span><span style="--0:#919F9F;--1:#5D6376">// @spec BILLING-009</span></div></div><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">it</span><span style="--0:#D6DEEB;--1:#403F53">(</span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#ECC48D;--1:#984E4D">charges at current price</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:#D6DEEB;--1:#403F53"> </span><span style="--0:#C792EA;--1:#8844AE">=></span><span style="--0:#D6DEEB;--1:#403F53"> {}) </span><span style="--0:#919F9F;--1:#5D6376">// @spec BILLING-009 unit</span></div></div><div class="ec-line"><div class="code"><span style="--0:#82AAFF;--1:#3B61B0">it</span><span style="--0:#D6DEEB;--1:#403F53">(</span><span style="--0:#D9F5DD;--1:#111111">"</span><span style="--0:#ECC48D;--1:#984E4D">renews end to end</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:#D6DEEB;--1:#403F53"> </span><span style="--0:#C792EA;--1:#8844AE">=></span><span style="--0:#D6DEEB;--1:#403F53"> {}) </span><span style="--0:#919F9F;--1:#5D6376">// @spec BILLING-009 e2e</span></div></div></code></pre><div class="copy"><div aria-live="polite"></div><button title="Copy to clipboard" data-copied="Copied!" data-code="export function renew() { /* ... */ } // @spec BILLING-009it(&#x22;charges at current price&#x22;, () => {}) // @spec BILLING-009 unitit(&#x22;renews end to end&#x22;, () => {}) // @spec BILLING-009 e2e"><div></div></button></div></figure></div>
75
75
  <div class="sl-heading-wrapper level-h2"><h2 id="tag-kind">Tag kind</h2><a class="sl-anchor-link" href="#tag-kind"><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 “Tag kind”</span></a></div>
76
76
  <p>Kind is <strong>path-derived</strong>, never authored:</p>
@@ -109,4 +109,4 @@
109
109
  <ul>
110
110
  <li><code dir="auto">fixtures/</code> directories are globally ignored — tags under any <code dir="auto">fixtures/</code> folder never index</li>
111
111
  <li>Test files that compose tag strings at runtime should not contain literal <code dir="auto">@spec</code> tags</li>
112
- </ul> </div> <footer class="sl-flex astro-g7gasbrj"> <div class="meta sl-flex astro-g7gasbrj"> <a href="https://github.com/spec-engine/spec-engine/edit/main/packages/site/src/content/docs/tags.md" class="sl-flex print:hidden astro-tr6myc4c"><svg aria-hidden="true" class="astro-tr6myc4c astro-kyfdspn7" 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-iud5vnm7" dir="ltr"> <a href="/format/" rel="prev" class="astro-iud5vnm7"> <svg aria-hidden="true" class="astro-iud5vnm7 astro-kyfdspn7" 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-iud5vnm7"> Previous <br class="astro-iud5vnm7"> <span class="link-title astro-iud5vnm7">SPEC.json Format</span> </span> </a> <a href="/checks/" rel="next" class="astro-iud5vnm7"> <svg aria-hidden="true" class="astro-iud5vnm7 astro-kyfdspn7" 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-iud5vnm7"> Next <br class="astro-iud5vnm7"> <span class="link-title astro-iud5vnm7">Integrity Checks</span> </span> </a> </div> </footer> </div> </div> </main> </div> </div> </div> </div> </body></html>
112
+ </ul> </div> <footer class="sl-flex astro-5h22m7ac"> <div class="meta sl-flex astro-5h22m7ac"> <a href="https://github.com/spec-engine/spec-engine/edit/main/packages/site/src/content/docs/tags.md" class="sl-flex print:hidden astro-txs4wy42"><svg aria-hidden="true" class="astro-txs4wy42 astro-lm5mbbcm" 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-7kn6nbmm" dir="ltr"> <a href="/format/" rel="prev" class="astro-7kn6nbmm"> <svg aria-hidden="true" class="astro-7kn6nbmm astro-lm5mbbcm" 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-7kn6nbmm"> Previous <br class="astro-7kn6nbmm"> <span class="link-title astro-7kn6nbmm">SPEC.json Format</span> </span> </a> <a href="/checks/" rel="next" class="astro-7kn6nbmm"> <svg aria-hidden="true" class="astro-7kn6nbmm astro-lm5mbbcm" 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-7kn6nbmm"> Next <br class="astro-7kn6nbmm"> <span class="link-title astro-7kn6nbmm">Integrity Checks</span> </span> </a> </div> </footer> </div> </div> </main> </div> </div> </div> </div> </body></html>