[{"data":1,"prerenderedAt":924},["ShallowReactive",2],{"navigation:en":3,"\u002Fdocs\u002Ffireskills\u002Fmethodology\u002Fcanonical-spec: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":918,"extension":919,"meta":920,"navigation":921,"path":235,"seo":922,"stem":236,"__hash__":923},"docs\u002Fdocs\u002F2.fireskills\u002F2.methodology\u002F2.canonical-spec.md","The Canonical Specification",{"type":315,"value":316,"toc":907},"minimark",[317,348,351,356,366,395,397,401,419,542,582,584,588,639,662,667,678,745,752,756,778,782,822,832,836,839,851,858,860,864,903],[318,319,320,324,325,328,329,328,332,335,336,339,340,343,344,347],"p",{},[321,322,323],"code",{},"specs\u002F\u003Cstate>\u002F\u003CNNNN>-\u003Cslug>\u002Fspec.md"," is the single normative source for a slice of work. The parallel files ",[321,326,327],{},"plan.md",", ",[321,330,331],{},"tasks.md",[321,333,334],{},"research.md"," and ",[321,337,338],{},"data-model.md"," are not used. The file is created from the template ",[321,341,342],{},"fireskills\u002Fskills\u002Ftemplates\u002FSpec.md"," by ",[321,345,346],{},"iniciar_spec.mjs","; you do not write it from scratch.",[349,350],"hr",{},[352,353,355],"h2",{"id":354},"directory-structure","Directory structure",[357,358,364],"pre",{"className":359,"code":361,"language":362,"meta":363},[360],"language-text","specs\u002F\n├── inbox\u002F\n│   └── 2026-09-18-174245-convite-de-membros-por-e-mail.md\n├── backlog\u002F\n│   └── 0001-convite-de-membros-por-e-mail.md\n├── milestones\u002F            (only when an MVP is imported)\n├── draft\u002F\n├── defined\u002F\n├── planned\u002F\n├── in-progress\u002F\n├── review\u002F\n└── completed\u002F\n    └── 0001-convite-de-membros-por-e-mail\u002F\n        ├── spec.md\n        └── research\u002F      (optional)\n","text","",[321,365,361],{"__ignoreMap":363},[367,368,369,379,382,392],"ul",{},[370,371,372,335,375,378],"li",{},[321,373,374],{},"inbox\u002F",[321,376,377],{},"backlog\u002F"," hold notes and briefs; they are not normative.",[370,380,381],{},"A spec exists in exactly one state folder; the folder is the operational state.",[370,383,384,387,388,391],{},[321,385,386],{},"research\u002F"," holds only evidence that was actually consulted (copies, snapshots, contracts, examples) and is indexed inside ",[321,389,390],{},"spec.md",". It holds no production code or tests.",[370,393,394],{},"Nothing else is allowed in the spec package.",[349,396],{},[352,398,400],{"id":399},"the-header","The header",[318,402,403,404,407,408,411,412,415,416,418],{},"A two-column Markdown table, ",[321,405,406],{},"Campo"," \u002F ",[321,409,410],{},"Valor"," (do not convert it to ",[321,413,414],{},"**Campo**: valor"," lines). Real output of ",[321,417,346],{},":",[357,420,424],{"className":421,"code":422,"language":423,"meta":363,"style":363},"language-markdown shiki shiki-themes material-theme-lighter github-light github-dark monokai","# Especificação integrada: Convite de membros por e-mail\n\n| Campo | Valor |\n| --- | --- |\n| Formato | Specsfy\u002F2.0 |\n| ID | SPEC-0001 |\n| Slug | 0001-convite-de-membros-por-e-mail |\n| Status | Draft |\n| Effort | 1 |\n| Effort updated at | 2026-09-18 |\n| Effort rationale | Estimativa inicial; revisar durante a descoberta. |\n| ClickUp Task | |\n| Milestones | |\n| Definition Gate | Pending |\n| Plan Gate | Pending |\n| Delivery Gate | Pending |\n| Evidence Contract | 1 |\n| Interface para pessoas | A definir |\n| Atualizada em | 2026-09-18 |\n","markdown",[321,425,426,434,440,446,452,458,464,470,476,482,488,494,500,506,512,518,524,530,536],{"__ignoreMap":363},[427,428,431],"span",{"class":429,"line":430},"line",1,[427,432,433],{},"# Especificação integrada: Convite de membros por e-mail\n",[427,435,437],{"class":429,"line":436},2,[427,438,439],{"emptyLinePlaceholder":22},"\n",[427,441,443],{"class":429,"line":442},3,[427,444,445],{},"| Campo | Valor |\n",[427,447,449],{"class":429,"line":448},4,[427,450,451],{},"| --- | --- |\n",[427,453,455],{"class":429,"line":454},5,[427,456,457],{},"| Formato | Specsfy\u002F2.0 |\n",[427,459,461],{"class":429,"line":460},6,[427,462,463],{},"| ID | SPEC-0001 |\n",[427,465,467],{"class":429,"line":466},7,[427,468,469],{},"| Slug | 0001-convite-de-membros-por-e-mail |\n",[427,471,473],{"class":429,"line":472},8,[427,474,475],{},"| Status | Draft |\n",[427,477,479],{"class":429,"line":478},9,[427,480,481],{},"| Effort | 1 |\n",[427,483,485],{"class":429,"line":484},10,[427,486,487],{},"| Effort updated at | 2026-09-18 |\n",[427,489,491],{"class":429,"line":490},11,[427,492,493],{},"| Effort rationale | Estimativa inicial; revisar durante a descoberta. |\n",[427,495,497],{"class":429,"line":496},12,[427,498,499],{},"| ClickUp Task | |\n",[427,501,503],{"class":429,"line":502},13,[427,504,505],{},"| Milestones | |\n",[427,507,509],{"class":429,"line":508},14,[427,510,511],{},"| Definition Gate | Pending |\n",[427,513,515],{"class":429,"line":514},15,[427,516,517],{},"| Plan Gate | Pending |\n",[427,519,521],{"class":429,"line":520},16,[427,522,523],{},"| Delivery Gate | Pending |\n",[427,525,527],{"class":429,"line":526},17,[427,528,529],{},"| Evidence Contract | 1 |\n",[427,531,533],{"class":429,"line":532},18,[427,534,535],{},"| Interface para pessoas | A definir |\n",[427,537,539],{"class":429,"line":538},19,[427,540,541],{},"| Atualizada em | 2026-09-18 |\n",[318,543,544,547,548,328,551,328,554,328,557,328,560,328,563,566,567,570,571,574,575,578,579,581],{},[321,545,546],{},"Status"," follows the folder: ",[321,549,550],{},"Draft",[321,552,553],{},"Defined",[321,555,556],{},"Planned",[321,558,559],{},"Implementing",[321,561,562],{},"Reviewing",[321,564,565],{},"Complete",". ",[321,568,569],{},"Interface para pessoas"," is ",[321,572,573],{},"Sim"," or ",[321,576,577],{},"Não","; ",[321,580,573],{}," makes section 10 mandatory.",[349,583],{},[352,585,587],{"id":586},"the-three-acts-and-18-sections","The three acts and 18 sections",[589,590,591,604],"table",{},[592,593,594],"thead",{},[595,596,597,601],"tr",{},[598,599,600],"th",{},"Act",[598,602,603],{},"Sections",[605,606,607,619,629],"tbody",{},[595,608,609,616],{},[610,611,612],"td",{},[613,614,615],"strong",{},"Ato I — Definir",[610,617,618],{},"1 Problema e resultado · 2 Research e esclarecimentos · 3 Escopo e atores · 4 Princípios e restrições do projeto · 5 Histórias de usuário · 6 Cenários BDD de aceite · 7 Requisitos",[595,620,621,626],{},[610,622,623],{},[613,624,625],{},"Ato II — Projetar e provar",[610,627,628],{},"8 Plano técnico · 9 Modelo de dados · 10 Interfaces e contratos · 11 Estratégia TDD · 12 Plano de testes e rastreabilidade · 13 Validações · 14 Tarefas · 15 Ordem de execução",[595,630,631,636],{},[610,632,633],{},[613,634,635],{},"Ato III — Entregar e validar",[610,637,638],{},"16 Dependências, riscos e suposições · 17 Decisões · 18 Definition of Done",[318,640,641,642,328,645,328,648,328,651,328,654,657,658,661],{},"IDs are three digits and never renumbered: ",[321,643,644],{},"US-001",[321,646,647],{},"FR-001",[321,649,650],{},"NFR-001",[321,652,653],{},"AC-001",[321,655,656],{},"DEC-001",", tasks ",[321,659,660],{},"T001",".",[663,664,666],"h3",{"id":665},"scenarios-section-6","Scenarios (section 6)",[318,668,669,670,673,674,677],{},"Each ",[321,671,672],{},"AC"," is a heading, a ",[321,675,676],{},"**Cobre**"," line with the IDs it covers, and a Gherkin block:",[357,679,681],{"className":421,"code":680,"language":423,"meta":363,"style":363},"#### AC-001 — [comportamento]\n\n**Cobre**: US-001, FR-001, NFR-001\n\n```gherkin\n@US-001 @FR-001 @NFR-001 @AC-001\nFeature: [capacidade observável]\n\n  Scenario: [caminho feliz aceito]\n    Given [estado inicial]\n    When [ação]\n    Then [resultado observável]\n```\n",[321,682,683,688,692,697,701,706,711,716,720,725,730,735,740],{"__ignoreMap":363},[427,684,685],{"class":429,"line":430},[427,686,687],{},"#### AC-001 — [comportamento]\n",[427,689,690],{"class":429,"line":436},[427,691,439],{"emptyLinePlaceholder":22},[427,693,694],{"class":429,"line":442},[427,695,696],{},"**Cobre**: US-001, FR-001, NFR-001\n",[427,698,699],{"class":429,"line":448},[427,700,439],{"emptyLinePlaceholder":22},[427,702,703],{"class":429,"line":454},[427,704,705],{},"```gherkin\n",[427,707,708],{"class":429,"line":460},[427,709,710],{},"@US-001 @FR-001 @NFR-001 @AC-001\n",[427,712,713],{"class":429,"line":466},[427,714,715],{},"Feature: [capacidade observável]\n",[427,717,718],{"class":429,"line":472},[427,719,439],{"emptyLinePlaceholder":22},[427,721,722],{"class":429,"line":478},[427,723,724],{},"  Scenario: [caminho feliz aceito]\n",[427,726,727],{"class":429,"line":484},[427,728,729],{},"    Given [estado inicial]\n",[427,731,732],{"class":429,"line":490},[427,733,734],{},"    When [ação]\n",[427,736,737],{"class":429,"line":496},[427,738,739],{},"    Then [resultado observável]\n",[427,741,742],{"class":429,"line":502},[427,743,744],{},"```\n",[318,746,747,748,751],{},"Gherkin lives only here. No ",[321,749,750],{},".feature"," file is created or run.",[663,753,755],{"id":754},"interface-section-10","Interface (section 10)",[318,757,758,759,762,763,328,766,769,770,773,774,777],{},"When there is a screen: stack and conventions, screens and responsibilities, information flow and navigation, menus, forms and actions, composition, the Vue and ",[321,760,761],{},"@nuxt\u002Fui"," components chosen, states and accessibility, the CRUD contract (",[321,764,765],{},"PageHeader",[321,767,768],{},"UTable"," with ",[321,771,772],{},"enterpriseTableUi",", visible ",[321,775,776],{},"ID",", row link, edit and delete) and the visual review.",[663,779,781],{"id":780},"tasks-section-14","Tasks (section 14)",[357,783,785],{"className":421,"code":784,"language":423,"meta":363,"style":363},"- [ ] T001 [TEST] [TDD] [US-001] Derivar teste Vitest do BDD em layers\u002Fteams\u002Fshared\u002Futils\u002Fabilities.test.ts — Refs: FR-002, AC-003 — Depends: none\n  - [ ] **PREP**: …\n  - [ ] **EXECUTE**: …\n  - [ ] **VERIFY**: …\n  - [ ] **VISUAL**: …\n  - [ ] **EVIDENCE**: …\n  - [ ] **IMPROVE**: …\n",[321,786,787,792,797,802,807,812,817],{"__ignoreMap":363},[427,788,789],{"class":429,"line":430},[427,790,791],{},"- [ ] T001 [TEST] [TDD] [US-001] Derivar teste Vitest do BDD em layers\u002Fteams\u002Fshared\u002Futils\u002Fabilities.test.ts — Refs: FR-002, AC-003 — Depends: none\n",[427,793,794],{"class":429,"line":436},[427,795,796],{},"  - [ ] **PREP**: …\n",[427,798,799],{"class":429,"line":442},[427,800,801],{},"  - [ ] **EXECUTE**: …\n",[427,803,804],{"class":429,"line":448},[427,805,806],{},"  - [ ] **VERIFY**: …\n",[427,808,809],{"class":429,"line":454},[427,810,811],{},"  - [ ] **VISUAL**: …\n",[427,813,814],{"class":429,"line":460},[427,815,816],{},"  - [ ] **EVIDENCE**: …\n",[427,818,819],{"class":429,"line":466},[427,820,821],{},"  - [ ] **IMPROVE**: …\n",[318,823,824,825,828,829,661],{},"A change to the database includes a ",[321,826,827],{},"[CODE] [MIGRATION]"," task pointing at a versioned file in ",[321,830,831],{},"apps\u002Ffunctions\u002Fsrc\u002Fdatabase\u002Fmigrations\u002F",[663,833,835],{"id":834},"tests-and-traceability-sections-1112","Tests and traceability (sections 11–12)",[318,837,838],{},"Each executable Vitest case carries its own marker beside its definition:",[357,840,844],{"className":841,"code":842,"language":843,"meta":363,"style":363},"language-ts shiki shiki-themes material-theme-lighter github-light github-dark monokai","\u002F\u002F SPECSFY: US-001 FR-001 AC-001\n","ts",[321,845,846],{"__ignoreMap":363},[427,847,848],{"class":429,"line":430},[427,849,842],{"class":850},"ss7Ak",[318,852,853,854,857],{},"The marker is a comment; it is not part of the test title. The ",[321,855,856],{},"Evidência RED-GREEN-REFACTOR"," table records each observed RED and GREEN.",[349,859],{},[352,861,863],{"id":862},"anti-patterns","Anti-patterns",[367,865,866,877,884,891],{},[370,867,868,869,328,871,328,873,876],{},"Creating ",[321,870,327],{},[321,872,331],{},[321,874,875],{},"todo.md"," or any other parallel file.",[370,878,879,880,883],{},"Tests without a ",[321,881,882],{},"\u002F\u002F SPECSFY:"," marker, or one shared marker for a whole file (it counts as one case).",[370,885,886,887,890],{},"A task without the six checklist items, or with ",[321,888,889],{},"VISUAL"," missing.",[370,892,893,894,574,897,900,901,661],{},"Leaving template examples, ",[321,895,896],{},"TBD",[321,898,899],{},"TODO"," in a spec marked ",[321,902,553],{},[904,905,906],"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);}html pre.shiki code .ss7Ak, html code.shiki .ss7Ak{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit;--shiki-sepia:#88846F;--shiki-sepia-font-style:inherit}",{"title":363,"searchDepth":436,"depth":436,"links":908},[909,910,911,917],{"id":354,"depth":436,"text":355},{"id":399,"depth":436,"text":400},{"id":586,"depth":436,"text":587,"children":912},[913,914,915,916],{"id":665,"depth":442,"text":666},{"id":754,"depth":442,"text":755},{"id":780,"depth":442,"text":781},{"id":834,"depth":442,"text":835},{"id":862,"depth":436,"text":863},"The real anatomy of specs\u002F\u003Cstate>\u002F\u003CNNNN>-\u003Cslug>\u002Fspec.md.","md",{},{"title":234},{"title":313,"description":918},"SHo8Wkh_u5AdVXz4JoNQtkkT1xsgi2dkur8Swxnz08E",1790707495183]