[{"data":1,"prerenderedAt":581},["ShallowReactive",2],{"navigation_docs_en":3,"-en-concepts-living-specs":188,"-en-concepts-living-specs-surround":576},[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":46,"body":190,"description":569,"extension":570,"links":571,"meta":572,"navigation":573,"path":47,"seo":574,"stem":48,"__hash__":575},"docs_en\u002Fen\u002F2.concepts\u002F2.living-specs.md",{"type":191,"value":192,"toc":562},"minimark",[193,202,207,229,351,358,362,377,448,452,458,479,482,486,496,500,558],[194,195,196,197,201],"p",{},"agent-kit's SDD is ",[198,199,200],"strong",{},"spec-anchored",": specs are not throw-away planning documents, they stay true for as long as the code lives.",[203,204,206],"h2",{"id":205},"living-specs","Living specs",[194,208,209,213,214,217,218,221,222,221,225,228],{},[210,211,212],"code",{},"work\u002Fspecs\u002F\u003Ccapability>\u002Fspec.md"," says how one area of the system behaves ",[198,215,216],{},"now",". A capability is an area users recognise — ",[210,219,220],{},"auth",", ",[210,223,224],{},"invoices",[210,226,227],{},"user-roles"," — not a page or a table.",[230,231,237],"pre",{"className":232,"code":233,"filename":234,"language":235,"meta":236,"style":236},"language-markdown shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","---\ncapability: auth\nretired: [auth.R1]\n---\n\n# Auth\n\n## Purpose\nWho can sign in and how.\n\n## Requirements\n\n### auth.R2 — Session restore\nWhile a session is stored, the app shall restore it on reload.\n\n#### auth.R2.S1 — Reload keeps the user signed in @simple\n- Given a signed-in user\n- When the page reloads\n- Then the user is still signed in\n","work\u002Fspecs\u002Fauth\u002Fspec.md","markdown","",[210,238,239,247,253,259,264,271,277,282,288,294,299,305,310,316,322,327,333,339,345],{"__ignoreMap":236},[240,241,244],"span",{"class":242,"line":243},"line",1,[240,245,246],{},"---\n",[240,248,250],{"class":242,"line":249},2,[240,251,252],{},"capability: auth\n",[240,254,256],{"class":242,"line":255},3,[240,257,258],{},"retired: [auth.R1]\n",[240,260,262],{"class":242,"line":261},4,[240,263,246],{},[240,265,267],{"class":242,"line":266},5,[240,268,270],{"emptyLinePlaceholder":269},true,"\n",[240,272,274],{"class":242,"line":273},6,[240,275,276],{},"# Auth\n",[240,278,280],{"class":242,"line":279},7,[240,281,270],{"emptyLinePlaceholder":269},[240,283,285],{"class":242,"line":284},8,[240,286,287],{},"## Purpose\n",[240,289,291],{"class":242,"line":290},9,[240,292,293],{},"Who can sign in and how.\n",[240,295,297],{"class":242,"line":296},10,[240,298,270],{"emptyLinePlaceholder":269},[240,300,302],{"class":242,"line":301},11,[240,303,304],{},"## Requirements\n",[240,306,308],{"class":242,"line":307},12,[240,309,270],{"emptyLinePlaceholder":269},[240,311,313],{"class":242,"line":312},13,[240,314,315],{},"### auth.R2 — Session restore\n",[240,317,319],{"class":242,"line":318},14,[240,320,321],{},"While a session is stored, the app shall restore it on reload.\n",[240,323,325],{"class":242,"line":324},15,[240,326,270],{"emptyLinePlaceholder":269},[240,328,330],{"class":242,"line":329},16,[240,331,332],{},"#### auth.R2.S1 — Reload keeps the user signed in @simple\n",[240,334,336],{"class":242,"line":335},17,[240,337,338],{},"- Given a signed-in user\n",[240,340,342],{"class":242,"line":341},18,[240,343,344],{},"- When the page reloads\n",[240,346,348],{"class":242,"line":347},19,[240,349,350],{},"- Then the user is still signed in\n",[194,352,353,354,357],{},"The session context lists the capabilities (one line); the agent reads a capability's spec before changing its behaviour. The notation is described in ",[355,356,51],"a",{"href":52},".",[203,359,361],{"id":360},"changes","Changes",[194,363,364,365,368,369,372,373,376],{},"Complex work is a ",[198,366,367],{},"change"," in ",[210,370,371],{},"work\u002Fchanges\u002FNNN-slug\u002F",", created with ",[210,374,375],{},"agent-kit work new change \u003Cslug>",":",[378,379,380,393],"table",{},[381,382,383],"thead",{},[384,385,386,390],"tr",{},[387,388,389],"th",{},"File",[387,391,392],{},"What",[394,395,396,407,428,438],"tbody",{},[384,397,398,404],{},[399,400,401],"td",{},[210,402,403],{},"proposal.md",[399,405,406],{},"Why, what changes (in \u002F out), capabilities touched, open questions. The first artifact you approve.",[384,408,409,414],{},[399,410,411],{},[210,412,413],{},"specs\u002F\u003Ccapability>.md",[399,415,416,417,221,420,423,424,427],{},"Delta spec: ",[210,418,419],{},"## ADDED",[210,421,422],{},"## MODIFIED"," (the whole block as it must read after) and ",[210,425,426],{},"## REMOVED Requirements"," (with a reason).",[384,429,430,435],{},[399,431,432],{},[210,433,434],{},"plan.md",[399,436,437],{},"Files, schema \u002F RPC changes, decisions, risks.",[384,439,440,445],{},[399,441,442],{},[210,443,444],{},"tasks.md",[399,446,447],{},"Ordered tasks tagged with the scenario ids they cover, evidence under each, and a verification table.",[203,449,451],{"id":450},"merge","Merge",[194,453,454,455,376],{},"When the change is verified, ",[210,456,457],{},"agent-kit specs merge NNN",[459,460,461,469,472],"ul",{},[462,463,464,465,468],"li",{},"applies every delta of the change ",[198,466,467],{},"all or nothing"," — it refuses and names the conflict when a MODIFIED or REMOVED requirement is missing, or an ADDED id is taken or retired;",[462,470,471],{},"retires removed requirement ids and scenarios left out of a MODIFIED block (they are never reused, so old tests, QA runs and fixtures can't point at the wrong behaviour);",[462,473,474,475,478],{},"marks the proposal ",[210,476,477],{},"merged: \u003Cdate>"," and refreshes the QA checklist.",[194,480,481],{},"The change folder stays as the record of why the behaviour changed.",[203,483,485],{"id":484},"ids","Ids",[194,487,488,491,492,495],{},[210,489,490],{},"agent-kit specs next \u003Ccapability>"," hands out the next requirement id; ",[210,493,494],{},"agent-kit specs next \u003Ccapability>.R\u003Cn>"," the next scenario id. Both count living, retired and pending-delta ids, so two open changes don't collide.",[203,497,499],{"id":498},"tools","Tools",[378,501,502,512],{},[381,503,504],{},[384,505,506,509],{},[387,507,508],{},"Command",[387,510,511],{},"Does",[394,513,514,524,534,544],{},[384,515,516,521],{},[399,517,518],{},[210,519,520],{},"agent-kit specs lint [cap|NNN]",[399,522,523],{},"Checks the notation and the ids (exit 1 on errors).",[384,525,526,531],{},[399,527,528],{},[210,529,530],{},"agent-kit specs list",[399,532,533],{},"Capabilities with requirement and scenario counts.",[384,535,536,541],{},[399,537,538],{},[210,539,540],{},"agent-kit specs trace [NNN|cap]",[399,542,543],{},"Scenario → tests or ✅ checks.",[384,545,546,555],{},[399,547,548,551,552],{},[210,549,550],{},"agent-kit work status"," \u002F ",[210,553,554],{},"board",[399,556,557],{},"Active work and its next task.",[559,560,561],"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);}",{"title":236,"searchDepth":249,"depth":249,"links":563},[564,565,566,567,568],{"id":205,"depth":249,"text":206},{"id":360,"depth":249,"text":361},{"id":450,"depth":249,"text":451},{"id":484,"depth":249,"text":485},{"id":498,"depth":249,"text":499},"Spec-anchored SDD — living specs are the source of truth, changes carry deltas that merge into them.","md",null,{},{"icon":49},{"title":46,"description":569},"SsB-px23BSl0EzKHrptxglmAImTc1YmPrGCuzj95SDE",[577,579],{"title":41,"path":42,"stem":43,"description":578,"icon":44,"children":-1},"Every request goes through one of three lanes; the method decides how much proof a change needs.",{"title":51,"path":52,"stem":53,"description":580,"icon":54,"children":-1},"One standard notation at every step — EARS requirements, Given\u002FWhen\u002FThen scenarios, ZOMBIES tags, scenario ids in test names.",1793099612109]