[{"data":1,"prerenderedAt":424},["ShallowReactive",2],{"page-\u002Fv1\u002Fcore":3},{"id":4,"title":5,"body":6,"description":416,"extension":417,"meta":418,"navigation":419,"path":420,"seo":421,"stem":422,"__hash__":423},"content\u002Fv1\u002Fcore\u002Findex.md","Core overview",{"type":7,"value":8,"toc":410},"minimark",[9,14,23,97,114,124,129,135,139],[10,11,13],"h1",{"id":12},"core","Core",[15,16,17,18,22],"p",{},"Core is the ",[19,20,21],"strong",{},"framework-agnostic"," Modular Hexagonal Domain-Driven Design standard. It describes how modules are shaped, how Use Cases orchestrate Domain work through ports, and how peers communicate without coupling Application\u002FDomain layers.",[24,25,26,37],"table",{},[27,28,29],"thead",{},[30,31,32,35],"tr",{},[33,34],"th",{},[33,36],{},[38,39,40,54,64,87],"tbody",{},[30,41,42,48],{},[43,44,45],"td",{},[19,46,47],{},"Version",[43,49,50],{},[51,52,53],"code",{},"1.0.0-draft",[30,55,56,61],{},[43,57,58],{},[19,59,60],{},"Language",[43,62,63],{},"Professional English",[30,65,66,71],{},[43,67,68],{},[19,69,70],{},"Examples",[43,72,73,74,77,78,77,81,77,84],{},"Greenfield only — ",[51,75,76],{},"Ordering",", ",[51,79,80],{},"Warehouse",[51,82,83],{},"Directory",[51,85,86],{},"Identity",[30,88,89,94],{},[43,90,91],{},[19,92,93],{},"Must not contain",[43,95,96],{},"Host framework APIs, ORM models\u002Fquery builders, admin UI widgets, host tooling commands",[15,98,99,100,105,106,109,110,113],{},"Host-specific mapping lives under ",[101,102,104],"a",{"href":103},"\u002Fv1\u002Fadapters","Adapters",". Adapters explain how Core lands on a host; they must ",[19,107,108],{},"not"," redefine Core. When Core pages show host examples, they list ",[19,111,112],{},"all documented hosts"," fairly (Laravel, Symfony, Yii, CodeIgniter, CakePHP, Spiral, Slim, Mezzio) — never a single host as if it were Core.",[15,115,116,119,120,123],{},[19,117,118],{},"This site is the sole architecture canon."," Other repositories — demos, playgrounds, and production apps — must take Modular Hexagonal DDD rules from here instead of maintaining a divergent long-form standard. Product backlogs stay in each project’s own ",[51,121,122],{},"ROADMAP.md",".",[125,126,128],"h2",{"id":127},"design-test-repeat","Design test (repeat)",[130,131,132],"blockquote",{},[15,133,134],{},"If the peer module is deleted and replaced by HTTP, does Application\u002FDomain still compile?",[125,136,138],{"id":137},"contents","Contents",[24,140,141,151],{},[27,142,143],{},[30,144,145,148],{},[33,146,147],{},"Page",[33,149,150],{},"Topic",[38,152,153,164,175,186,197,215,226,237,252,263,274,285,296,307,318,329,340,351,362,377,388,399],{},[30,154,155,161],{},[43,156,157],{},[101,158,160],{"href":159},"\u002Fv1\u002Fcore\u002Fphilosophy","Philosophy",[43,162,163],{},"Domain-centricity, ports & adapters, bounded contexts",[30,165,166,172],{},[43,167,168],{},[101,169,171],{"href":170},"\u002Fv1\u002Fcore\u002Fmodule-layout","Module layout",[43,173,174],{},"Application \u002F Domain \u002F Infrastructure \u002F UI + Shared promote rule",[30,176,177,183],{},[43,178,179],{},[101,180,182],{"href":181},"\u002Fv1\u002Fcore\u002Fstrictness-ladder","Strictness ladder",[43,184,185],{},"Domain hardest → composition root wiring → outer adapters",[30,187,188,194],{},[43,189,190],{},[101,191,193],{"href":192},"\u002Fv1\u002Fcore\u002Fgolden-flow","Golden flow",[43,195,196],{},"UI → Use Case → Domain → Port → Adapter",[30,198,199,205],{},[43,200,201],{},[101,202,204],{"href":203},"\u002Fv1\u002Fcore\u002Fuse-cases-and-dtos","Use cases & DTOs",[43,206,207,210,211,214],{},[51,208,209],{},"*UseCase"," + ",[51,212,213],{},"__invoke","; Application vs Domain DTOs",[30,216,217,223],{},[43,218,219],{},[101,220,222],{"href":221},"\u002Fv1\u002Fcore\u002Fports-and-persistence","Ports & persistence",[43,224,225],{},"Manual map record ↔ Entity; no ORM in Domain",[30,227,228,234],{},[43,229,230],{},[101,231,233],{"href":232},"\u002Fv1\u002Fcore\u002Fcross-module-acl","Cross-module ACL",[43,235,236],{},"Sync bridge — Ordering ↔ Warehouse",[30,238,239,245],{},[43,240,241],{},[101,242,244],{"href":243},"\u002Fv1\u002Fcore\u002Fcross-module-events","Cross-module events",[43,246,247,248,251],{},"Async bridge — ",[51,249,250],{},"OrderFulfilled"," → Warehouse inbound Use Case",[30,253,254,260],{},[43,255,256],{},[101,257,259],{"href":258},"\u002Fv1\u002Fcore\u002Fcross-module-contracts","Cross-module contracts",[43,261,262],{},"Thin façades, event schemas, evolution",[30,264,265,271],{},[43,266,267],{},[101,268,270],{"href":269},"\u002Fv1\u002Fcore\u002Fevent-delivery","Event delivery",[43,272,273],{},"Idempotency, duplicates, outbox, query exceptions",[30,275,276,282],{},[43,277,278],{},[101,279,281],{"href":280},"\u002Fv1\u002Fcore\u002Ftransactions-and-failures","Transactions & failures",[43,283,284],{},"Per-Use-Case ownership, ACL fail-before-commit",[30,286,287,293],{},[43,288,289],{},[101,290,292],{"href":291},"\u002Fv1\u002Fcore\u002Forchestration","Orchestration",[43,294,295],{},"Saga-lite multi-step flows (still ACL + Events)",[30,297,298,304],{},[43,299,300],{},[101,301,303],{"href":302},"\u002Fv1\u002Fcore\u002Freads-and-reporting","Reads & reporting",[43,305,306],{},"Projections and ACL reads — no cross-module ORM joins",[30,308,309,315],{},[43,310,311],{},[101,312,314],{"href":313},"\u002Fv1\u002Fcore\u002Fshared-kernel","Shared kernel",[43,316,317],{},"Promote technical capabilities used by ≥2 modules",[30,319,320,326],{},[43,321,322],{},[101,323,325],{"href":324},"\u002Fv1\u002Fcore\u002Fdecision-tree","Decision tree",[43,327,328],{},"Local \u002F repository \u002F ACL \u002F Event \u002F Shared",[30,330,331,337],{},[43,332,333],{},[101,334,336],{"href":335},"\u002Fv1\u002Fcore\u002Fanti-patterns","Anti-patterns",[43,338,339],{},"Common mistakes and fixes",[30,341,342,348],{},[43,343,344],{},[101,345,347],{"href":346},"\u002Fv1\u002Fcore\u002Fwhere-does-this-go","Where does this go?",[43,349,350],{},"Placement quick reference",[30,352,353,359],{},[43,354,355],{},[101,356,358],{"href":357},"\u002Fv1\u002Fcore\u002Frequirements","Portable requirements",[43,360,361],{},"MUST checklist (from portable PRD)",[30,363,364,370],{},[43,365,366],{},[101,367,369],{"href":368},"\u002Fv1\u002Fcore\u002Fversioning","Core versioning",[43,371,372,373,376],{},"SemVer for Core, docs ",[51,374,375],{},"\u002Fv1",", contracts",[30,378,379,385],{},[43,380,381],{},[101,382,384],{"href":383},"\u002Fv1\u002Fcore\u002Fagent-pack","Optional assistant pack",[43,386,387],{},"Optional rules slice for AI assistants — not required",[30,389,390,396],{},[43,391,392],{},[101,393,395],{"href":394},"\u002Fv1\u002Fcore\u002Fpure-php-psr-skeleton","Pure PHP + PSR skeleton",[43,397,398],{},"Framework-free sample layout",[30,400,401,407],{},[43,402,403],{},[101,404,406],{"href":405},"\u002Fv1\u002Fadopt","Adopt in another project",[43,408,409],{},"How other repos should use this site",{"title":411,"searchDepth":412,"depth":412,"links":413},"",2,[414,415],{"id":127,"depth":412,"text":128},{"id":137,"depth":412,"text":138},"Framework-agnostic Modular Hexagonal Domain-Driven Design — the Core layer of this documentation site.","md",{},true,"\u002Fv1\u002Fcore",{"title":5,"description":416},"v1\u002Fcore\u002Findex","VaNpTSi_Ol0zo51LlExXF4Kn9Ytm2iI2ZUfP3PD3330",1786241411084]