[{"data":1,"prerenderedAt":719},["ShallowReactive",2],{"navigation_docs_en":3,"-en-concepts-notation":188,"-en-concepts-notation-surround":714},[4,35,85,145],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting started",false,"\u002Fen\u002Fgetting-started","en\u002F1.getting-started",[10,15,20,25,30],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fen\u002Fgetting-started\u002Fintroduction","en\u002F1.getting-started\u002F1.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fen\u002Fgetting-started\u002Finstallation","en\u002F1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Project layout","\u002Fen\u002Fgetting-started\u002Fproject-layout","en\u002F1.getting-started\u002F3.project-layout","i-lucide-folder-tree",{"title":26,"path":27,"stem":28,"icon":29},"Upgrade and uninstall","\u002Fen\u002Fgetting-started\u002Fupgrade-uninstall","en\u002F1.getting-started\u002F4.upgrade-uninstall","i-lucide-refresh-cw",{"title":31,"path":32,"stem":33,"icon":34},"Channels","\u002Fen\u002Fgetting-started\u002Fchannels","en\u002F1.getting-started\u002F5.channels","i-lucide-radio-tower",{"title":36,"icon":6,"path":37,"stem":38,"children":39,"page":6},"Concepts","\u002Fen\u002Fconcepts","en\u002F2.concepts",[40,45,50,55,60,65,70,75,80],{"title":41,"path":42,"stem":43,"icon":44},"Lanes and methods","\u002Fen\u002Fconcepts\u002Flanes-and-methods","en\u002F2.concepts\u002F1.lanes-and-methods","i-lucide-route",{"title":46,"path":47,"stem":48,"icon":49},"Living specs and changes","\u002Fen\u002Fconcepts\u002Fliving-specs","en\u002F2.concepts\u002F2.living-specs","i-lucide-book-open-check",{"title":51,"path":52,"stem":53,"icon":54},"Notation","\u002Fen\u002Fconcepts\u002Fnotation","en\u002F2.concepts\u002F3.notation","i-lucide-pen-line",{"title":56,"path":57,"stem":58,"icon":59},"QA and test data","\u002Fen\u002Fconcepts\u002Fqa-and-test-data","en\u002F2.concepts\u002F4.qa-and-test-data","i-lucide-clipboard-check",{"title":61,"path":62,"stem":63,"icon":64},"Knowledge","\u002Fen\u002Fconcepts\u002Fknowledge","en\u002F2.concepts\u002F5.knowledge","i-lucide-brain",{"title":66,"path":67,"stem":68,"icon":69},"Scripts","\u002Fen\u002Fconcepts\u002Fscripts","en\u002F2.concepts\u002F6.scripts","i-lucide-file-code",{"title":71,"path":72,"stem":73,"icon":74},"Guardrails","\u002Fen\u002Fconcepts\u002Fguardrails","en\u002F2.concepts\u002F7.guardrails","i-lucide-shield",{"title":76,"path":77,"stem":78,"icon":79},"Session context","\u002Fen\u002Fconcepts\u002Fsession-context","en\u002F2.concepts\u002F8.session-context","i-lucide-gauge",{"title":81,"path":82,"stem":83,"icon":84},"How the kit improves","\u002Fen\u002Fconcepts\u002Fself-improvement","en\u002F2.concepts\u002F9.self-improvement","i-lucide-sprout",{"title":86,"icon":6,"path":87,"stem":88,"children":89,"page":6},"Guides","\u002Fen\u002Fguides","en\u002F3.guides",[90,95,100,105,110,115,120,125,130,135,140],{"title":91,"path":92,"stem":93,"icon":94},"New app monorepo","\u002Fen\u002Fguides\u002Fnew-app-monorepo","en\u002F3.guides\u002F01.new-app-monorepo","i-lucide-boxes",{"title":96,"path":97,"stem":98,"icon":99},"Your website with Claude","\u002Fen\u002Fguides\u002Fcontent-site","en\u002F3.guides\u002F02.content-site","i-lucide-globe",{"title":101,"path":102,"stem":103,"icon":104},"Adopt an existing project","\u002Fen\u002Fguides\u002Fadopt-existing-project","en\u002F3.guides\u002F03.adopt-existing-project","i-lucide-git-merge",{"title":106,"path":107,"stem":108,"icon":109},"A change, end to end","\u002Fen\u002Fguides\u002Fspec-lane-change","en\u002F3.guides\u002F04.spec-lane-change","i-lucide-git-pull-request",{"title":111,"path":112,"stem":113,"icon":114},"A fast-track change","\u002Fen\u002Fguides\u002Ffast-track-change","en\u002F3.guides\u002F05.fast-track-change","i-lucide-zap",{"title":116,"path":117,"stem":118,"icon":119},"The TDD loop","\u002Fen\u002Fguides\u002Ftdd-loop","en\u002F3.guides\u002F06.tdd-loop","i-lucide-repeat",{"title":121,"path":122,"stem":123,"icon":124},"A QA pass","\u002Fen\u002Fguides\u002Fqa-pass","en\u002F3.guides\u002F07.qa-pass","i-lucide-clipboard-list",{"title":126,"path":127,"stem":128,"icon":129},"Test data","\u002Fen\u002Fguides\u002Ftest-data","en\u002F3.guides\u002F08.test-data","i-lucide-database",{"title":131,"path":132,"stem":133,"icon":134},"Releasing and upgrading","\u002Fen\u002Fguides\u002Freleasing-and-upgrading","en\u002F3.guides\u002F09.releasing-and-upgrading","i-lucide-rocket",{"title":136,"path":137,"stem":138,"icon":139},"Proposing improvements","\u002Fen\u002Fguides\u002Fproposing-improvements","en\u002F3.guides\u002F10.proposing-improvements","i-lucide-lightbulb",{"title":141,"path":142,"stem":143,"icon":144},"Docs for agents","\u002Fen\u002Fguides\u002Fdocs-for-agents","en\u002F3.guides\u002F11.docs-for-agents","i-lucide-bot",{"title":146,"icon":6,"path":147,"stem":148,"children":149,"page":6},"Reference","\u002Fen\u002Freference","en\u002F4.reference",[150,155,160,165,170,173,178,183],{"title":151,"path":152,"stem":153,"icon":154},"CLI","\u002Fen\u002Freference\u002Fcli","en\u002F4.reference\u002F1.cli","i-lucide-terminal",{"title":156,"path":157,"stem":158,"icon":159},"Configuration","\u002Fen\u002Freference\u002Fconfiguration","en\u002F4.reference\u002F2.configuration","i-lucide-settings",{"title":161,"path":162,"stem":163,"icon":164},"Skills","\u002Fen\u002Freference\u002Fskills","en\u002F4.reference\u002F3.skills","i-lucide-sparkles",{"title":166,"path":167,"stem":168,"icon":169},"Hooks","\u002Fen\u002Freference\u002Fhooks","en\u002F4.reference\u002F4.hooks","i-lucide-webhook",{"title":66,"path":171,"stem":172,"icon":69},"\u002Fen\u002Freference\u002Fscripts","en\u002F4.reference\u002F5.scripts",{"title":174,"path":175,"stem":176,"icon":177},"Changelog","\u002Fen\u002Freference\u002Fchangelog","en\u002F4.reference\u002F6.changelog","i-lucide-history",{"title":179,"path":180,"stem":181,"icon":182},"Templates","\u002Fen\u002Freference\u002Ftemplates","en\u002F4.reference\u002F7.templates","i-lucide-layout-template",{"title":184,"path":185,"stem":186,"icon":187},"Privacy","\u002Fen\u002Freference\u002Fprivacy","en\u002F4.reference\u002F8.privacy","i-lucide-lock",{"id":189,"title":51,"body":190,"description":707,"extension":708,"links":709,"meta":710,"navigation":711,"path":52,"seo":712,"stem":53,"__hash__":713},"docs_en\u002Fen\u002F2.concepts\u002F3.notation.md",{"type":191,"value":192,"toc":700},"minimark",[193,315,320,324,432,447,451,477,480,483,591,600,603,610,665,671,682,696],[194,195,196,212],"table",{},[197,198,199],"thead",{},[200,201,202,206,209],"tr",{},[203,204,205],"th",{},"Step",[203,207,208],{},"Standard",[203,210,211],{},"Looks like",[213,214,215,230,250,266,279,292,304],"tbody",{},[200,216,217,221,224],{},[218,219,220],"td",{},"Why and scope",[218,222,223],{},"Proposal",[218,225,226],{},[227,228,229],"code",{},"work\u002Fchanges\u002F004-invoices\u002Fproposal.md",[200,231,232,235,241],{},[218,233,234],{},"Requirement",[218,236,237],{},[238,239,240],"strong",{},"EARS",[218,242,243,246,247],{},[227,244,245],{},"### invoices.R2 — Totals"," + ",[227,248,249],{},"When an invoice is saved, the BFF shall round its total to 3 decimals.",[200,251,252,255,260],{},[218,253,254],{},"Acceptance",[218,256,257],{},[238,258,259],{},"BDD \u002F ATDD",[218,261,262,265],{},[227,263,264],{},"#### invoices.R2.S3 — Rounding edge @boundary"," + Given \u002F When \u002F Then",[200,267,268,271,276],{},[218,269,270],{},"Choosing cases",[218,272,273],{},[238,274,275],{},"ZOMBIES",[218,277,278],{},"one tag per scenario",[200,280,281,284,287],{},[218,282,283],{},"Tests",[218,285,286],{},"Traceability",[218,288,289],{},[227,290,291],{},"it(\"invoices.R2.S3 rounds 0.0005 up\")",[200,293,294,296,299],{},[218,295,126],{},[218,297,298],{},"ZOMBIES on data",[218,300,301],{},[227,302,303],{},"-- @fixture invoices.R2.S3 @boundary",[200,305,306,309,312],{},[218,307,308],{},"QA",[218,310,311],{},"Checklist",[218,313,314],{},"one item per scenario",[316,317,319],"h2",{"id":318},"ears-requirements","EARS requirements",[321,322,323],"p",{},"EARS (Easy Approach to Requirements Syntax) limits each requirement to one sentence in one of these shapes:",[194,325,326,336],{},[197,327,328],{},[200,329,330,333],{},[203,331,332],{},"Pattern",[203,334,335],{},"Template",[213,337,338,354,370,385,401,416],{},[200,339,340,343],{},[218,341,342],{},"Ubiquitous",[218,344,345,346,349,350,353],{},"The ",[227,347,348],{},"\u003Csystem>"," shall ",[227,351,352],{},"\u003Cresponse>",".",[200,355,356,359],{},[218,357,358],{},"Event",[218,360,361,362,365,366,349,368,353],{},"When ",[227,363,364],{},"\u003Ctrigger>",", the ",[227,367,348],{},[227,369,352],{},[200,371,372,375],{},[218,373,374],{},"State",[218,376,377,378,365,381,349,383,353],{},"While ",[227,379,380],{},"\u003Cstate>",[227,382,348],{},[227,384,352],{},[200,386,387,390],{},[218,388,389],{},"Unwanted",[218,391,392,393,396,397,349,399,353],{},"If ",[227,394,395],{},"\u003Ccondition>",", then the ",[227,398,348],{},[227,400,352],{},[200,402,403,406],{},[218,404,405],{},"Optional",[218,407,408,409,365,412,349,414,353],{},"Where ",[227,410,411],{},"\u003Cfeature>",[227,413,348],{},[227,415,352],{},[200,417,418,421],{},[218,419,420],{},"Complex",[218,422,377,423,425,426,365,428,349,430,353],{},[227,424,380],{},", when ",[227,427,364],{},[227,429,348],{},[227,431,352],{},[321,433,434,435,438,439,442,443,446],{},"Name a concrete system (\"the BFF\", \"the invoices page\"), one behaviour per requirement, and measurable outcomes (",[227,436,437],{},"within 15 minutes",", ",[227,440,441],{},"answers 409","). ",[227,444,445],{},"agent-kit specs lint"," rejects any other shape.",[316,448,450],{"id":449},"scenarios-bdd-atdd","Scenarios (BDD \u002F ATDD)",[321,452,453,454,457,458,461,462,465,466,469,470,473,474,353],{},"Each requirement has scenarios written as examples — ",[227,455,456],{},"Given"," a context, ",[227,459,460],{},"When"," an action, ",[227,463,464],{},"Then"," an observable outcome (",[227,467,468],{},"And"," \u002F ",[227,471,472],{},"But"," extend a step). They are agreed before code and are the ",[238,475,476],{},"acceptance tests",[316,478,275],{"id":479},"zombies",[321,481,482],{},"Pick the scenarios (and the test cases) with ZOMBIES and tag each scenario with the one category it covers:",[194,484,485,498],{},[197,486,487],{},[200,488,489,492,495],{},[203,490,491],{},"Tag",[203,493,494],{},"Ask",[203,496,497],{},"Example",[213,499,500,513,526,539,552,565,578],{},[200,501,502,507,510],{},[218,503,504],{},[227,505,506],{},"@zero",[218,508,509],{},"nothing \u002F empty",[218,511,512],{},"no invoices → empty state",[200,514,515,520,523],{},[218,516,517],{},[227,518,519],{},"@one",[218,521,522],{},"the single basic case",[218,524,525],{},"one line totals correctly",[200,527,528,533,536],{},[218,529,530],{},[227,531,532],{},"@many",[218,534,535],{},"several, order, duplicates",[218,537,538],{},"three lines in two currencies",[200,540,541,546,549],{},[218,542,543],{},[227,544,545],{},"@boundary",[218,547,548],{},"limits and edges",[218,550,551],{},"the 5th failed login blocks; last day of a period",[200,553,554,559,562],{},[218,555,556],{},[227,557,558],{},"@interface",[218,560,561],{},"the contract",[218,563,564],{},"403 for another provincia; API shape",[200,566,567,572,575],{},[218,568,569],{},[227,570,571],{},"@exception",[218,573,574],{},"bad input, failure",[218,576,577],{},"invalid code → clear error, nothing saved",[200,579,580,585,588],{},[218,581,582],{},[227,583,584],{},"@simple",[218,586,587],{},"the happy path",[218,589,590],{},"create and see it in the list",[321,592,593,594,596,597,599],{},"Lint warns when a requirement has no ",[227,595,571],{}," or ",[227,598,545],{}," scenario. Money, permissions and data rules always get them.",[316,601,286],{"id":602},"traceability",[321,604,605,606,609],{},"A test that proves a scenario ",[238,607,608],{},"starts its name with the scenario id",":",[611,612,617],"pre",{"className":613,"code":614,"language":615,"meta":616,"style":616},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","it(\"auth.R2.S2 shows the login page for an expired session\", () => { \u002F* … *\u002F })\n","ts","",[227,618,619],{"__ignoreMap":616},[620,621,624,628,632,636,640,642,645,648,652,655,659,662],"span",{"class":622,"line":623},"line",1,[620,625,627],{"class":626},"s2Zo4","it",[620,629,631],{"class":630},"sTEyZ","(",[620,633,635],{"class":634},"sMK4o","\"",[620,637,639],{"class":638},"sfazB","auth.R2.S2 shows the login page for an expired session",[620,641,635],{"class":634},[620,643,644],{"class":634},",",[620,646,647],{"class":634}," ()",[620,649,651],{"class":650},"spNyl"," =>",[620,653,654],{"class":634}," {",[620,656,658],{"class":657},"sHwdD"," \u002F* … *\u002F",[620,660,661],{"class":634}," }",[620,663,664],{"class":630},")\n",[321,666,667,668,609],{},"A scenario proven without a test (a visual check, a manual flow, an SQL check) gets a ✅ row in the change's ",[227,669,670],{},"tasks.md",[611,672,676],{"className":673,"code":674,"language":675,"meta":616,"style":616},"language-markdown shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","| auth.R2.S2 | manual: reloaded with an expired token, login shown | ✅ |\n","markdown",[227,677,678],{"__ignoreMap":616},[620,679,680],{"class":622,"line":623},[620,681,674],{},[321,683,684,687,688,691,692,695],{},[227,685,686],{},"agent-kit specs trace"," and ",[227,689,690],{},"agent-kit work trace NNN"," list ",[227,693,694],{},"✗ not covered"," scenarios; preflight blocks a done change with any.",[697,698,699],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":616,"searchDepth":701,"depth":701,"links":702},2,[703,704,705,706],{"id":318,"depth":701,"text":319},{"id":449,"depth":701,"text":450},{"id":479,"depth":701,"text":275},{"id":602,"depth":701,"text":286},"One standard notation at every step — EARS requirements, Given\u002FWhen\u002FThen scenarios, ZOMBIES tags, scenario ids in test names.","md",null,{},{"icon":54},{"title":51,"description":707},"I44XbZ9JHwWQfD44mfhalzEOXs83oStKWV0kgX6R4l0",[715,717],{"title":46,"path":47,"stem":48,"description":716,"icon":49,"children":-1},"Spec-anchored SDD — living specs are the source of truth, changes carry deltas that merge into them.",{"title":56,"path":57,"stem":58,"description":718,"icon":59,"children":-1},"A QA checklist generated from the living specs, dated QA runs, and Supabase test data that can't touch production.",1793099615102]