[{"data":1,"prerenderedAt":130},["ShallowReactive",2],{"page-\u002Fv1\u002Fadapters\u002Fspiral\u002Fcomposition-root":3},{"id":4,"title":5,"body":6,"description":122,"extension":123,"meta":124,"navigation":125,"path":126,"seo":127,"stem":128,"__hash__":129},"content\u002Fv1\u002Fadapters\u002Fspiral\u002Fcomposition-root.md","Spiral composition root",{"type":7,"value":8,"toc":119},"minimark",[9,13,48,51,86,89,94,115],[10,11,5],"h1",{"id":12},"spiral-composition-root",[14,15,16],"blockquote",{},[17,18,19,23,24,27,28,31,34,35,42,43],"p",{},[20,21,22],"strong",{},"Host:"," Spiral ",[20,25,26],{},"3.17.x"," (PHP ≥ 8.1) · Researched 2026-08",[29,30],"br",{},[20,32,33],{},"One-shot:"," ",[36,37,39],"a",{"href":38},"\u002Fapply\u002Fspiral.full.md",[40,41,38],"code",{}," · Short: ",[36,44,46],{"href":45},"\u002Fspiral",[40,47,45],{},[17,49,50],{},"Bootloaders register bindings and interceptors — composition root.",[52,53,58],"pre",{"className":54,"code":55,"language":56,"meta":57,"style":57},"language-php shiki shiki-themes github-light github-dark","public function boot(ContainerInterface $container): void\n{\n    \u002F\u002F bind ports → adapters\n}\n","php","",[40,59,60,68,74,80],{"__ignoreMap":57},[61,62,65],"span",{"class":63,"line":64},"line",1,[61,66,67],{},"public function boot(ContainerInterface $container): void\n",[61,69,71],{"class":63,"line":70},2,[61,72,73],{},"{\n",[61,75,77],{"class":63,"line":76},3,[61,78,79],{},"    \u002F\u002F bind ports → adapters\n",[61,81,83],{"class":63,"line":82},4,[61,84,85],{},"}\n",[17,87,88],{},"Keep business rules out of bootloaders. Long-living RoadRunner workers make clean boundaries even more important (no request-scoped leakage into Domain statics).",[90,91,93],"h2",{"id":92},"related","Related",[95,96,97,104],"ul",{},[98,99,100],"li",{},[36,101,103],{"href":102},"\u002Fv1\u002Fadapters\u002Fspiral","Spiral adapter overview",[98,105,106,110,111],{},[36,107,109],{"href":108},"\u002Fv1\u002Fcore","Core"," · ",[36,112,114],{"href":113},"\u002Fv1\u002Fadopt\u002Fapply","Apply index",[116,117,118],"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":57,"searchDepth":70,"depth":70,"links":120},[121],{"id":92,"depth":70,"text":93},"DI \u002F wiring only — Bootloaders.","md",{},true,"\u002Fv1\u002Fadapters\u002Fspiral\u002Fcomposition-root",{"title":5,"description":122},"v1\u002Fadapters\u002Fspiral\u002Fcomposition-root","1H_JLkhR5Y_QH19IMUkAoiwiLvBozCvhibMUo__7yRM",1786241416093]