{"_id":"@ct-builders/commercetools-spec-templates","_rev":"8-1fb5c94d1f55b9b98e2fe67af0c69140","name":"@ct-builders/commercetools-spec-templates","dist-tags":{"latest":"0.10.0"},"versions":{"0.1.0":{"name":"@ct-builders/commercetools-spec-templates","version":"0.1.0","keywords":["commercetools","spec-driven-development","spec-kit","openspec","verticals"],"author":{"name":"commercetools"},"license":"MIT","_id":"@ct-builders/commercetools-spec-templates@0.1.0","maintainers":[{"name":"behnam777","email":"behnam777@gmail.com"}],"homepage":"https://github.com/ct-builders/commercetools-spec-templates#readme","bugs":{"url":"https://github.com/ct-builders/commercetools-spec-templates/issues"},"bin":{"cts":"bin/cts.mjs"},"dist":{"shasum":"989c2bf3ffda78433e416b952522c5bcefd77f83","tarball":"https://registry.npmjs.org/@ct-builders/commercetools-spec-templates/-/commercetools-spec-templates-0.1.0.tgz","fileCount":1019,"integrity":"sha512-qw2SHJEmHWFntnPqXgRuYBJRlhmo+tK/DyHn3cMeELW1hEze3r7XMF8gpSTqgiaeMm7qKwS/aFqF3dtGDXnJdg==","signatures":[{"sig":"MEQCIA+D98f7HGzcmY6tb40TzaE17UeSKqgTOUfknXelQOAcAiBVPNQrDtmtnSgSPDGKZAtXWKs8VmUUcRDZa/JeCRofGg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5067541},"type":"module","engines":{"node":">=20.19"},"gitHead":"ee2b3a536ecf72416cb224c1a6e8d1fd12619307","scripts":{"lint":"node bin/ctsx.mjs lint --strict","test":"node --test test/*.test.mjs","build":"node bin/ctsx.mjs build"},"_npmUser":{"name":"behnam777","email":"behnam777@gmail.com"},"repository":{"url":"git+https://github.com/ct-builders/commercetools-spec-templates.git","type":"git"},"_npmVersion":"10.9.4","description":"Industry vertical spec templates for commercetools, rendered into GitHub Spec Kit or OpenSpec projects.","directories":{},"_nodeVersion":"22.21.1","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"^2.6.0"},"_npmOperationalInternal":{"tmp":"tmp/commercetools-spec-templates_0.1.0_1788353056946_0.8451789533232601","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@ct-builders/commercetools-spec-templates","version":"0.2.0","keywords":["commercetools","spec-driven-development","spec-kit","openspec","verticals"],"author":{"name":"commercetools"},"license":"MIT","_id":"@ct-builders/commercetools-spec-templates@0.2.0","maintainers":[{"name":"behnam777","email":"behnam777@gmail.com"}],"homepage":"https://github.com/ct-builders/commercetools-spec-templates#readme","bugs":{"url":"https://github.com/ct-builders/commercetools-spec-templates/issues"},"bin":{"cts":"bin/cts.mjs"},"dist":{"shasum":"75d2d1ce61b3a9490724c520218d4533aeb6ef64","tarball":"https://registry.npmjs.org/@ct-builders/commercetools-spec-templates/-/commercetools-spec-templates-0.2.0.tgz","fileCount":1019,"integrity":"sha512-BE7TO9+FSXzdtYQ0YbeTGqkUMGOjnTTqutwAsMNA0o8P/poY+R1wCAJGIbkqCUYqmMhjXEtQIBNNNfubPyqPHA==","signatures":[{"sig":"MEUCIQC8ZImFXmphGny0WlgedE2H4bLFAvm/cqrAvrbu2+Z5KAIgIoGvftfbyKvHf64oyPDjVKGfAt4KAhm2V3VRLAtjeZc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIBGv8gpTHJDPFoNYGm0Py6Nu6eRzWCsDi+dihhlm6lbgAiEAtSkrMQG7lmgtA93NNK/xVjrdLRI8twElcMYpyJKLnqc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5081437},"type":"module","engines":{"node":">=20.19"},"gitHead":"9c76bf2224ace4ec5bfec7e64b94592030e590b4","scripts":{"lint":"node bin/ctsx.mjs lint --strict","test":"node --test test/*.test.mjs","build":"node bin/ctsx.mjs build"},"_npmUser":{"name":"behnam777","email":"behnam777@gmail.com"},"repository":{"url":"git+https://github.com/ct-builders/commercetools-spec-templates.git","type":"git"},"_npmVersion":"10.9.4","description":"Industry vertical spec templates for commercetools, rendered into GitHub Spec Kit or OpenSpec projects.","directories":{},"_nodeVersion":"22.21.1","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"^2.6.0"},"_npmOperationalInternal":{"tmp":"tmp/commercetools-spec-templates_0.2.0_1788358761802_0.31051239354359605","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@ct-builders/commercetools-spec-templates","version":"0.3.0","keywords":["commercetools","spec-driven-development","spec-kit","openspec","verticals"],"author":{"name":"commercetools"},"license":"MIT","_id":"@ct-builders/commercetools-spec-templates@0.3.0","maintainers":[{"name":"behnam777","email":"behnam777@gmail.com"}],"homepage":"https://github.com/ct-builders/commercetools-spec-templates#readme","bugs":{"url":"https://github.com/ct-builders/commercetools-spec-templates/issues"},"bin":{"cts":"bin/cts.mjs"},"dist":{"shasum":"963cfcc416734ad9440356026e64978ab058336a","tarball":"https://registry.npmjs.org/@ct-builders/commercetools-spec-templates/-/commercetools-spec-templates-0.3.0.tgz","fileCount":1019,"integrity":"sha512-VijNCP/A2X3nmhnF93To/WLEx00MC+zwVpA4X6SEjMPjRf1BGXqkOd4uCBDlzTmIMXZDlQACUlRCIchqeXHZUg==","signatures":[{"sig":"MEUCIC8NAsc/ui0OgxICR2oLksaCS5kiZaL8IfH2ACMJNLd/AiEAx0ANpTgXjbv9dr7krBzDM6jA8IMKIQ4chqCvaS5+MSg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDsZ3bJ8FicsGp76QOiyNyzJ+1XA5FDvy+ErTsfxO33/gIgbpP5lcKcPsuTv+zvji5yqx0H1TdeKr9ADDnHc7+VFPc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5086429},"type":"module","engines":{"node":">=20.19"},"gitHead":"7a301bedc697732a73bbf1172071c0a0931ea293","scripts":{"lint":"node bin/ctsx.mjs lint --strict","test":"node --test test/*.test.mjs","build":"node bin/ctsx.mjs build"},"_npmUser":{"name":"behnam777","email":"behnam777@gmail.com"},"repository":{"url":"git+https://github.com/ct-builders/commercetools-spec-templates.git","type":"git"},"_npmVersion":"10.9.4","description":"Industry vertical spec templates for commercetools, rendered into GitHub Spec Kit or OpenSpec projects.","directories":{},"_nodeVersion":"22.21.1","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"^2.6.0"},"_npmOperationalInternal":{"tmp":"tmp/commercetools-spec-templates_0.3.0_1788359738406_0.6954064815733401","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@ct-builders/commercetools-spec-templates","version":"0.4.0","keywords":["commercetools","spec-driven-development","spec-kit","openspec","verticals"],"author":{"name":"commercetools"},"license":"MIT","_id":"@ct-builders/commercetools-spec-templates@0.4.0","maintainers":[{"name":"behnam777","email":"behnam777@gmail.com"}],"homepage":"https://github.com/ct-builders/commercetools-spec-templates#readme","bugs":{"url":"https://github.com/ct-builders/commercetools-spec-templates/issues"},"bin":{"cts":"bin/cts.mjs"},"dist":{"shasum":"fc3123b3bde85b455b38036fb9fd9098b4060ddb","tarball":"https://registry.npmjs.org/@ct-builders/commercetools-spec-templates/-/commercetools-spec-templates-0.4.0.tgz","fileCount":1019,"integrity":"sha512-aL6XFzqG3UzddCPpq3JUkepKfKtWSCTNmF39pShYbpU6xJhGgnvd1nW+e5tM3Hu1wPiBM218OdRW3GZ7EUh7ww==","signatures":[{"sig":"MEUCIAZSmvLB+llA0G5OHh7VVVD5b/i2ydQsxfAaYf3rmSGnAiEA3npaolkBkBPuAua8Vxu57zGK1igilfD2p1oXCYzZ6/A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIG6+IwAnoVxXeIYSCM2utzp0PuTgiz37x0YkzxQYikl1AiEAgIukEACrnO7nQqGioTnDmiqcHIuN6+9aTYTw7c/NG+E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5087733},"type":"module","engines":{"node":">=20.19"},"gitHead":"babdd76c7620fe31a0c8431460f8b1830a395042","scripts":{"lint":"node bin/ctsx.mjs lint --strict","test":"node --test test/*.test.mjs","build":"node bin/ctsx.mjs build"},"_npmUser":{"name":"behnam777","email":"behnam777@gmail.com"},"repository":{"url":"git+https://github.com/ct-builders/commercetools-spec-templates.git","type":"git"},"_npmVersion":"10.9.4","description":"Industry vertical spec templates for commercetools, rendered into GitHub Spec Kit or OpenSpec projects.","directories":{},"_nodeVersion":"22.21.1","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"^2.6.0"},"_npmOperationalInternal":{"tmp":"tmp/commercetools-spec-templates_0.4.0_1788361391057_0.8154830444399526","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@ct-builders/commercetools-spec-templates","version":"0.5.0","keywords":["commercetools","spec-driven-development","spec-kit","openspec","verticals"],"author":{"name":"commercetools"},"license":"MIT","_id":"@ct-builders/commercetools-spec-templates@0.5.0","maintainers":[{"name":"behnam777","email":"behnam777@gmail.com"}],"homepage":"https://github.com/ct-builders/commercetools-spec-templates#readme","bugs":{"url":"https://github.com/ct-builders/commercetools-spec-templates/issues"},"bin":{"cts":"bin/cts.mjs"},"dist":{"shasum":"e43cdf7d2296167f17ad4c24050593f7b581d866","tarball":"https://registry.npmjs.org/@ct-builders/commercetools-spec-templates/-/commercetools-spec-templates-0.5.0.tgz","fileCount":1509,"integrity":"sha512-R1xWL/vYRFAKuV5JfxMGBGxrNF7G3jz8NRQTnejlDeXWTOLi1BfqwBDW33Vr59K8QJ1Dr+EihiKcxxwOu+gzGQ==","signatures":[{"sig":"MEQCIH9xhjxsNIbJi2TOjz3GSBe20N3Iq7OSzNWY5sOZ6duOAiBS7bM4lF2ul1dxL+FuRmAnq0PAD1YVnksVxs8kXD4CIQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIFJ61fV5rUQGaaf04TMEeMPJu/PGGjYOXVzama+pL9ryAiEA/zH3BvlpOkI1pazkXT/CvRsOJQErpTZ+32OPx7AVmeU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7582449},"type":"module","engines":{"node":">=20.19"},"gitHead":"40a476fa29b0021ddb4dc5f18b8e0d85b1ab1a8f","scripts":{"lint":"node bin/ctsx.mjs lint --strict","test":"node --test test/*.test.mjs","build":"node bin/ctsx.mjs build"},"_npmUser":{"name":"behnam777","email":"behnam777@gmail.com"},"repository":{"url":"git+https://github.com/ct-builders/commercetools-spec-templates.git","type":"git"},"_npmVersion":"10.9.4","description":"Industry vertical spec templates for commercetools, rendered into GitHub Spec Kit or OpenSpec projects.","directories":{},"_nodeVersion":"22.21.1","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"^2.6.0"},"_npmOperationalInternal":{"tmp":"tmp/commercetools-spec-templates_0.5.0_1789392157293_0.285998677932646","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@ct-builders/commercetools-spec-templates","version":"0.6.0","keywords":["commercetools","spec-driven-development","spec-kit","openspec","verticals"],"author":{"name":"commercetools"},"license":"MIT","_id":"@ct-builders/commercetools-spec-templates@0.6.0","maintainers":[{"name":"behnam777","email":"behnam777@gmail.com"}],"homepage":"https://github.com/ct-builders/commercetools-spec-templates#readme","bugs":{"url":"https://github.com/ct-builders/commercetools-spec-templates/issues"},"bin":{"cts":"bin/cts.mjs"},"dist":{"shasum":"aa99a3e7499e8145199e9f148ea46de4a71f4029","tarball":"https://registry.npmjs.org/@ct-builders/commercetools-spec-templates/-/commercetools-spec-templates-0.6.0.tgz","fileCount":1513,"integrity":"sha512-9ks59iU9TvhXll3I61zBDnYwibNYpVmFNhVJRVYS1kl4yIXE5w2yIQRzEDGQ65WtCExiiM58VFhpACrMsZ8VAA==","signatures":[{"sig":"MEYCIQD8fvUxQ9lI7yxyzdw5U6R/dO+5OIIVwnOvtvn5vyFOCgIhAL5LijEsScXR5CFYOq34e9VhOJiqeOvUdI0mLR7hBaKa","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCICkECc5cwF2vzraBBsStqTDW6eEgRU8A7+M90xxAeB47AiBm9nF62sXJO3Fn6STtkaTo5XyCHMVpQP/Siz9Eu21A+A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7627731},"type":"module","engines":{"node":">=20.19"},"gitHead":"02c27a574d6e963e58d66c76ecc6b22c9ae3af8d","scripts":{"lint":"node bin/ctsx.mjs lint --strict","test":"node --test test/*.test.mjs","build":"node bin/ctsx.mjs build"},"_npmUser":{"name":"behnam777","email":"behnam777@gmail.com"},"repository":{"url":"git+https://github.com/ct-builders/commercetools-spec-templates.git","type":"git"},"_npmVersion":"10.9.4","description":"Industry vertical spec templates for commercetools, rendered into GitHub Spec Kit or OpenSpec projects.","directories":{},"_nodeVersion":"22.21.1","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"^2.6.0"},"_npmOperationalInternal":{"tmp":"tmp/commercetools-spec-templates_0.6.0_1789406228541_0.43016489621933296","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@ct-builders/commercetools-spec-templates","version":"0.9.0","keywords":["commercetools","spec-driven-development","spec-kit","openspec","verticals"],"author":{"name":"commercetools"},"license":"MIT","_id":"@ct-builders/commercetools-spec-templates@0.9.0","maintainers":[{"name":"behnam777","email":"behnam777@gmail.com"}],"homepage":"https://github.com/ct-builders/commercetools-spec-templates#readme","bugs":{"url":"https://github.com/ct-builders/commercetools-spec-templates/issues"},"bin":{"cts":"bin/cts.mjs"},"dist":{"shasum":"fef747180abcd944e680303d752e0dfe29bf1265","tarball":"https://registry.npmjs.org/@ct-builders/commercetools-spec-templates/-/commercetools-spec-templates-0.9.0.tgz","fileCount":4305,"integrity":"sha512-qP1B4qjGxboAsUVT+V8p75+TW7qAodkumLyKjOXIZrTuyD3S33MmL8T0oS5BCNhiLX1O8jbEJJPzJTLa+mzuNw==","signatures":[{"sig":"MEUCIQD+jcAwdUl7bYZw63bWxtq6fPlN8rHR07UpFArbpeVupgIgSPBm1fyNHHbYMbAUeC+2BL5VZv7gSPASmS41FIE6YBc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDMoyDWYcZCIJpiDbDe2sqLyH2IZV83i3Tnk9QwEZLKZAIgAR174ShtVumEvMyzKl08Ac1c27Qm8ISEpQYpBn6q6zg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24341124},"type":"module","engines":{"node":">=20.19"},"gitHead":"b539484050b7e1b8c0fdbc56a281c6c2f182e90c","scripts":{"lint":"node bin/ctsx.mjs lint --strict","test":"node --test test/*.test.mjs","build":"node bin/ctsx.mjs build"},"_npmUser":{"name":"behnam777","email":"behnam777@gmail.com"},"repository":{"url":"git+https://github.com/ct-builders/commercetools-spec-templates.git","type":"git"},"_npmVersion":"10.9.4","description":"Industry vertical spec templates for commercetools, rendered into GitHub Spec Kit or OpenSpec projects.","directories":{},"_nodeVersion":"22.21.1","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"^2.6.0"},"_npmOperationalInternal":{"tmp":"tmp/commercetools-spec-templates_0.9.0_1790269954419_0.25633806087687483","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"_id":"@ct-builders/commercetools-spec-templates@0.10.0","bin":{"cts":"bin/cts.mjs"},"bugs":{"url":"https://github.com/ct-builders/commercetools-spec-templates/issues"},"dist":{"shasum":"36fc34d3e37b760d5ae8cd44fba8afd545e32893","tarball":"https://registry.npmjs.org/@ct-builders/commercetools-spec-templates/-/commercetools-spec-templates-0.10.0.tgz","fileCount":4305,"integrity":"sha512-SyAe8PAq5T2np0hvb6GpXBYVBPpt8wW0v97ttDS6VbwlxnrLf2zLEZnBBd7yzRcXlF4u58Xz++WKHyhCXfqNrQ==","signatures":[{"sig":"MEQCIAYzfiH1kp9FgirCzGAmECuT7KZYmSTlmNCdTIdNmvAVAiAJEXm1/htVcW+xU28BLI76V9asy3h2oTMxxGSdbsBn0A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIB3lgyjclZ41NePG9UnjxTk+td201hz2pHHi+l9LpQ2KAiEAu4eNTw9IDNn1EKQVxt7bemnOh9UpH0DwGQmlYwXzNMw="}],"unpackedSize":24289869},"name":"@ct-builders/commercetools-spec-templates","type":"module","author":{"name":"commercetools"},"engines":{"node":">=20.19"},"gitHead":"ff12339a40f534f21cdfbd84c3a3e00c2edec7fe","license":"MIT","scripts":{"lint":"node bin/ctsx.mjs lint --strict","test":"node --test test/*.test.mjs","build":"node bin/ctsx.mjs build"},"version":"0.10.0","_npmUser":{"name":"behnam777","email":"behnam777@gmail.com"},"homepage":"https://github.com/ct-builders/commercetools-spec-templates#readme","keywords":["commercetools","spec-driven-development","spec-kit","openspec","verticals"],"repository":{"url":"git+https://github.com/ct-builders/commercetools-spec-templates.git","type":"git"},"_npmVersion":"10.9.4","description":"Industry vertical spec templates for commercetools, rendered into GitHub Spec Kit or OpenSpec projects.","directories":{},"maintainers":[{"name":"behnam777","email":"behnam777@gmail.com"}],"_nodeVersion":"22.21.1","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"yaml":"^2.6.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/commercetools-spec-templates_0.10.0_1790777201413_0.30428838459490004"}}},"time":{"created":"2026-09-02T12:44:16.745Z","modified":"2026-09-30T14:06:41.923Z","0.1.0":"2026-09-02T12:44:17.152Z","0.2.0":"2026-09-02T14:19:21.927Z","0.3.0":"2026-09-02T14:35:38.571Z","0.4.0":"2026-09-02T15:03:11.203Z","0.5.0":"2026-09-14T13:22:37.425Z","0.6.0":"2026-09-14T17:17:08.712Z","0.9.0":"2026-09-24T17:12:34.672Z","0.10.0":"2026-09-30T14:06:41.665Z"},"bugs":{"url":"https://github.com/ct-builders/commercetools-spec-templates/issues"},"author":{"name":"commercetools"},"license":"MIT","homepage":"https://github.com/ct-builders/commercetools-spec-templates#readme","keywords":["commercetools","spec-driven-development","spec-kit","openspec","verticals"],"repository":{"url":"git+https://github.com/ct-builders/commercetools-spec-templates.git","type":"git"},"description":"Industry vertical spec templates for commercetools, rendered into GitHub Spec Kit or OpenSpec projects.","maintainers":[{"name":"behnam777","email":"behnam777@gmail.com"}],"readme":"# commercetools-spec-templates\n\nIndustry vertical specs for commercetools, rendered into your spec-driven development project.\n\n> **Freely available, AS IS and UNSUPPORTED.** This is reference code published\n> by commercetools: no SLA, no security patching, not covered by commercetools\n> Support. Issues are answered best-effort and it may be archived without\n> notice. See [SUPPORT.md](SUPPORT.md) before you build on it.\n\n> **This repository is public, and it is the only one.** The engine, the catalog, the taxonomy and\n> the rendered specs all live here under MIT. Collector *answers* do not: they arrive through a\n> Google Form, never touch GitHub, and are ingested into a gitignored `inbox/`. What gets committed\n> is the reviewed capability, never the raw response.\n\n## Prerequisites\n\n**[commercetools AI Plugins](https://github.com/commercetools/commercetools-ai-plugins)**. Every\nspec this tool writes carries `[SKILL: commercetools-*]` annotations, and the skills those name\n— `commercetools-storefront`, `commercetools-platform`, `commercetools-checkout` and the rest —\ncome from that bundle. Without it the annotations point at nothing, and an agent implementing a\ntask will invent API surface instead of loading the playbook for it.\n\n```bash\n/plugin install commercetools@commercetools                            # Claude Code\ncodex plugin marketplace add commercetools/commercetools-ai-plugins    # Codex\nnpx skills add commercetools/commercetools-ai-plugins                  # skills only, any tool\n```\n\nNode >= 20.19. A spec framework is **not** a prerequisite — `init` offers to run `openspec init`\nfor you if there is none.\n\n## Quick start\n\n```bash\nnpx @ct-builders/commercetools-spec-templates init\n```\n\n1. **Run it** in the project that will hold the specs — not in this repo.\n2. **Answer the questions.** Which framework, who the storefront sells to, which industry, how\n   much of it, and finally whether to copy the skills that work the specs for you. Every answer\n   has a default; nothing is written until you have seen the file list and confirmed.\n3. **`/commercetools-spec-plan`** in your agent. It reads the specs it just wrote, works out what\n   depends on what, and writes `openspec/PLAN.md` — the build order. **Read that file before\n   going further**: the order it chose and any foundation rows it invented are the two things\n   worth correcting by hand, and correcting them later means unpicking changes.\n4. **`/commercetools-spec-run`**. One spec at a time, from proposal to archived, until the plan is\n   exhausted. Stops on its own; invoke it again to resume.\n\nSteps 3 and 4 need the skills from step 2 — answer **Yes, copy them**. Skip them and you have the\nspecs and nothing that works through them, which is a perfectly good place to stop.\n\nAlready know the answers, or scripting it?\n\n```bash\nnpx @ct-builders/commercetools-spec-templates plan  --industry grocery --model B2C   # writes nothing\nnpx @ct-builders/commercetools-spec-templates apply --industry grocery --model B2C --skills all\n```\n\nThat writes the grocery B2C spec set into `openspec/specs/`, runs the\n[commercetools SDD overlay](https://www.npmjs.com/package/@commercetools/commercetools-ai-plugin-sdd)\nso every commercetools-touching task carries its `[SKILL: …]` annotation, and leaves a receipt at\n`.commercetools/spec-templates.lock.json` so `status`, `update` and `remove` all work.\n\nStep-by-step procedures for every task — bringing specs into a project, opening a collection\nround, adding an industry, authoring a vertical — are in **[`docs/runbook.md`](docs/runbook.md)**.\nThis README explains why things are shaped the way they are.\n\n## Three ways to answer the questions\n\nThe questions live in `questions/developer-intake.yaml` and are asked by whichever surface you use.\nThere is one question set, not three.\n\n| Surface | How you answer | Use when |\n| :--- | :--- | :--- |\n| `cts init` | Numbered choices at a terminal | You are a human with a shell |\n| The plugin skill | `AskUserQuestion` buttons in Claude Code, Cursor, Codex or Copilot | You are working with an agent |\n| `cts questions --answers '<json>'` | A JSON request/response loop | You are building your own front end |\n\nThe third is the protocol the other two are built on: pass the answers you have, get back the next\nquestion or the resolved outputs. `cts init` refuses to run without a TTY and names the flag-based\nalternative, so it can never hang a CI job.\n\nA question that has only one real answer is not asked — it is reported. If the project already has\na framework, you see `Using OpenSpec — already set up in this project.` rather than a prompt with\none option. That is `prefill` in the question file, not a special case in the code.\n\n**Prompts are a product surface.** Nothing in a question may show a developer our internal\nvocabulary — no `_base`, no `P1`, no \"capability\", no raw kebab-case ids, no unrendered `{{...}}`.\nA test walks every question the flow can reach and fails the build on any of them.\n\n## What's in the catalog\n\n| Bundle | Capabilities | What it is |\n| :--- | ---: | :--- |\n| `_base` x B2C | 30 | The industry-agnostic storefront: 8 journeys + 22 pages |\n| `_base` x B2B | 48 | Adds the 9 B2B journeys and the 6 B2B-specific pages |\n| `grocery` x B2C | 33 | The base plus 3 grocery capabilities |\n| `grocery` x B2B | 50 | The base plus 2 grocery capabilities that apply to business buyers |\n\nEvery industry inherits `_base`, so a new vertical starts from a complete storefront and adds only\nwhat makes it that industry. An industry with no `vertical.yaml` yet resolves to the base alone —\n`cts coverage` labels those rows `base only` so they cannot be mistaken for industry content.\n\n## How it fits together\n\nOne hand-authored source, compiled into per-framework output:\n\n```\ncatalog/verticals/<industry>/capabilities/*.yaml     authored: framework-agnostic capability YAML\n        │  ctsx build\n        ▼\nrendered/<industry>/<model>/<framework>-<placement>/  committed: the exact bytes cts copies\nregistry.json                                        committed: the single discovery root\n        │  cts apply\n        ▼\nyour project's openspec/specs/ or specs/NNN-<slug>/\n```\n\nAuthoring finished spec files per framework would mean up to `industries × models × frameworks`\ncopies of one requirement. Authoring one neutral source and committing the rendered output gets\nboth: no duplication, and a PR diff that shows the exact bytes a developer will receive.\n\n## Commands\n\n```\ncts detect                                   what framework is here, and is it complete\ncts list [--industry <i>]                    what content exists\ncts questions [--answers '<json>'] [--surface agent|cli]\n                                             drive the intake flow (data-driven)\ncts plan   --industry <i> --model <m> [...]  preview what would be written, and its hash\ncts apply  [--plan <f>] [...]                write it, atomically, and leave a receipt\ncts status | cts remove                      inspect or undo exactly what we wrote\ncts why    --industry <i> --model <m>        explain why a combination resolves as it does\n```\n\nOptions: `--framework openspec|speckit` · `--placement specs|change` (OpenSpec only) · `--scope all|mvp` ·\n`--cwd <dir>` · `--force` · `--dry-run` · `--json` · `--no-overlay` ·\n`--skills all|none|<name,name>`\n\n`cts init` offers a third answer to \"how much\": picking the industry's specs one by one. The\ngeneral storefront always comes with them, so the list is the industry delta only — 19 at its\nlongest today. It is a terminal affordance; an assistant driving `cts questions` keeps the\nall/must-haves choice, because `AskUserQuestion` renders six options at most.\n\nExit codes: `0` ok · `2` bad args · `4` no or incomplete framework · `5` unsupported combination ·\n`6` blocked by conflicts · `7` renderer not implemented.\n\n## What lands where\n\n| Framework | Placement | Destination |\n| :--- | :--- | :--- |\n| OpenSpec | `specs` (default) | `openspec/specs/<capability>/spec.md` — a browsable baseline catalog |\n| OpenSpec | `change` | `openspec/changes/add-<i>-<m>-<epic>/{proposal,tasks}.md` + delta specs |\n| Spec Kit | — | `specs/<NNN>-<slug>/spec.md`, one feature per capability, rebased onto `max(NNN)+n` |\n\nFour placement notes that are easy to get wrong, and that this tool gets right:\n\n- **Spec Kit numbering comes from disk, not from git.** `create-new-feature.sh` scans `specs/*` for\n  `^[0-9]{3,}-` and takes max+1, so seeded feature directories are safe and the next\n  `/speckit.specify` continues the sequence.\n- **A paired model puts the side in the slug, not in a directory.** `specs/001-seller-portal-cart-page/`,\n  not `specs/seller-portal/001-cart-page/` — Spec Kit's numbering scan and our apply-time rebase\n  both look exactly one level under `specs/`, so a nested shop would be invisible to both.\n- **Nothing dated or numbered goes in the body.** `**Feature Branch**`, `**Created**` and\n  `**Input**` are omitted: the first embeds a number the rebase reassigns, the second would churn\n  the committed goldens on every build, and the third has no source. No Spec Kit script reads them.\n- **We never write a `plan.md` or a pre-ticked `checklists/` file.** `setup-plan.sh` skips its\n  template copy when `plan.md` already exists, which would strip the overlay's *Platform Skills\n  Resolution* table out of the feature. A pre-ticked checklist would forge Spec Kit's own\n  content-quality attestations.\n\n## Working the backlog on its own\n\nA spec set is a backlog, and OpenSpec has no queue: it knows changes in flight and specs that are\ndone, and nothing that says which of fifty to do next. The last two questions — or\n`--skills` — copy the skills that add one.\n\n| Skill | Wires rules | Does |\n| :--- | :--- | :--- |\n| `commercetools-spec-plan` | | Derives `openspec/PLAN.md` — the rows, what each depends on, the gate |\n| `commercetools-spec-run` | yes | Works one row at a time: propose → apply → sync → gate → archive → tick |\n| `commercetools-spec-templates` | | Adds another industry's specs later, or takes these back out |\n\nThey are offered individually, because wanting a build order is not the same as wanting something\nto work through it unattended. Picking `commercetools-spec-run` adds `commercetools-spec-plan`\ntoo and says so — it reads a plan that nothing else would write. The one rule in\n`openspec/config.yaml` follows the selection: it is written only when a skill that reads it was\nchosen.\n\nThe list comes from the skills' own frontmatter (`metadata.ships`), so publishing a fourth adds\nit to the question with no code change.\n\nThe split is forced by what OpenSpec can hold. A workflow schema is scoped to a single change —\nits `requires` is a DAG among *artifacts*, and the format has no second change, no conditionals\nand no shell execution — so nothing in the framework can express a queue. Meanwhile the\n`operations:` key that the scaffolded config documents is not read by any version: OpenSpec 1.6\nparses `schema`, `context`, `rules`, `references` and `store`, and drops the rest. So the loop\nlives in the skills, and the one rule that has to reach an agent which never loads a skill goes\ninto `rules.specs` and `rules.design` — the two artifact ids the commercetools SDD overlay leaves\nfree. [ADR 9](docs/adr/0009-the-backlog-loop-lives-in-skills.md) has the reasoning and what was\nrejected.\n\n`openspec/PLAN.md` is the only durable state, so a run that stops is resumed by invoking the skill\nagain. The skills are receipt-tracked like any other file and the config region by its own hash,\nso `cts status` and `cts remove` cover both.\n\n## Nothing is written until you have seen it\n\n`cts plan` produces a file list, an action per path, and a `plan_hash`. `cts apply --plan <file>`\nrecomputes that hash and refuses if the project moved on. Files are staged in a temp directory,\nfsync'd, then atomically renamed, and the receipt is written last — so a crash leaves either the\nold state or a complete new one. A path we did not write (`foreign`), or one we wrote and you then\nedited (`ours-edited`), blocks the run until you pass `--force`.\n\n## Coverage, and honesty about gaps\n\n`industry × business model` resolves three ways. A model the vertical explicitly excludes is a\n**hard refusal**, not a guess. A model reached only through inheritance is reported as `derived`,\nand whatever that model structurally needs but no capability covers is rendered as an **open\nquestion** — never as invented content.\n\n```\n$ cts why --industry grocery --model B2B2C\ngrocery|B2B2C: derived match\n  3 capabilit(ies): 3 native to B2B2C, 0 inherited\n  4 model gap(s) with no published content: seller-onboarding, seller-scoped-assortment, …\n  These are rendered as open questions, never as invented content.\n```\n\n## Authoring a vertical\n\n`bin/ctsx.mjs` is the authoring tool; it is not shipped to developers.\n\n```bash\nnode bin/ctsx.mjs build            # regenerate registry.json, dist/, rendered/, collector/forms/\nnode bin/ctsx.mjs lint --strict    # 0 ok · 1 errors · 3 golden drift\nnode bin/ctsx.mjs coverage         # the industry × model × side matrix\nnode bin/ctsx.mjs collect:render   # regenerate the collector form (build does this too)\nnpm test                           # offline; includes the generated Apps Script, run against a fake Forms API\n```\n\nThe full procedure is `.claude/skills/commercetools-vertical-authoring/SKILL.md`, including how to\nturn a source PDF into capability YAML without ever committing the PDF. The step before it —\ngetting a ranked, de-identified candidate list out of a folder of RFPs, demo agendas and briefing\ndecks — is `.claude/skills/commercetools-spec-harvesting/SKILL.md`.\n\n## Support\n\nThere is none, and that is deliberate — see **[SUPPORT.md](SUPPORT.md)**. No SLA, no security\npatching, not covered by commercetools Support, issues answered best-effort, and it may be archived\nwithout notice. If you need it changed for a project, fork it: that is the intended use.\n\n## Licence\n\nMIT throughout — see `LICENSE`. That covers the engine and the rendered specs the npm package\nships, and every rendered spec carries an `SPDX-License-Identifier` comment of its own so the\nlicence travels with the file once it is copied into your project. If the catalog is ever opened up\nunder a separate content licence, that is a decision to take then, with a licence file to match;\nthere is no second licence today.\n","readmeFilename":"README.md"}