[{"data":1,"prerenderedAt":1138},["ShallowReactive",2],{"page-\u002Fv1\u002Fadopt\u002Fapply\u002Fspiral-full":3},{"id":4,"title":5,"body":6,"description":1131,"extension":1132,"meta":1133,"navigation":847,"path":1134,"seo":1135,"stem":1136,"__hash__":1137},"content\u002Fv1\u002Fadopt\u002Fapply\u002Fspiral-full.md","Spiral one-shot apply (full architecture)",{"type":7,"value":8,"toc":1104},"minimark",[9,14,58,61,66,73,128,133,143,145,149,161,163,167,171,182,186,192,205,209,301,308,312,318,322,379,383,390,443,473,477,519,539,543,551,555,561,565,571,575,586,590,599,601,605,658,661,729,735,737,741,770,772,776,779,781,785,787,791,796,799,805,809,897,901,930,934,999,1003,1023,1027,1041,1045,1062,1066,1074,1078,1089,1093,1100],[10,11,13],"h1",{"id":12},"modular-hexagonal-ddd-one-shot-apply-spiral","Modular Hexagonal DDD — ONE-SHOT APPLY (spiral)",[15,16,17],"blockquote",{},[18,19,20,24,25,28,29,32,33,37,32,40,43,44,32,47,50,53,54,57],"p",{},[21,22,23],"strong",{},"Self-contained."," An AI agent should fetch ",[21,26,27],{},"this file only"," and execute it.\n",[21,30,31],{},"Core version:"," ",[34,35,36],"code",{},"1.0.0-draft",[21,38,39],{},"Short HTML entry:",[34,41,42],{},"\u002Fspiral"," · ",[21,45,46],{},"This file:",[34,48,49],{},"\u002Fapply\u002Fspiral.full.md",[21,51,52],{},"AI-neutral:"," assistant files are optional; architecture does not require any AI vendor.\n",[21,55,56],{},"Host baseline researched:"," see Part C header (versions as of 2026-08).",[59,60],"hr",{},[62,63,65],"h2",{"id":64},"_0-agent-mandate","0. Agent mandate",[18,67,68,69,72],{},"You are bootstrapping a ",[21,70,71],{},"spiral application repository"," (not the docs site).",[74,75,76,80,87,98,104,121],"ol",{},[77,78,79],"li",{},"Treat this document as the complete working standard for this session.",[77,81,82,83,86],{},"Execute ",[21,84,85],{},"Part D"," in order after reading Parts A–C.",[77,88,89,90,93,94,97],{},"When writing module code, obey ",[21,91,92],{},"Part B (Core)"," and ",[21,95,96],{},"Part C (host)",".",[77,99,100,103],{},[21,101,102],{},"Do not create a git commit"," unless the human explicitly asks.",[77,105,106,107,110,111,110,114,110,117,120],{},"Rename illustrative contexts ",[34,108,109],{},"Ordering",", ",[34,112,113],{},"Warehouse",[34,115,116],{},"Directory",[34,118,119],{},"Identity"," to the human’s domains.",[77,122,123,124,127],{},"If AI vendor is ",[34,125,126],{},"none",", skip Part E.",[129,130,132],"h3",{"id":131},"programmer-prompt","Programmer prompt",[134,135,141],"pre",{"className":136,"code":138,"language":139,"meta":140},[137],"language-text","Apply Modular Hexagonal DDD from \u003CORIGIN>\u002Fapply\u002Fspiral.full.md\nAI assistant: \u003Ccursor|claude|gemini|copilot|generic|none>\nBounded contexts: \u003Clist>\nDo not commit unless I ask.\n","text","",[34,142,138],{"__ignoreMap":140},[59,144],{},[10,146,148],{"id":147},"part-a-design-test","Part A — Design test",[15,150,151],{},[18,152,153,154,93,157,160],{},"If the peer module is deleted and replaced by HTTP, does this module’s ",[21,155,156],{},"Application",[21,158,159],{},"Domain"," still compile?",[59,162],{},[10,164,166],{"id":165},"part-b-complete-core-architecture","Part B — Complete Core architecture",[62,168,170],{"id":169},"b1-purpose","B1. Purpose",[18,172,173,174,177,178,181],{},"Build applications as ",[21,175,176],{},"replaceable bounded-context modules"," using Hexagonal Architecture (ports & adapters) + DDD. This docs site is the ",[21,179,180],{},"sole canon","; consuming repos keep thin pointers, not a forked essay.",[62,183,185],{"id":184},"b2-module-layout-must","B2. Module layout (MUST)",[134,187,190],{"className":188,"code":189,"language":139,"meta":140},[137],"{Module}\u002F\n  Application\u002F     # UseCases, Application DTO, Providers \u002F composition root\n  Domain\u002F          # Entities, Ports, Events, Enums, Domain DTOs\n  Infrastructure\u002F  # Persistence adapters, ExternalServices (ACL), Config, listeners\n  UI\u002F              # Controllers, Routes, validation, admin UI, console\nShared\u002F            # Promoted technical ports\u002Fadapters only (after promote rule)\n",[34,191,189],{"__ignoreMap":140},[18,193,194,195,110,198,201,202],{},"Host roots vary (",[34,196,197],{},"app\u002FModules",[34,199,200],{},"src\u002FModules",", packages). ",[21,203,204],{},"Roles do not.",[62,206,208],{"id":207},"b3-strictness-ladder-must","B3. Strictness ladder (MUST)",[210,211,212,231],"table",{},[213,214,215],"thead",{},[216,217,218,222,225,228],"tr",{},[219,220,221],"th",{},"Strictness",[219,223,224],{},"Area",[219,226,227],{},"Allowed",[219,229,230],{},"Forbidden",[232,233,234,250,269,285],"tbody",{},[216,235,236,240,244,247],{},[237,238,239],"td",{},"Hardest",[237,241,242],{},[21,243,159],{},[237,245,246],{},"Own Domain types + Shared kernel ports",[237,248,249],{},"Other modules; host facades\u002Fhelpers; ORM; framework traits on Domain Events",[216,251,252,255,260,263],{},[237,253,254],{},"Strict",[237,256,257],{},[21,258,259],{},"Application Use Cases \u002F App DTOs",[237,261,262],{},"Own Domain + Shared ports",[237,264,265,266],{},"Facades, ORM, foreign Application\u002FDomain, peer ",[34,267,268],{},"*ModuleInterface",[216,270,271,274,279,282],{},[237,272,273],{},"Relaxed",[237,275,276],{},[21,277,278],{},"Composition root",[237,280,281],{},"Container binds, routes, config merge",[237,283,284],{},"Business rules",[216,286,287,290,295,298],{},[237,288,289],{},"Outer",[237,291,292],{},[21,293,294],{},"Infrastructure & UI",[237,296,297],{},"Framework, ORM, HTTP, ACL adapters, admin",[237,299,300],{},"Leaking ORM\u002Fforeign Domain into Domain\u002FUse Cases",[18,302,303,304,307],{},"Dependency direction: ",[21,305,306],{},"Domain ← Application ← Infrastructure\u002FUI",". Ports in Domain; adapters in Infrastructure.",[62,309,311],{"id":310},"b4-golden-flow-must","B4. Golden flow (MUST)",[134,313,316],{"className":314,"code":315,"language":139,"meta":140},[137],"UI → Application DTO → first-level *UseCase::__invoke\n  → Domain (Entity \u002F Domain service)\n  → Domain Port\n  → Infrastructure adapter (ORM \u002F ACL \u002F HTTP)\n  → back as Entity \u002F result\n  → UI presents\n",[34,317,315],{"__ignoreMap":140},[62,319,321],{"id":320},"b5-use-cases-dtos-must","B5. Use Cases & DTOs (MUST)",[323,324,325,335,349,356,366,373,376],"ul",{},[77,326,327,328,331,332,97],{},"First-level: ",[34,329,330],{},"Application\u002FUseCases\u002F{Capability}\u002FSomethingUseCase"," with single public ",[34,333,334],{},"__invoke",[77,336,337,338,32,341,344,345,348],{},"Nested helpers: ",[21,339,340],{},"no",[34,342,343],{},"UseCase"," suffix; ",[21,346,347],{},"not"," called from UI.",[77,350,351,352,355],{},"Mirror ",[34,353,354],{},"{Capability}\u002F"," for DTOs and Ports.",[77,357,358,359,362,363,97],{},"ACL need ports: ",[34,360,361],{},"Domain\u002FPorts\u002FAcl\u002F",". Module façades: ",[34,364,365],{},"Domain\u002FPorts\u002FModule\u002F",[77,367,368,369,372],{},"Never create a literal ",[34,370,371],{},"Feature\u002F"," directory.",[77,374,375],{},"Application DTO = UI\u002FCLI input. Domain DTO = intra-module only.",[77,377,378],{},"Other modules never call Use Cases — only ACL \u002F Events.",[62,380,382],{"id":381},"b6-cross-module-bridges-must","B6. Cross-module bridges (MUST)",[18,384,385,386,389],{},"Application\u002FDomain of A ",[21,387,388],{},"never"," import Application\u002FDomain of B.",[210,391,392,402],{},[213,393,394],{},[216,395,396,399],{},[219,397,398],{},"Need",[219,400,401],{},"Bridge",[232,403,404,425],{},[216,405,406,412],{},[237,407,408,409],{},"Peer answer ",[21,410,411],{},"now",[237,413,414,417,418,421,422],{},[21,415,416],{},"Sync ACL",": local ",[34,419,420],{},"{Need}PortInterface"," → Infra ACL adapter → thin peer ",[34,423,424],{},"{This}ModuleInterface",[216,426,427,433],{},[237,428,429,430],{},"Peer reacts ",[21,431,432],{},"later",[237,434,435,438,439,442],{},[21,436,437],{},"Async Domain Event"," → consumer Infra ",[21,440,441],{},"translation listener"," → inbound Use Case",[323,444,445,452,470],{},[77,446,447,448,451],{},"Mapping only in ACL adapter; façades thin + HTTP-mappable; Prefer ACL ",[21,449,450],{},"validate before"," local commit.",[77,453,454,455,458,459,462,463,462,466,469],{},"Events: pure Domain class; Shared ",[34,456,457],{},"EventDispatcherInterface","; ",[34,460,461],{},"eventId"," + ",[34,464,465],{},"occurredAt",[34,467,468],{},"schemaVersion"," + rich happy-path payload; idempotent consumers; no Domain re-fetch on happy path; prefer outbox.",[77,471,472],{},"No cross-module write transaction. Reports: ACL reads or owned projections.",[62,474,476],{"id":475},"b7-shared-promote-rule-must","B7. Shared promote rule (MUST)",[210,478,479,489],{},[213,480,481],{},[216,482,483,486],{},[219,484,485],{},"Situation",[219,487,488],{},"Where",[232,490,491,499,507],{},[216,492,493,496],{},[237,494,495],{},"Tech used by one module",[237,497,498],{},"That module’s Infrastructure",[216,500,501,504],{},[237,502,503],{},"Same tech used by ≥2 modules",[237,505,506],{},"Promote to Shared",[216,508,509,516],{},[237,510,511,512,515],{},"Cross-module ",[21,513,514],{},"business"," concept",[237,517,518],{},"Never Shared — ACL \u002F Events",[18,520,521,522,110,525,110,528,110,530,110,533,110,536,97],{},"Typical Shared: ",[34,523,524],{},"DomainException",[34,526,527],{},"DatabaseTransactionInterface",[34,529,457],{},[34,531,532],{},"ClockInterface",[34,534,535],{},"ConfigReaderInterface",[34,537,538],{},"Ensure",[62,540,542],{"id":541},"b8b9-persistence-ui-must","B8–B9. Persistence & UI (MUST)",[323,544,545,548],{},[77,546,547],{},"Map persistence records ↔ Domain Entities in Infrastructure; never leak ORM into Use Cases\u002FDomain.",[77,549,550],{},"UI: authorize → DTO → Use Case → present.",[62,552,554],{"id":553},"b10-decision-tree","B10. Decision tree",[134,556,559],{"className":557,"code":558,"language":139,"meta":140},[137],"Only this module? → Golden flow\nNeed peer now? → ACL\nPeer later? → Event\nMulti-step? → Orchestration (still ACL+Events)\nReport across contexts? → Projection \u002F ACL read\nTech in 2+ modules? → Shared\nBusiness in 2+ modules? → ACL\u002FEvents — never Shared\n",[34,560,558],{"__ignoreMap":140},[62,562,564],{"id":563},"b11-anti-patterns","B11. Anti-patterns",[18,566,567,568,570],{},"Peer imports in Use Cases; god façades; thin-ID events; Shared business enums; ORM in Domain; Entity extends ORM; literal ",[34,569,371],{},"; cross-module DB TX; ORM joins across modules for policy.",[62,572,574],{"id":573},"b12-examples","B12. Examples",[18,576,577,110,579,110,581,110,583,585],{},[34,578,109],{},[34,580,113],{},[34,582,116],{},[34,584,119],{}," only — rename to your domains.",[62,587,589],{"id":588},"b13-quality-assertions","B13. Quality assertions",[18,591,592,593,595,596,598],{},"Boundary tests must fail CI if: foreign Application\u002FDomain imports; peer ",[34,594,268],{}," in Use Cases; ORM\u002Ffacades in Domain\u002FUse Cases; literal ",[34,597,371],{}," folders. Also: behaviour tests, formatter, static analysis, event idempotency.",[59,600],{},[10,602,604],{"id":603},"part-c-spiral-host-mapping","Part C — Spiral host mapping",[210,606,607,615],{},[213,608,609],{},[216,610,611,613],{},[219,612],{},[219,614],{},[232,616,617,630,646],{},[216,618,619,624],{},[237,620,621],{},[21,622,623],{},"Target",[237,625,626,629],{},[21,627,628],{},"Spiral Framework 3.17.x"," (+ RoadRunner; PHP ≥ 8.1)",[216,631,632,637],{},[237,633,634],{},[21,635,636],{},"Docs",[237,638,639,645],{},[640,641,642],"a",{"href":642,"rel":643},"https:\u002F\u002Fspiral.dev\u002Fdocs",[644],"nofollow"," · Cycle bridge",[216,647,648,653],{},[237,649,650],{},[21,651,652],{},"Adapter HTML",[237,654,655],{},[34,656,657],{},"\u003CORIGIN>\u002Fv1\u002Fadapters\u002Fspiral",[18,659,660],{},"Spiral is long-living PHP with RoadRunner — hexagonal boundaries prevent request leakage across workers.",[210,662,663,673],{},[213,664,665],{},[216,666,667,670],{},[219,668,669],{},"Core",[219,671,672],{},"Spiral place",[232,674,675,686,694,701,713,721],{},[216,676,677,680],{},[237,678,679],{},"Module root",[237,681,682,685],{},[34,683,684],{},"app\u002Fsrc\u002F{Module}\u002F"," (or project convention)",[216,687,688,691],{},[237,689,690],{},"Shared",[237,692,693],{},"Shared namespace",[216,695,696,698],{},[237,697,278],{},[237,699,700],{},"Bootloaders",[216,702,703,706],{},[237,704,705],{},"Persistence",[237,707,708,709,712],{},"Cycle ORM via ",[34,710,711],{},"spiral\u002Fcycle-bridge"," in Infrastructure",[216,714,715,718],{},[237,716,717],{},"Async",[237,719,720],{},"RoadRunner queues \u002F jobs → Infra → Use Case",[216,722,723,726],{},[237,724,725],{},"UI",[237,727,728],{},"Controllers \u002F actions",[18,730,731,732,97],{},"See ",[34,733,734],{},"\u002Fv1\u002Fadapters\u002Fspiral\u002F*",[59,736],{},[10,738,740],{"id":739},"part-d-apply-procedure-spiral","Part D — Apply procedure (Spiral)",[74,742,743,746,749,752,758,761,764,767],{},[77,744,745],{},"Confirm Spiral 3.x + cycle-bridge",[77,747,748],{},"README one-shot",[77,750,751],{},"ROADMAP \u002F PRD",[77,753,754,757],{},[34,755,756],{},".ai"," ARCHITECTURE copy",[77,759,760],{},"Bootloaders bind ports",[77,762,763],{},"Cycle schema\u002Fmigrations under Infra",[77,765,766],{},"Queue consumers as Infra handlers",[77,768,769],{},"Part E — no commit unless asked",[59,771],{},[10,773,775],{"id":774},"part-f-sketch","Part F — Sketch",[18,777,778],{},"Controller → Use Case → ACL; RoadRunner job in Warehouse Infra deducts stock.",[59,780],{},[10,782,784],{"id":783},"part-g-done-checklist-standard","Part G — Done checklist (standard)",[59,786],{},[10,788,790],{"id":789},"part-e-assistant-files-optional","Part E — Assistant files (optional)",[18,792,793,794,97],{},"Skip if AI vendor is ",[34,795,126],{},[18,797,798],{},"Create shared folder:",[134,800,803],{"className":801,"code":802,"language":139,"meta":140},[137],".ai\u002Fmodular-hexagonal-ddd\u002F\n  ARCHITECTURE.full.md   # copy of the host one-shot you fetched\n  RULES.core.md\n  SKILL.md\n  CHECKLIST.md\n  spiral-host.md         # host-only notes from Part C\n",[34,804,802],{"__ignoreMap":140},[129,806,808],{"id":807},"e0-rulescoremd","E0 — RULES.core.md",[134,810,814],{"className":811,"code":812,"language":813,"meta":140,"style":140},"language-markdown shiki shiki-themes github-light github-dark","# Modular Hexagonal DDD — Core rules\nCanon: \u003CORIGIN>\u002Fv1\u002Fcore (1.0.0-draft)\nOne-shot: \u003CORIGIN>\u002Fapply\u002Fspiral.full.md\nLocal: .ai\u002Fmodular-hexagonal-ddd\u002FARCHITECTURE.full.md\n\n1. Domain hardest: no host framework, ORM, other modules.\n2. Use Cases: own Domain + Shared ports only.\n3. Cross-module: ACL or Domain Events only.\n4. Thin façades; rich events (eventId, schemaVersion); idempotent consumers.\n5. No cross-module write TX; ACL validate-before-commit.\n6. Shared = technical ≥2 modules only.\n7. *UseCase + __invoke; no literal Feature\u002F folders.\n8. Design test: peer→HTTP, Application\u002FDomain still compile.\n","markdown",[34,815,816,824,830,836,842,849,855,861,867,873,879,885,891],{"__ignoreMap":140},[817,818,821],"span",{"class":819,"line":820},"line",1,[817,822,823],{},"# Modular Hexagonal DDD — Core rules\n",[817,825,827],{"class":819,"line":826},2,[817,828,829],{},"Canon: \u003CORIGIN>\u002Fv1\u002Fcore (1.0.0-draft)\n",[817,831,833],{"class":819,"line":832},3,[817,834,835],{},"One-shot: \u003CORIGIN>\u002Fapply\u002Fspiral.full.md\n",[817,837,839],{"class":819,"line":838},4,[817,840,841],{},"Local: .ai\u002Fmodular-hexagonal-ddd\u002FARCHITECTURE.full.md\n",[817,843,845],{"class":819,"line":844},5,[817,846,848],{"emptyLinePlaceholder":847},true,"\n",[817,850,852],{"class":819,"line":851},6,[817,853,854],{},"1. Domain hardest: no host framework, ORM, other modules.\n",[817,856,858],{"class":819,"line":857},7,[817,859,860],{},"2. Use Cases: own Domain + Shared ports only.\n",[817,862,864],{"class":819,"line":863},8,[817,865,866],{},"3. Cross-module: ACL or Domain Events only.\n",[817,868,870],{"class":819,"line":869},9,[817,871,872],{},"4. Thin façades; rich events (eventId, schemaVersion); idempotent consumers.\n",[817,874,876],{"class":819,"line":875},10,[817,877,878],{},"5. No cross-module write TX; ACL validate-before-commit.\n",[817,880,882],{"class":819,"line":881},11,[817,883,884],{},"6. Shared = technical ≥2 modules only.\n",[817,886,888],{"class":819,"line":887},12,[817,889,890],{},"7. *UseCase + __invoke; no literal Feature\u002F folders.\n",[817,892,894],{"class":819,"line":893},13,[817,895,896],{},"8. Design test: peer→HTTP, Application\u002FDomain still compile.\n",[129,898,900],{"id":899},"e1-skillmd","E1 — SKILL.md",[134,902,904],{"className":811,"code":903,"language":813,"meta":140,"style":140},"---\nname: modular-hexagonal-ddd\ndescription: Enforce Modular Hexagonal DDD. Modules, ACL, Events, Shared, Use Cases.\n---\nFollow .ai\u002Fmodular-hexagonal-ddd\u002FARCHITECTURE.full.md\n",[34,905,906,911,916,921,925],{"__ignoreMap":140},[817,907,908],{"class":819,"line":820},[817,909,910],{},"---\n",[817,912,913],{"class":819,"line":826},[817,914,915],{},"name: modular-hexagonal-ddd\n",[817,917,918],{"class":819,"line":832},[817,919,920],{},"description: Enforce Modular Hexagonal DDD. Modules, ACL, Events, Shared, Use Cases.\n",[817,922,923],{"class":819,"line":838},[817,924,910],{},[817,926,927],{"class":819,"line":844},[817,928,929],{},"Follow .ai\u002Fmodular-hexagonal-ddd\u002FARCHITECTURE.full.md\n",[129,931,933],{"id":932},"e2-checklistmd","E2 — CHECKLIST.md",[134,935,937],{"className":811,"code":936,"language":813,"meta":140,"style":140},"- [ ] First-level *UseCase entry\n- [ ] App DTO → __invoke\n- [ ] I\u002FO via Domain ports\n- [ ] No ORM\u002Ffacades in Application\u002FDomain\n- [ ] Sync peer → local ACL port → thin façade\n- [ ] Async → rich event + translation listener → inbound UC\n- [ ] Idempotent eventId\n- [ ] No cross-module DB TX\n- [ ] No foreign Application\u002FDomain imports\n- [ ] Shared only technical ≥2\n- [ ] No Feature\u002F directories\n- [ ] Replaceability test = yes\n",[34,938,939,944,949,954,959,964,969,974,979,984,989,994],{"__ignoreMap":140},[817,940,941],{"class":819,"line":820},[817,942,943],{},"- [ ] First-level *UseCase entry\n",[817,945,946],{"class":819,"line":826},[817,947,948],{},"- [ ] App DTO → __invoke\n",[817,950,951],{"class":819,"line":832},[817,952,953],{},"- [ ] I\u002FO via Domain ports\n",[817,955,956],{"class":819,"line":838},[817,957,958],{},"- [ ] No ORM\u002Ffacades in Application\u002FDomain\n",[817,960,961],{"class":819,"line":844},[817,962,963],{},"- [ ] Sync peer → local ACL port → thin façade\n",[817,965,966],{"class":819,"line":851},[817,967,968],{},"- [ ] Async → rich event + translation listener → inbound UC\n",[817,970,971],{"class":819,"line":857},[817,972,973],{},"- [ ] Idempotent eventId\n",[817,975,976],{"class":819,"line":863},[817,977,978],{},"- [ ] No cross-module DB TX\n",[817,980,981],{"class":819,"line":869},[817,982,983],{},"- [ ] No foreign Application\u002FDomain imports\n",[817,985,986],{"class":819,"line":875},[817,987,988],{},"- [ ] Shared only technical ≥2\n",[817,990,991],{"class":819,"line":881},[817,992,993],{},"- [ ] No Feature\u002F directories\n",[817,995,996],{"class":819,"line":887},[817,997,998],{},"- [ ] Replaceability test = yes\n",[129,1000,1002],{"id":1001},"e3-cursor","E3 — Cursor",[323,1004,1005,1011,1017],{},[77,1006,1007,1010],{},[34,1008,1009],{},".cursor\u002Frules\u002Fmodular-hexagonal-ddd.mdc"," ← E0 + path to ARCHITECTURE.full.md",[77,1012,1013,1016],{},[34,1014,1015],{},".cursor\u002Frules\u002Fspiral-host.mdc"," ← Part C summary",[77,1018,1019,1022],{},[34,1020,1021],{},".cursor\u002Fskills\u002Fmodular-hexagonal-ddd\u002FSKILL.md"," ← E1",[129,1024,1026],{"id":1025},"e4-claude","E4 — Claude",[323,1028,1029,1035],{},[77,1030,1031,1034],{},[34,1032,1033],{},"CLAUDE.md"," ← pointer to ARCHITECTURE.full.md + E0",[77,1036,1037,1038],{},"Shared ",[34,1039,1040],{},".ai\u002Fmodular-hexagonal-ddd\u002F*",[129,1042,1044],{"id":1043},"e5-gemini","E5 — Gemini",[323,1046,1047,1057],{},[77,1048,1049,1052,1053,1056],{},[34,1050,1051],{},"GEMINI.md"," or ",[34,1054,1055],{},".gemini\u002Finstructions.md"," ← pointer + E0",[77,1058,1037,1059],{},[34,1060,1061],{},".ai\u002F*",[129,1063,1065],{"id":1064},"e6-github-copilot","E6 — GitHub Copilot",[323,1067,1068],{},[77,1069,1070,1073],{},[34,1071,1072],{},".github\u002Fcopilot-instructions.md"," ← E0 + short host section",[129,1075,1077],{"id":1076},"e7-generic","E7 — Generic",[323,1079,1080],{},[77,1081,1082,1085,1086],{},[34,1083,1084],{},"AGENTS.md"," pointing at ",[34,1087,1088],{},".ai\u002Fmodular-hexagonal-ddd\u002FARCHITECTURE.full.md",[129,1090,1092],{"id":1091},"e8-multiple-vendors","E8 — Multiple vendors",[18,1094,1095,1096,1099],{},"One shared ",[34,1097,1098],{},".ai\u002Fmodular-hexagonal-ddd\u002F","; vendor entry files only point to it.",[1101,1102,1103],"style",{},"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":140,"searchDepth":826,"depth":826,"links":1105},[1106,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120],{"id":64,"depth":826,"text":65,"children":1107},[1108],{"id":131,"depth":832,"text":132},{"id":169,"depth":826,"text":170},{"id":184,"depth":826,"text":185},{"id":207,"depth":826,"text":208},{"id":310,"depth":826,"text":311},{"id":320,"depth":826,"text":321},{"id":381,"depth":826,"text":382},{"id":475,"depth":826,"text":476},{"id":541,"depth":826,"text":542},{"id":553,"depth":826,"text":554},{"id":563,"depth":826,"text":564},{"id":573,"depth":826,"text":574},{"id":588,"depth":826,"text":589,"children":1121},[1122,1123,1124,1125,1126,1127,1128,1129,1130],{"id":807,"depth":832,"text":808},{"id":899,"depth":832,"text":900},{"id":932,"depth":832,"text":933},{"id":1001,"depth":832,"text":1002},{"id":1025,"depth":832,"text":1026},{"id":1043,"depth":832,"text":1044},{"id":1064,"depth":832,"text":1065},{"id":1076,"depth":832,"text":1077},{"id":1091,"depth":832,"text":1092},"Self-contained Modular Hexagonal DDD + Spiral 3 apply playbook for AI agents.","md",{},"\u002Fv1\u002Fadopt\u002Fapply\u002Fspiral-full",{"title":5,"description":1131},"v1\u002Fadopt\u002Fapply\u002Fspiral-full","r2yNhy3Dq9cR7pPQrdQkfRaY2EhpQmWjvJEmB-r5qxU",1786241410483]