[{"data":1,"prerenderedAt":1470},["ShallowReactive",2],{"page-\u002Fv1\u002Fadopt\u002Fapply\u002Flaravel-full":3},{"id":4,"title":5,"body":6,"description":1463,"extension":1464,"meta":1465,"navigation":1166,"path":1466,"seo":1467,"stem":1468,"__hash__":1469},"content\u002Fv1\u002Fadopt\u002Fapply\u002Flaravel-full.md","Laravel one-shot apply (full architecture)",{"type":7,"value":8,"toc":1422},"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,661,683,783,787,816,820,859,873,877,902,906,932,936,955,957,961,965,977,981,987,991,994,998,1004,1008,1060,1064,1072,1076,1081,1085,1087,1091,1098,1100,1104,1111,1113,1117,1122,1125,1131,1135,1216,1220,1249,1253,1318,1322,1342,1346,1360,1364,1381,1385,1393,1397,1407,1411,1418],[10,11,13],"h1",{"id":12},"modular-hexagonal-ddd-one-shot-apply-laravel","Modular Hexagonal DDD — ONE-SHOT APPLY (laravel)",[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],{},"\u002Flaravel"," · ",[21,45,46],{},"This file:",[34,48,49],{},"\u002Fapply\u002Flaravel.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],{},"laravel 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\u002Flaravel.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-laravel-host-mapping","Part C — Laravel host mapping",[210,606,607,615],{},[213,608,609],{},[216,610,611,613],{},[219,612],{},[219,614],{},[232,616,617,634,649],{},[216,618,619,624],{},[237,620,621],{},[21,622,623],{},"Target",[237,625,626,629,630,633],{},[21,627,628],{},"Laravel 13.x"," (stable line as of 2026-08; PHP ",[21,631,632],{},"≥ 8.3",", typically 8.3–8.5)",[216,635,636,641],{},[237,637,638],{},[21,639,640],{},"Docs",[237,642,643],{},[644,645,646],"a",{"href":646,"rel":647},"https:\u002F\u002Flaravel.com\u002Fdocs\u002F13.x",[648],"nofollow",[216,650,651,656],{},[237,652,653],{},[21,654,655],{},"Adapter HTML",[237,657,658],{},[34,659,660],{},"\u003CORIGIN>\u002Fv1\u002Fadapters\u002Flaravel",[18,662,663,664,667,668,671,672,675,676,679,680,97],{},"Laravel 13 keeps the modern slim skeleton: ",[34,665,666],{},"bootstrap\u002Fapp.php"," application builder, ",[34,669,670],{},"routes\u002Fweb.php"," (+ optional ",[34,673,674],{},"install:api","), Pest\u002FPHPUnit under ",[34,677,678],{},"tests\u002F",", Pint, optional first-party AI\u002FJSON:API\u002FScout features — ",[21,681,682],{},"none of those may enter Domain\u002FUse Cases",[210,684,685,695],{},[213,686,687],{},[216,688,689,692],{},[219,690,691],{},"Core",[219,693,694],{},"Laravel 13 place",[232,696,697,712,722,740,751,761,769],{},[216,698,699,702],{},[237,700,701],{},"Module root",[237,703,704,707,708,711],{},[34,705,706],{},"app\u002FModules\u002F{Module}\u002F"," (PSR-4 in ",[34,709,710],{},"composer.json",")",[216,713,714,717],{},[237,715,716],{},"Shared",[237,718,719],{},[34,720,721],{},"app\u002FShared\u002F",[216,723,724,726],{},[237,725,278],{},[237,727,728,729,732,733,736,737,711],{},"Module ",[34,730,731],{},"Application\u002FProviders\u002F*ServiceProvider.php"," registered from ",[34,734,735],{},"bootstrap\u002Fproviders.php"," (or ",[34,738,739],{},"AppServiceProvider",[216,741,742,745],{},[237,743,744],{},"Persistence",[237,746,747,750],{},[34,748,749],{},"Infrastructure\u002FPersistence\u002FEloquent\u002F"," — Models, Repositories, Migrations",[216,752,753,756],{},[237,754,755],{},"ACL adapter",[237,757,758],{},[34,759,760],{},"Infrastructure\u002FExternalServices\u002F*AclAdapter.php",[216,762,763,766],{},[237,764,765],{},"Translation listener",[237,767,768],{},"Infra listener \u002F queued Job → inbound Use Case (prefer queue)",[216,770,771,774],{},[237,772,773],{},"UI",[237,775,776,779,780],{},[34,777,778],{},"UI\u002FHttp"," Controllers + Form Requests; optional Filament under ",[34,781,782],{},"UI\u002FFilament\u002F",[129,784,786],{"id":785},"eloquent-must-quarantine","Eloquent (MUST quarantine)",[323,788,789,796,799,806],{},[77,790,791,792,795],{},"Eloquent Models ",[21,793,794],{},"only"," under Infrastructure.",[77,797,798],{},"Repositories map Model ↔ Domain Entity manually.",[77,800,801,802,805],{},"Use Cases depend on Domain repository ",[21,803,804],{},"ports"," only.",[77,807,808,809,811,812,815],{},"Do ",[21,810,347],{}," put business models in default ",[34,813,814],{},"app\u002FModels"," for modular BCs — keep per-module Infra models (or explicitly document a temporary exception).",[129,817,819],{"id":818},"container-providers","Container & providers",[134,821,825],{"className":822,"code":823,"language":824,"meta":140,"style":140},"language-php shiki shiki-themes github-light github-dark","\u002F\u002F Module ServiceProvider\n$this->app->bind(\n    WarehouseAvailabilityPortInterface::class,\n    WarehouseAvailabilityAclAdapter::class,\n);\n","php",[34,826,827,835,841,847,853],{"__ignoreMap":140},[828,829,832],"span",{"class":830,"line":831},"line",1,[828,833,834],{},"\u002F\u002F Module ServiceProvider\n",[828,836,838],{"class":830,"line":837},2,[828,839,840],{},"$this->app->bind(\n",[828,842,844],{"class":830,"line":843},3,[828,845,846],{},"    WarehouseAvailabilityPortInterface::class,\n",[828,848,850],{"class":830,"line":849},4,[828,851,852],{},"    WarehouseAvailabilityAclAdapter::class,\n",[828,854,856],{"class":830,"line":855},5,[828,857,858],{},");\n",[18,860,861,862,864,865,868,869,872],{},"Register the provider in ",[34,863,735],{}," (Laravel 11+ \u002F 13 style). Routes: load from module provider or ",[34,866,867],{},"routes\u002F"," included by provider — ",[21,870,871],{},"no business rules"," in providers.",[129,874,876],{"id":875},"events-queues","Events & queues",[323,878,879,886,892,899],{},[77,880,881,882,885],{},"Domain Events: pure PHP in Domain (no ",[34,883,884],{},"SerializesModels"," with Eloquent models).",[77,887,888,889,891],{},"Dispatch via Shared ",[34,890,457],{}," adapter wrapping Laravel’s dispatcher\u002Fbus.",[77,893,894,895,898],{},"Prefer ",[21,896,897],{},"queued"," listeners\u002Fjobs for cross-module side effects.",[77,900,901],{},"Outbox: same DB transaction as aggregate write when possible.",[129,903,905],{"id":904},"tooling","Tooling",[323,907,908,918,924],{},[77,909,910,913,914,917],{},[21,911,912],{},"Pint"," for style; ",[21,915,916],{},"Pest"," (or PHPUnit) + architecture tests for Part B13.",[77,919,920,923],{},[21,921,922],{},"PHPStan\u002FLarastan"," on module code.",[77,925,926,927,931],{},"Optional Filament: UI-only, always call Use Cases (",[644,928,930],{"href":929},"\u002Fv1\u002Fadapters\u002Flaravel\u002Ffilament-ui","filament page",").",[129,933,935],{"id":934},"forbidden-laravel-shortcuts-in-domainuse-cases","Forbidden Laravel shortcuts in Domain\u002FUse Cases",[18,937,938,110,941,110,944,110,947,950,951,954],{},[34,939,940],{},"config()",[34,942,943],{},"now()",[34,945,946],{},"DB::",[34,948,949],{},"Event::",", Facades, ",[34,952,953],{},"Model::query()"," — wrap behind ports.",[59,956],{},[10,958,960],{"id":959},"part-d-apply-procedure-laravel","Part D — Apply procedure (Laravel)",[62,962,964],{"id":963},"d1-confirm-host","D1 — Confirm host",[18,966,967,969,970,32,973,976],{},[34,968,710],{}," requires ",[34,971,972],{},"laravel\u002Fframework",[21,974,975],{},"^13"," (or document if older; still apply Core, note gaps).",[62,978,980],{"id":979},"d2-readme-pointer","D2 — README pointer",[134,982,985],{"className":983,"code":984,"language":139,"meta":140},[137],"Architecture: Modular Hexagonal Domain-Driven Design\nCanon: \u003CORIGIN>\u002Fv1\u002Fcore (1.0.0-draft)\nOne-shot: \u003CORIGIN>\u002Fapply\u002Flaravel.full.md\nHost: Laravel 13.x → \u003CORIGIN>\u002Fv1\u002Fadapters\u002Flaravel\nModules: app\u002FModules\u002F · Shared: app\u002FShared\u002F\n",[34,986,984],{"__ignoreMap":140},[62,988,990],{"id":989},"d3d4-roadmap-optional-prd","D3–D4 — ROADMAP \u002F optional PRD",[18,992,993],{},"Product-only. Architecture MUST → one-shot \u002F requirements URL.",[62,995,997],{"id":996},"d5-local-architecture-mirror","D5 — Local architecture mirror",[18,999,1000,1001,97],{},"Copy this one-shot to ",[34,1002,1003],{},".ai\u002Fmodular-hexagonal-ddd\u002FARCHITECTURE.full.md",[62,1005,1007],{"id":1006},"d6-composer-psr-4","D6 — Composer PSR-4",[134,1009,1013],{"className":1010,"code":1011,"language":1012,"meta":140,"style":140},"language-json shiki shiki-themes github-light github-dark","\"App\\\\Modules\\\\\": \"app\u002FModules\u002F\",\n\"App\\\\Shared\\\\\": \"app\u002FShared\u002F\"\n","json",[34,1014,1015,1043],{"__ignoreMap":140},[828,1016,1017,1021,1025,1028,1030,1033,1037,1040],{"class":830,"line":831},[828,1018,1020],{"class":1019},"sZZnC","\"App",[828,1022,1024],{"class":1023},"sj4cs","\\\\",[828,1026,1027],{"class":1019},"Modules",[828,1029,1024],{"class":1023},[828,1031,1032],{"class":1019},"\"",[828,1034,1036],{"class":1035},"sVt8B",": ",[828,1038,1039],{"class":1019},"\"app\u002FModules\u002F\"",[828,1041,1042],{"class":1035},",\n",[828,1044,1045,1047,1049,1051,1053,1055,1057],{"class":830,"line":837},[828,1046,1020],{"class":1019},[828,1048,1024],{"class":1023},[828,1050,716],{"class":1019},[828,1052,1024],{"class":1023},[828,1054,1032],{"class":1019},[828,1056,1036],{"class":1035},[828,1058,1059],{"class":1019},"\"app\u002FShared\u002F\"\n",[62,1061,1063],{"id":1062},"d7-optional-first-module-scaffold","D7 — Optional first module scaffold",[18,1065,1066,1069,1070,97],{},[34,1067,1068],{},"app\u002FModules\u002F{Module}\u002F{Application,Domain,Infrastructure,UI}"," + provider registration in ",[34,1071,735],{},[62,1073,1075],{"id":1074},"d8-arch-tests","D8 — Arch tests",[18,1077,1078,1079,97],{},"Pest arch: forbid foreign module imports, Eloquent in Application\u002FDomain, peer ModuleInterface in Use Cases, literal ",[34,1080,371],{},[62,1082,1084],{"id":1083},"d9-part-e-ai-then-report-done-no-commit-unless-asked","D9 — Part E (AI) then report done — no commit unless asked.",[59,1086],{},[10,1088,1090],{"id":1089},"part-f-ordering-warehouse-sketch","Part F — Ordering ↔ Warehouse sketch",[18,1092,1093,1094,1097],{},"ACL availability check before place-order commit; ",[34,1095,1096],{},"OrderFulfilled"," rich event → Warehouse translation listener → deduct Use Case.",[59,1099],{},[10,1101,1103],{"id":1102},"part-g-done","Part G — Done",[18,1105,1106,1107,1110],{},"README + ",[34,1108,1109],{},".ai\u002F...\u002FARCHITECTURE.full.md"," + AI files (if any) + arch-test plan; no unauthorized commit.",[59,1112],{},[10,1114,1116],{"id":1115},"part-e-assistant-files-optional","Part E — Assistant files (optional)",[18,1118,1119,1120,97],{},"Skip if AI vendor is ",[34,1121,126],{},[18,1123,1124],{},"Create shared folder:",[134,1126,1129],{"className":1127,"code":1128,"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  laravel-host.md         # host-only notes from Part C\n",[34,1130,1128],{"__ignoreMap":140},[129,1132,1134],{"id":1133},"e0-rulescoremd","E0 — RULES.core.md",[134,1136,1140],{"className":1137,"code":1138,"language":1139,"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\u002Flaravel.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,1141,1142,1147,1152,1157,1162,1168,1174,1180,1186,1192,1198,1204,1210],{"__ignoreMap":140},[828,1143,1144],{"class":830,"line":831},[828,1145,1146],{},"# Modular Hexagonal DDD — Core rules\n",[828,1148,1149],{"class":830,"line":837},[828,1150,1151],{},"Canon: \u003CORIGIN>\u002Fv1\u002Fcore (1.0.0-draft)\n",[828,1153,1154],{"class":830,"line":843},[828,1155,1156],{},"One-shot: \u003CORIGIN>\u002Fapply\u002Flaravel.full.md\n",[828,1158,1159],{"class":830,"line":849},[828,1160,1161],{},"Local: .ai\u002Fmodular-hexagonal-ddd\u002FARCHITECTURE.full.md\n",[828,1163,1164],{"class":830,"line":855},[828,1165,1167],{"emptyLinePlaceholder":1166},true,"\n",[828,1169,1171],{"class":830,"line":1170},6,[828,1172,1173],{},"1. Domain hardest: no host framework, ORM, other modules.\n",[828,1175,1177],{"class":830,"line":1176},7,[828,1178,1179],{},"2. Use Cases: own Domain + Shared ports only.\n",[828,1181,1183],{"class":830,"line":1182},8,[828,1184,1185],{},"3. Cross-module: ACL or Domain Events only.\n",[828,1187,1189],{"class":830,"line":1188},9,[828,1190,1191],{},"4. Thin façades; rich events (eventId, schemaVersion); idempotent consumers.\n",[828,1193,1195],{"class":830,"line":1194},10,[828,1196,1197],{},"5. No cross-module write TX; ACL validate-before-commit.\n",[828,1199,1201],{"class":830,"line":1200},11,[828,1202,1203],{},"6. Shared = technical ≥2 modules only.\n",[828,1205,1207],{"class":830,"line":1206},12,[828,1208,1209],{},"7. *UseCase + __invoke; no literal Feature\u002F folders.\n",[828,1211,1213],{"class":830,"line":1212},13,[828,1214,1215],{},"8. Design test: peer→HTTP, Application\u002FDomain still compile.\n",[129,1217,1219],{"id":1218},"e1-skillmd","E1 — SKILL.md",[134,1221,1223],{"className":1137,"code":1222,"language":1139,"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,1224,1225,1230,1235,1240,1244],{"__ignoreMap":140},[828,1226,1227],{"class":830,"line":831},[828,1228,1229],{},"---\n",[828,1231,1232],{"class":830,"line":837},[828,1233,1234],{},"name: modular-hexagonal-ddd\n",[828,1236,1237],{"class":830,"line":843},[828,1238,1239],{},"description: Enforce Modular Hexagonal DDD. Modules, ACL, Events, Shared, Use Cases.\n",[828,1241,1242],{"class":830,"line":849},[828,1243,1229],{},[828,1245,1246],{"class":830,"line":855},[828,1247,1248],{},"Follow .ai\u002Fmodular-hexagonal-ddd\u002FARCHITECTURE.full.md\n",[129,1250,1252],{"id":1251},"e2-checklistmd","E2 — CHECKLIST.md",[134,1254,1256],{"className":1137,"code":1255,"language":1139,"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,1257,1258,1263,1268,1273,1278,1283,1288,1293,1298,1303,1308,1313],{"__ignoreMap":140},[828,1259,1260],{"class":830,"line":831},[828,1261,1262],{},"- [ ] First-level *UseCase entry\n",[828,1264,1265],{"class":830,"line":837},[828,1266,1267],{},"- [ ] App DTO → __invoke\n",[828,1269,1270],{"class":830,"line":843},[828,1271,1272],{},"- [ ] I\u002FO via Domain ports\n",[828,1274,1275],{"class":830,"line":849},[828,1276,1277],{},"- [ ] No ORM\u002Ffacades in Application\u002FDomain\n",[828,1279,1280],{"class":830,"line":855},[828,1281,1282],{},"- [ ] Sync peer → local ACL port → thin façade\n",[828,1284,1285],{"class":830,"line":1170},[828,1286,1287],{},"- [ ] Async → rich event + translation listener → inbound UC\n",[828,1289,1290],{"class":830,"line":1176},[828,1291,1292],{},"- [ ] Idempotent eventId\n",[828,1294,1295],{"class":830,"line":1182},[828,1296,1297],{},"- [ ] No cross-module DB TX\n",[828,1299,1300],{"class":830,"line":1188},[828,1301,1302],{},"- [ ] No foreign Application\u002FDomain imports\n",[828,1304,1305],{"class":830,"line":1194},[828,1306,1307],{},"- [ ] Shared only technical ≥2\n",[828,1309,1310],{"class":830,"line":1200},[828,1311,1312],{},"- [ ] No Feature\u002F directories\n",[828,1314,1315],{"class":830,"line":1206},[828,1316,1317],{},"- [ ] Replaceability test = yes\n",[129,1319,1321],{"id":1320},"e3-cursor","E3 — Cursor",[323,1323,1324,1330,1336],{},[77,1325,1326,1329],{},[34,1327,1328],{},".cursor\u002Frules\u002Fmodular-hexagonal-ddd.mdc"," ← E0 + path to ARCHITECTURE.full.md",[77,1331,1332,1335],{},[34,1333,1334],{},".cursor\u002Frules\u002Flaravel-host.mdc"," ← Part C summary",[77,1337,1338,1341],{},[34,1339,1340],{},".cursor\u002Fskills\u002Fmodular-hexagonal-ddd\u002FSKILL.md"," ← E1",[129,1343,1345],{"id":1344},"e4-claude","E4 — Claude",[323,1347,1348,1354],{},[77,1349,1350,1353],{},[34,1351,1352],{},"CLAUDE.md"," ← pointer to ARCHITECTURE.full.md + E0",[77,1355,1356,1357],{},"Shared ",[34,1358,1359],{},".ai\u002Fmodular-hexagonal-ddd\u002F*",[129,1361,1363],{"id":1362},"e5-gemini","E5 — Gemini",[323,1365,1366,1376],{},[77,1367,1368,1371,1372,1375],{},[34,1369,1370],{},"GEMINI.md"," or ",[34,1373,1374],{},".gemini\u002Finstructions.md"," ← pointer + E0",[77,1377,1356,1378],{},[34,1379,1380],{},".ai\u002F*",[129,1382,1384],{"id":1383},"e6-github-copilot","E6 — GitHub Copilot",[323,1386,1387],{},[77,1388,1389,1392],{},[34,1390,1391],{},".github\u002Fcopilot-instructions.md"," ← E0 + short host section",[129,1394,1396],{"id":1395},"e7-generic","E7 — Generic",[323,1398,1399],{},[77,1400,1401,1404,1405],{},[34,1402,1403],{},"AGENTS.md"," pointing at ",[34,1406,1003],{},[129,1408,1410],{"id":1409},"e8-multiple-vendors","E8 — Multiple vendors",[18,1412,1413,1414,1417],{},"One shared ",[34,1415,1416],{},".ai\u002Fmodular-hexagonal-ddd\u002F","; vendor entry files only point to it.",[1419,1420,1421],"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);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":140,"searchDepth":837,"depth":837,"links":1423},[1424,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1445,1446,1447,1448,1449,1450,1451,1452],{"id":64,"depth":837,"text":65,"children":1425},[1426],{"id":131,"depth":843,"text":132},{"id":169,"depth":837,"text":170},{"id":184,"depth":837,"text":185},{"id":207,"depth":837,"text":208},{"id":310,"depth":837,"text":311},{"id":320,"depth":837,"text":321},{"id":381,"depth":837,"text":382},{"id":475,"depth":837,"text":476},{"id":541,"depth":837,"text":542},{"id":553,"depth":837,"text":554},{"id":563,"depth":837,"text":564},{"id":573,"depth":837,"text":574},{"id":588,"depth":837,"text":589,"children":1439},[1440,1441,1442,1443,1444],{"id":785,"depth":843,"text":786},{"id":818,"depth":843,"text":819},{"id":875,"depth":843,"text":876},{"id":904,"depth":843,"text":905},{"id":934,"depth":843,"text":935},{"id":963,"depth":837,"text":964},{"id":979,"depth":837,"text":980},{"id":989,"depth":837,"text":990},{"id":996,"depth":837,"text":997},{"id":1006,"depth":837,"text":1007},{"id":1062,"depth":837,"text":1063},{"id":1074,"depth":837,"text":1075},{"id":1083,"depth":837,"text":1084,"children":1453},[1454,1455,1456,1457,1458,1459,1460,1461,1462],{"id":1133,"depth":843,"text":1134},{"id":1218,"depth":843,"text":1219},{"id":1251,"depth":843,"text":1252},{"id":1320,"depth":843,"text":1321},{"id":1344,"depth":843,"text":1345},{"id":1362,"depth":843,"text":1363},{"id":1383,"depth":843,"text":1384},{"id":1395,"depth":843,"text":1396},{"id":1409,"depth":843,"text":1410},"Self-contained Modular Hexagonal DDD + Laravel 13 apply playbook for AI agents.","md",{},"\u002Fv1\u002Fadopt\u002Fapply\u002Flaravel-full",{"title":5,"description":1463},"v1\u002Fadopt\u002Fapply\u002Flaravel-full","olDg6_WGpMv_fKEe3ZQapl0At9yTsKoBRPKm_kJMqfA",1786241408964]