[{"data":1,"prerenderedAt":812},["ShallowReactive",2],{"navigation:en":3,"\u002Fdocs\u002Ffireskills\u002Fmethodology\u002Fthree-gates:en":311},[4],{"title":5,"path":6,"stem":7,"children":8,"icon":10},"Nuxfire Docs","\u002Fdocs","docs\u002F0.index",[9,11,152],{"title":5,"path":6,"stem":7,"icon":10},"i-lucide-layout-grid",{"title":12,"path":13,"stem":14,"children":15,"icon":151},"SaaS Starter Kit","\u002Fdocs\u002Fsaas-starter-kit","docs\u002F1.saas-starter-kit\u002F0.index",[16,19,63,129],{"title":17,"path":13,"stem":14,"icon":18},"What is the SaaS Starter Kit?","i-lucide-info",{"title":20,"icon":21,"hide":22,"path":23,"stem":24,"children":25,"page":62},"Getting Started","i-lucide-play",true,"\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started","docs\u002F1.saas-starter-kit\u002F1.getting-started",[26,30,34,38,42,46,50,54,58],{"title":27,"path":28,"stem":29},"Quick Start","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Fquick-start","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F0.quick-start",{"title":31,"path":32,"stem":33},"Installation","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Finstallation","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F1.installation",{"title":35,"path":36,"stem":37},"Cloudflare Access","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Fcloudflare-access","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F2.cloudflare-access",{"title":39,"path":40,"stem":41},"Configuration","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Fconfiguration","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F3.configuration",{"title":43,"path":44,"stem":45},"Secrets","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Fsecrets","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F4.secrets",{"title":47,"path":48,"stem":49},"Environment Variables","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Fenvironment-variables","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F5.environment-variables",{"title":51,"path":52,"stem":53},"Deploy","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Fdeploy","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F6.deploy",{"title":55,"path":56,"stem":57},"Local Development","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Flocal-development","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F7.local-development",{"title":59,"path":60,"stem":61},"Project Structure","\u002Fdocs\u002Fsaas-starter-kit\u002Fgetting-started\u002Fproject-structure","docs\u002F1.saas-starter-kit\u002F1.getting-started\u002F8.project-structure",false,{"title":64,"icon":65,"hide":22,"path":66,"stem":67,"children":68,"page":62},"Features","i-lucide-box","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures","docs\u002F1.saas-starter-kit\u002F2.features",[69,73,77,81,85,89,93,97,101,105,109,113,117,121,125],{"title":70,"path":71,"stem":72},"Authentication","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fauth","docs\u002F1.saas-starter-kit\u002F2.features\u002F1.auth",{"title":74,"path":75,"stem":76},"Rate Limiting","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Frate-limiting","docs\u002F1.saas-starter-kit\u002F2.features\u002F10.rate-limiting",{"title":78,"path":79,"stem":80},"WebSockets","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fwebsockets","docs\u002F1.saas-starter-kit\u002F2.features\u002F11.websockets",{"title":82,"path":83,"stem":84},"Blog","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fblog","docs\u002F1.saas-starter-kit\u002F2.features\u002F14.blog",{"title":86,"path":87,"stem":88},"Documentation","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fdocumentation","docs\u002F1.saas-starter-kit\u002F2.features\u002F15.documentation",{"title":90,"path":91,"stem":92},"Analytics","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fanalytics","docs\u002F1.saas-starter-kit\u002F2.features\u002F16.analytics",{"title":94,"path":95,"stem":96},"Platform Admin Console","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fplatform-admin","docs\u002F1.saas-starter-kit\u002F2.features\u002F17.platform-admin",{"title":98,"path":99,"stem":100},"Database","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fdatabase","docs\u002F1.saas-starter-kit\u002F2.features\u002F2.database",{"title":102,"path":103,"stem":104},"Payments & Billing","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fpayments","docs\u002F1.saas-starter-kit\u002F2.features\u002F3.payments",{"title":106,"path":107,"stem":108},"Emails","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Femails","docs\u002F1.saas-starter-kit\u002F2.features\u002F4.emails",{"title":110,"path":111,"stem":112},"Notifications","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fnotifications","docs\u002F1.saas-starter-kit\u002F2.features\u002F5.notifications",{"title":114,"path":115,"stem":116},"Role-Based Access Control","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Frbac","docs\u002F1.saas-starter-kit\u002F2.features\u002F6.rbac",{"title":118,"path":119,"stem":120},"Async Jobs","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fasync-jobs","docs\u002F1.saas-starter-kit\u002F2.features\u002F7.async-jobs",{"title":122,"path":123,"stem":124},"Storage","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Fstorage","docs\u002F1.saas-starter-kit\u002F2.features\u002F8.storage",{"title":126,"path":127,"stem":128},"Internationalization","\u002Fdocs\u002Fsaas-starter-kit\u002Ffeatures\u002Finternationalization","docs\u002F1.saas-starter-kit\u002F2.features\u002F9.internationalization",{"title":130,"icon":131,"path":132,"stem":133,"children":134,"page":62},"Concepts","i-lucide-graduation-cap","\u002Fdocs\u002Fsaas-starter-kit\u002Fconcepts","docs\u002F1.saas-starter-kit\u002F3.concepts",[135,139,143,147],{"title":136,"path":137,"stem":138},"Technology Stack","\u002Fdocs\u002Fsaas-starter-kit\u002Fconcepts\u002Ftech-stack","docs\u002F1.saas-starter-kit\u002F3.concepts\u002F0.tech-stack",{"title":140,"path":141,"stem":142},"SST.dev","\u002Fdocs\u002Fsaas-starter-kit\u002Fconcepts\u002Fsst","docs\u002F1.saas-starter-kit\u002F3.concepts\u002F1.sst",{"title":144,"path":145,"stem":146},"NuxtHub","\u002Fdocs\u002Fsaas-starter-kit\u002Fconcepts\u002Fnuxt-hub","docs\u002F1.saas-starter-kit\u002F3.concepts\u002F2.nuxt-hub",{"title":148,"path":149,"stem":150},"Design System & Branding","\u002Fdocs\u002Fsaas-starter-kit\u002Fconcepts\u002Fdesign-system","docs\u002F1.saas-starter-kit\u002F3.concepts\u002F3.design-system","i-lucide-zap",{"title":153,"path":154,"stem":155,"children":156,"icon":159},"Fireskills","\u002Fdocs\u002Ffireskills","docs\u002F2.fireskills\u002F0.index",[157,160,219,249,275,293],{"title":158,"path":154,"stem":155,"icon":159},"What is Fireskills?","i-lucide-flame",{"title":20,"icon":21,"hide":22,"path":161,"stem":162,"children":163,"page":62},"\u002Fdocs\u002Ffireskills\u002Fgetting-started","docs\u002F2.fireskills\u002F1.getting-started",[164,167,171,175,179,183,187,191,195,199,203,207,211,215],{"title":27,"path":165,"stem":166},"\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fquick-start","docs\u002F2.fireskills\u002F1.getting-started\u002F00.quick-start",{"title":168,"path":169,"stem":170},"Workflow & Governance","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fworkflow","docs\u002F2.fireskills\u002F1.getting-started\u002F01.workflow",{"title":172,"path":173,"stem":174},"Project Context","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fproject-context","docs\u002F2.fireskills\u002F1.getting-started\u002F02.project-context",{"title":176,"path":177,"stem":178},"Step 0: Setup","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-setup","docs\u002F2.fireskills\u002F1.getting-started\u002F03.step-setup",{"title":180,"path":181,"stem":182},"Step 1: Inbox","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-inbox","docs\u002F2.fireskills\u002F1.getting-started\u002F04.step-inbox",{"title":184,"path":185,"stem":186},"Step 2: Backlog","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-backlog","docs\u002F2.fireskills\u002F1.getting-started\u002F05.step-backlog",{"title":188,"path":189,"stem":190},"Step 3: Specify","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-specify","docs\u002F2.fireskills\u002F1.getting-started\u002F06.step-specify",{"title":192,"path":193,"stem":194},"Step 4: Validate","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-validate","docs\u002F2.fireskills\u002F1.getting-started\u002F07.step-validate",{"title":196,"path":197,"stem":198},"Step 5: Tasks","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-tasks","docs\u002F2.fireskills\u002F1.getting-started\u002F08.step-tasks",{"title":200,"path":201,"stem":202},"Step 6: TDD\u002FBDD","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-tdd-bdd","docs\u002F2.fireskills\u002F1.getting-started\u002F09.step-tdd-bdd",{"title":204,"path":205,"stem":206},"Step 7: Implement","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-implement","docs\u002F2.fireskills\u002F1.getting-started\u002F10.step-implement",{"title":208,"path":209,"stem":210},"Step 8: Documentator","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fstep-documentator","docs\u002F2.fireskills\u002F1.getting-started\u002F11.step-documentator",{"title":212,"path":213,"stem":214},"Late Changes","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Flate-changes","docs\u002F2.fireskills\u002F1.getting-started\u002F12.late-changes",{"title":216,"path":217,"stem":218},"Other Entry Points","\u002Fdocs\u002Ffireskills\u002Fgetting-started\u002Fother-entry-points","docs\u002F2.fireskills\u002F1.getting-started\u002F13.other-entry-points",{"title":220,"icon":221,"hide":22,"path":222,"stem":223,"children":224,"page":62},"Methodology","i-lucide-git-branch","\u002Fdocs\u002Ffireskills\u002Fmethodology","docs\u002F2.fireskills\u002F2.methodology",[225,229,233,237,241,245],{"title":226,"path":227,"stem":228},"The Three Acts","\u002Fdocs\u002Ffireskills\u002Fmethodology\u002Fthree-acts","docs\u002F2.fireskills\u002F2.methodology\u002F0.three-acts",{"title":230,"path":231,"stem":232},"The Three Gates","\u002Fdocs\u002Ffireskills\u002Fmethodology\u002Fthree-gates","docs\u002F2.fireskills\u002F2.methodology\u002F1.three-gates",{"title":234,"path":235,"stem":236},"The Canonical Spec","\u002Fdocs\u002Ffireskills\u002Fmethodology\u002Fcanonical-spec","docs\u002F2.fireskills\u002F2.methodology\u002F2.canonical-spec",{"title":238,"path":239,"stem":240},"Lifecycle States","\u002Fdocs\u002Ffireskills\u002Fmethodology\u002Flifecycle-states","docs\u002F2.fireskills\u002F2.methodology\u002F3.lifecycle-states",{"title":242,"path":243,"stem":244},"Effort Scale","\u002Fdocs\u002Ffireskills\u002Fmethodology\u002Feffort-scale","docs\u002F2.fireskills\u002F2.methodology\u002F4.effort-scale",{"title":246,"path":247,"stem":248},"Milestones & Governance","\u002Fdocs\u002Ffireskills\u002Fmethodology\u002Fgovernance-and-milestones","docs\u002F2.fireskills\u002F2.methodology\u002F5.governance-and-milestones",{"title":250,"icon":251,"hide":22,"path":252,"stem":253,"children":254,"page":62},"Skills","i-lucide-layers","\u002Fdocs\u002Ffireskills\u002Fskills","docs\u002F2.fireskills\u002F3.skills",[255,259,263,267,271],{"title":256,"path":257,"stem":258},"Catalog","\u002Fdocs\u002Ffireskills\u002Fskills\u002Fcatalog","docs\u002F2.fireskills\u002F3.skills\u002F0.catalog",{"title":260,"path":261,"stem":262},"Act I: Define","\u002Fdocs\u002Ffireskills\u002Fskills\u002Fact-1-define","docs\u002F2.fireskills\u002F3.skills\u002F1.act-1-define",{"title":264,"path":265,"stem":266},"Act II: Design & Prove","\u002Fdocs\u002Ffireskills\u002Fskills\u002Fact-2-design-prove","docs\u002F2.fireskills\u002F3.skills\u002F2.act-2-design-prove",{"title":268,"path":269,"stem":270},"Act III: Deliver","\u002Fdocs\u002Ffireskills\u002Fskills\u002Fact-3-deliver","docs\u002F2.fireskills\u002F3.skills\u002F3.act-3-deliver",{"title":272,"path":273,"stem":274},"Governance & Decisions","\u002Fdocs\u002Ffireskills\u002Fskills\u002Fgovernance-and-decisions","docs\u002F2.fireskills\u002F3.skills\u002F4.governance-and-decisions",{"title":276,"icon":277,"hide":22,"path":278,"stem":279,"children":280,"page":62},"Specialists","i-lucide-sparkles","\u002Fdocs\u002Ffireskills\u002Fspecialists","docs\u002F2.fireskills\u002F4.specialists",[281,285,289],{"title":282,"path":283,"stem":284},"Overview","\u002Fdocs\u002Ffireskills\u002Fspecialists\u002Foverview","docs\u002F2.fireskills\u002F4.specialists\u002F0.overview",{"title":286,"path":287,"stem":288},"Nuxfire Stack","\u002Fdocs\u002Ffireskills\u002Fspecialists\u002Fnuxfire-stack","docs\u002F2.fireskills\u002F4.specialists\u002F1.nuxfire-stack",{"title":290,"path":291,"stem":292},"Engineering Specialists","\u002Fdocs\u002Ffireskills\u002Fspecialists\u002Fengineering-specialists","docs\u002F2.fireskills\u002F4.specialists\u002F2.engineering-specialists",{"title":294,"icon":295,"hide":22,"path":296,"stem":297,"children":298,"page":62},"CLI & Tooling","i-lucide-terminal","\u002Fdocs\u002Ffireskills\u002Fcli","docs\u002F2.fireskills\u002F5.cli",[299,303,307],{"title":300,"path":301,"stem":302},"CLI Overview","\u002Fdocs\u002Ffireskills\u002Fcli\u002Foverview","docs\u002F2.fireskills\u002F5.cli\u002F0.overview",{"title":304,"path":305,"stem":306},"Commands","\u002Fdocs\u002Ffireskills\u002Fcli\u002Fcommands","docs\u002F2.fireskills\u002F5.cli\u002F1.commands",{"title":308,"path":309,"stem":310},"Safety Scripts","\u002Fdocs\u002Ffireskills\u002Fcli\u002Fgovernance-scripts","docs\u002F2.fireskills\u002F5.cli\u002F2.governance-scripts",{"id":312,"title":313,"body":314,"description":806,"extension":807,"meta":808,"navigation":809,"path":231,"seo":810,"stem":232,"__hash__":811},"docs\u002Fdocs\u002F2.fireskills\u002F2.methodology\u002F1.three-gates.md","The Three Quality Gates",{"type":315,"value":316,"toc":800},"minimark",[317,334,381,399,402,407,434,437,544,554,558,574,650,654,676,751,753,757,786,796],[318,319,320,321,325,326,329,330,333],"p",{},"Quality gates are recorded in the spec header, in the fields ",[322,323,324],"code",{},"Definition Gate",", ",[322,327,328],{},"Plan Gate"," and ",[322,331,332],{},"Delivery Gate",". A skill sets a gate only with the evidence that gate requires; a later gate never stays approved on top of an invalidated earlier one.",[335,336,341],"pre",{"className":337,"code":338,"language":339,"meta":340,"style":340},"language-markdown shiki shiki-themes material-theme-lighter github-light github-dark monokai","| Campo | Valor |\n| --- | --- |\n| Status | Implementing |\n| Definition Gate | Passed |\n| Plan Gate | Passed |\n| Delivery Gate | In Progress |\n","markdown","",[322,342,343,351,357,363,369,375],{"__ignoreMap":340},[344,345,348],"span",{"class":346,"line":347},"line",1,[344,349,350],{},"| Campo | Valor |\n",[344,352,354],{"class":346,"line":353},2,[344,355,356],{},"| --- | --- |\n",[344,358,360],{"class":346,"line":359},3,[344,361,362],{},"| Status | Implementing |\n",[344,364,366],{"class":346,"line":365},4,[344,367,368],{},"| Definition Gate | Passed |\n",[344,370,372],{"class":346,"line":371},5,[344,373,374],{},"| Plan Gate | Passed |\n",[344,376,378],{"class":346,"line":377},6,[344,379,380],{},"| Delivery Gate | In Progress |\n",[318,382,383,384,387,388,325,391,394,395,398],{},"Values seen in the flow: ",[322,385,386],{},"Pending"," (not evaluated), ",[322,389,390],{},"Passed",[322,392,393],{},"Failed"," (the last check did not pass) and, for the Delivery Gate while work is underway, ",[322,396,397],{},"In Progress",".",[400,401],"hr",{},[403,404,406],"h2",{"id":405},"_1-definition-gate-closes-act-i","1. Definition Gate (closes Act I)",[318,408,409,410,413,414,417,418,329,421,424,425,417,428,430,431,398],{},"Owner: ",[322,411,412],{},"$fireskill-04-validate",". Result ",[322,415,416],{},"READY"," sets ",[322,419,420],{},"Definition Gate: Passed",[322,422,423],{},"Status: Defined","; ",[322,426,427],{},"NOT READY",[322,429,393],{}," and keeps ",[322,432,433],{},"Draft",[318,435,436],{},"What it requires:",[438,439,440,459,488,494,515,528],"ol",{},[441,442,443,447,448,451,452,455,456,398],"li",{},[444,445,446],"strong",{},"Format",": ",[322,449,450],{},"Formato: Specsfy\u002F2.0",", the three acts in order, slug equal to the directory, package with only ",[322,453,454],{},"spec.md"," and optional ",[322,457,458],{},"research\u002F",[441,460,461,464,465,471,472,325,475,329,478,481,482,484,485,398],{},[444,462,463],{},"Coverage",": at least ",[444,466,467,468],{},"three distinct ",[322,469,470],{},"AC"," for the whole feature and for each ",[322,473,474],{},"US",[322,476,477],{},"FR",[322,479,480],{},"NFR",", counted only when the ",[322,483,470],{}," declares the ID in ",[322,486,487],{},"**Cobre**",[441,489,490,493],{},[444,491,492],{},"Scenarios",": Gherkin Given\u002FWhen\u002FThen in the spec, associated with requirements.",[441,495,496,499,500,503,504,325,507,510,511,514],{},[444,497,498],{},"Interface"," (when ",[322,501,502],{},"Interface para pessoas: Sim","): section 10 with stack, screens, information flow, menus, forms and actions, composition, components, states and accessibility. A CRUD must declare ",[322,505,506],{},"PageHeader",[322,508,509],{},"UTable",", the ",[322,512,513],{},"ID"," column, edit and delete.",[441,516,517,520,521,524,525,398],{},[444,518,519],{},"Data and context",": a change of stack or persistence must be in the Definition of Done for ",[322,522,523],{},".fireskills\u002FSTACK.md"," or ",[322,526,527],{},".fireskills\u002FDATABASE.md",[441,529,530,447,533,536,537,540,541,543],{},[444,531,532],{},"Structural validator",[322,534,535],{},"node fireskills\u002Fskills\u002Ffireskill-04-validate\u002Fscripts\u002Fvalidate_spec.mjs specs\u002F\u003Cstate>\u002F\u003CNNNN>-\u003Cslug>\u002Fspec.md"," (with ",[322,538,539],{},"--allow-draft"," while still ",[322,542,433],{},").",[318,545,546,549,550,398],{},[322,547,548],{},"bun run fireskill validate"," is a quick linter you may run too, but it is not this gate. See ",[551,552,553],"a",{"href":193},"Step 4",[403,555,557],{"id":556},"_2-plan-gate-closes-act-ii","2. Plan Gate (closes Act II)",[318,559,560,561,329,564,567,568,417,571,398],{},"Owners: ",[322,562,563],{},"$fireskill-05-tasks",[322,565,566],{},"$fireskill-06-tdd-bdd",". ",[322,569,570],{},"Plan Gate: Passed",[322,572,573],{},"Status: Planned",[438,575,576,597,611,625,632,638],{},[441,577,578,579,325,582,325,585,325,588,325,591,325,594,543],{},"Atomic tasks in section 14 with the six-item checklist (",[322,580,581],{},"PREP",[322,583,584],{},"EXECUTE",[322,586,587],{},"VERIFY",[322,589,590],{},"VISUAL",[322,592,593],{},"EVIDENCE",[322,595,596],{},"IMPROVE",[441,598,599,600,603,604,606,607,610],{},"One ",[322,601,602],{},"[TEST] [TDD]"," task per ",[322,605,470],{},"; every ",[322,608,609],{},"[CODE]"," task depends on its TDD predecessor.",[441,612,613,614,617,618,620,621,620,623,398],{},"Executable Vitest cases, each with its own ",[322,615,616],{},"\u002F\u002F SPECSFY:"," marker, at least three per feature\u002F",[322,619,474],{},"\u002F",[322,622,477],{},[322,624,480],{},[441,626,627,628,631],{},"A ",[444,629,630],{},"valid RED"," observed: the tests fail because the behavior is missing, not because of syntax or environment.",[441,633,627,634,637],{},[322,635,636],{},"[CODE] [MIGRATION]"," task for every schema change.",[441,639,640,643,644,647,648,398],{},[322,641,642],{},"validate_tasks.mjs"," (and ",[322,645,646],{},"validate_interface_tasks.mjs"," for screens) pass without ",[322,649,539],{},[403,651,653],{"id":652},"_3-delivery-gate-closes-act-iii","3. Delivery Gate (closes Act III)",[318,655,409,656,659,660,567,662,417,665,668,669,672,673,398],{},[322,657,658],{},"$fireskill-07-implement",", with the final acceptance by ",[322,661,412],{},[322,663,664],{},"Delivery Gate: Passed",[322,666,667],{},"Status: Reviewing","; the acceptance then moves the spec to ",[322,670,671],{},"completed"," with ",[322,674,675],{},"Status: Complete",[438,677,678,681,688,700,710,715,726,737],{},[441,679,680],{},"All tasks of section 14 checked, with evidence for each.",[441,682,683,684,687],{},"Whole suite green: ",[322,685,686],{},"bun run test"," (repository root).",[441,689,690,691,325,694,329,697,398],{},"Types clean: in ",[322,692,693],{},"apps\u002Fapp",[322,695,696],{},"bun run typecheck",[322,698,699],{},"bunx vue-tsc --noEmit -p server\u002Ftsconfig.json",[441,701,702,703,325,705,325,707,709],{},"Traceability: every ",[322,704,470],{},[322,706,477],{},[322,708,480],{}," and Definition of Done item has current evidence; no open tasks, placeholders or skipped tests.",[441,711,712,714],{},[322,713,590],{}," done for every task with a screen.",[441,716,717,718,721,722,725],{},"Context monitor without ",[322,719,720],{},"PENDING",", and ",[322,723,724],{},"build_documentation.mjs --check"," passing.",[441,727,728,729,732,733,736],{},"For each ",[322,730,731],{},"[MIGRATION]",": the file, the command that applied it to the ",[444,734,735],{},"test"," database and the state query.",[441,738,739,740,524,743,746,747,750],{},"For changes in ",[322,741,742],{},"apps\u002Ffunctions",[322,744,745],{},"layers",", a real ",[322,748,749],{},"sst deploy"," is the check that matters. It needs your explicit authorization; the flow does not run it on its own.",[400,752],{},[403,754,756],{"id":755},"invalidation","Invalidation",[758,759,760,768],"ul",{},[441,761,762,763,765,766,398],{},"A change of requirements, scenarios, scope, data, security or interface sends the spec back to ",[322,764,433],{},": all three gates become ",[322,767,386],{},[441,769,770,771,447,774,776,777,424,779,329,781,783,784,398],{},"A change only of tasks, solution or test strategy sends it back to ",[322,772,773],{},"Defined",[322,775,324],{}," stays ",[322,778,390],{},[322,780,328],{},[322,782,332],{}," become ",[322,785,386],{},[318,787,788,789,792,793,398],{},"These moves are made by ",[322,790,791],{},"$fireskill-update-spec",". See ",[551,794,795],{"href":213},"Late changes",[797,798,799],"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 .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}",{"title":340,"searchDepth":353,"depth":353,"links":801},[802,803,804,805],{"id":405,"depth":353,"text":406},{"id":556,"depth":353,"text":557},{"id":652,"depth":353,"text":653},{"id":755,"depth":353,"text":756},"The checkpoints recorded in the spec header that stop unverified work from advancing.","md",{},{"title":230},{"title":313,"description":806},"DMiUH8xM3aFRRZBFRq5qjssva9KE5nWcagqga_UINRY",1790707495089]