Композиционная модель
Три уровня
- Layout владеет геометрией страницы и именами regions.
- Section допускается в совместимый region и раскладывает Blocks по slots.
- Block/Smart/View получает проверенные данные и создаёт конечный render artifact через общие registry/Gateway.
Content Markdown компилируется отдельно в typed in-memory Document IR. Длина ::: fence не выбирает уровень архитектуры.
Проверенные настройки и прочитанный Markdown превращаются в общий Recipe. Стандартный сборщик SIMAI Framework создаёт Composition Document — готовое дерево страницы. Docara восстанавливает из него вход своих рендереров и создаёт HTML. Авторские файлы при этом не переписываются.
Реальная insertion chain
| Шаг | Реальный зарегистрированный файл | Ответственность |
|---|---|---|
| Layout | resources/layouts/docara.docs.json |
regions, required flags, container limits |
| Layout View Tree | resources/views/layout.docara.docs.json |
безопасные element/region nodes |
| Region | descriptor-owned header, sidebar, main, outline, footer |
insertion point, не компонент ID branch |
| Section | resources/sections/docara.article.json, docara.header.json, docara.navigation.json, docara.outline.json, docara.shell.json |
compatible regions и allowed blocks |
| Section View | resources/views/section.docara.article.json, section.docara.header.json, section.docara.shell.json |
admitted slots |
| Block | resources/blocks/content.document.json, content.markdown.json, content.smart.json, shell.element.json, shell.smart.json |
payload schema/capability |
| Smart | package, Framework или project artifact | props/views/presets/slots/assets/hydration |
| View | registered view/preset/template | конечный HTML/assets/provenance |
| Surface presentation | src/PortableSite/SurfacePresentation.php |
единая admitted outer geometry для Surface, Hero, Showcase и Promo; semantic content остаётся у компонента |
Markdown owner
-> typed Document IR
-> Layout docara.docs
-> region main
-> Section docara.article
-> slot content
-> Block content.document
-> generated Composition Recipe
-> Framework resolveRecipe
-> Composition Document
-> Docara renderer projection
-> SmartComponentGateway when a Smart leaf is present
-> registered View
-> LayoutComposer
-> PageBuilder result
Кто проверяет совместимость
Atlas публикует для каждого container allowed_children, slots, min_children,
max_children, order, max_depth и machine-readable depth_semantics.
Значение relative_subtree_root_level_1 означает, что каждый container считает
собственный root уровнем 1. Registry отклоняет unknown View Tree
kind/tag/attribute/utility/region/slot до registration. Project config выбирает
только admitted IDs и не содержит class/callback/PHP/template path.
content.documentblocksupportedВладелец: simai/docara; namespace: content; origin: docara; provider: docara.builtin; authoring: configuration.
content.iconblockrejectedВладелец: simai/docara; namespace: content; origin: requirement; provider: component.catalog.product_requirement; authoring: block.
Capabilities: add_semantic_icon.
content.markdownblocksupportedВладелец: simai/docara; namespace: content; origin: docara; provider: docara.builtin; authoring: configuration.
content.smartblocksupportedВладелец: simai/docara; namespace: content; origin: docara; provider: docara.builtin; authoring: configuration.
docara.alertblocksupportedВладелец: simai/docara; namespace: docara; origin: docara; provider: component.catalog.typed_definition; authoring: block.
Capabilities: report_status.
docara.backlinksblocksupportedВладелец: simai/docara; namespace: docara; origin: docara; provider: component.catalog.typed_definition; authoring: block.
Capabilities: show_pages_linking_here.
docara.badgeblocksupportedВладелец: simai/docara; namespace: docara; origin: docara; provider: component.catalog.inline_definition; authoring: inline.
Capabilities: label_status.
docara.bannerblocksupportedВладелец: simai/docara; namespace: docara; origin: docara; provider: component.catalog.typed_definition; authoring: block.
Capabilities: show_bounded_page_announcement.
docara.buttonblocksupportedВладелец: simai/docara; namespace: docara; origin: docara; provider: component.catalog.inline_definition; authoring: inline.
Capabilities: link_as_action.
docara.cardblocksupportedВладелец: simai/docara; namespace: docara; origin: docara; provider: component.catalog.typed_definition; authoring: block.
Capabilities: content.embeddable.
docara.codeblocksupportedВладелец: simai/docara; namespace: docara; origin: docara; provider: component.catalog.typed_definition; authoring: block.
Capabilities: include_external_code.
docara.detailsblocksupportedВладелец: simai/docara; namespace: docara; origin: docara; provider: component.catalog.typed_definition; authoring: block.
Capabilities: disclose_optional_content.
docara.diagramblocksupportedВладелец: simai/docara; namespace: docara; origin: docara; provider: component.catalog.typed_definition; authoring: block.
Capabilities: render_declarative_diagram.
docara.downloadblocksupportedВладелец: simai/docara; namespace: docara; origin: docara; provider: component.catalog.typed_definition; authoring: block.
Capabilities: download_file.
docara.embedblocksupportedВладелец: simai/docara; namespace: docara; origin: docara; provider: component.catalog.typed_definition; authoring: block.
Capabilities: embed_external_content.
docara.exampleblocksupportedВладелец: simai/docara; namespace: docara; origin: docara; provider: component.catalog.typed_definition; authoring: block.
Capabilities: show_live_example_and_source.
docara.figureblocksupportedВладелец: simai/docara; namespace: docara; origin: docara; provider: component.catalog.typed_definition; authoring: block.
Capabilities: show_illustration_with_caption.
docara.gridblocksupportedВладелец: simai/docara; namespace: docara; origin: docara; provider: component.catalog.typed_definition; authoring: container.
Capabilities: content.embeddable.
Container: allowed_children=[docara.card]; slots=[]; min_children=1; max_children=12; order=declared; max_depth=2, depth_semantics=relative_subtree_root_level_1.
docara.heroblocksupportedВладелец: simai/docara; namespace: docara; origin: docara; provider: component.catalog.typed_definition; authoring: block.
Capabilities: explain_product_value, primary_landing_action.
docara.htmlblocksupportedВладелец: simai/docara; namespace: docara; origin: docara; provider: component.catalog.typed_definition; authoring: block.
Capabilities: render_isolated_trusted_html.
docara.iconblocksupportedВладелец: simai/docara; namespace: docara; origin: docara; provider: component.catalog.inline_definition; authoring: inline.
Capabilities: add_semantic_icon.
docara.kbdblocksupportedВладелец: simai/docara; namespace: docara; origin: docara; provider: component.catalog.inline_definition; authoring: inline.
Capabilities: name_keyboard_input.
docara.logosblocksupportedВладелец: simai/docara; namespace: docara; origin: docara; provider: component.catalog.typed_definition; authoring: block.
Capabilities: show_ecosystem_members, show_trust_signals.
docara.mathblocksupportedВладелец: simai/docara; namespace: docara; origin: docara; provider: component.catalog.typed_definition; authoring: block.
Capabilities: render_tex_formula.
docara.mediablocksupportedВладелец: simai/docara; namespace: docara; origin: docara; provider: component.catalog.typed_definition; authoring: block.
Capabilities: pair_content_with_media.
docara.stepsblocksupportedВладелец: simai/docara; namespace: docara; origin: docara; provider: component.catalog.typed_definition; authoring: block.
Capabilities: content.embeddable.
docara.surfaceblocksupportedВладелец: simai/docara; namespace: docara; origin: docara; provider: component.catalog.typed_definition; authoring: container.
Capabilities: present_content_surface.
Container: allowed_children=[]; slots=[content]; min_children=1; max_children=64; order=declared; max_depth=3, depth_semantics=relative_subtree_root_level_1.
docara.tabsblocksupportedВладелец: simai/docara; namespace: docara; origin: docara; provider: component.catalog.typed_definition; authoring: block.
Capabilities: switch_between_equivalent_views.
docara.treeblocksupportedВладелец: simai/docara; namespace: docara; origin: docara; provider: component.catalog.typed_definition; authoring: block.
Capabilities: show_file_structure.
native.codeblocksupportedВладелец: simai/docara; namespace: native; origin: native; provider: component.catalog.portable_markdown_profile; authoring: markdown.
Capabilities: show_code.
native.code.enhancedblockrejectedВладелец: simai/docara; namespace: native; origin: requirement; provider: component.catalog.product_requirement; authoring: block.
Capabilities: enhance_code.
native.footnotes_and_sourcesblocksupportedВладелец: simai/docara; namespace: native; origin: native; provider: component.catalog.portable_markdown_profile; authoring: markdown.
Capabilities: cite_source_with_footnote.
native.headings_and_textblocksupportedВладелец: simai/docara; namespace: native; origin: native; provider: component.catalog.portable_markdown_profile; authoring: markdown.
Capabilities: structure_prose.
native.links_and_imagesblocksupportedВладелец: simai/docara; namespace: native; origin: native; provider: component.catalog.portable_markdown_profile; authoring: markdown.
Capabilities: illustrate_content, link_content.
native.lists_and_quotesblocksupportedВладелец: simai/docara; namespace: native; origin: native; provider: component.catalog.portable_markdown_profile; authoring: markdown.
Capabilities: list_items, quote_content.
native.tableblocksupportedВладелец: simai/docara; namespace: native; origin: native; provider: component.catalog.portable_markdown_profile; authoring: markdown.
Capabilities: compare_small_datasets.
project.footer-smartblockprojectВладелец: project/project; namespace: project; origin: project; provider: project.project; authoring: configuration.
shell.elementblocksupportedВладелец: simai/docara; namespace: shell; origin: docara; provider: docara.builtin; authoring: configuration.
shell.smartblocksupportedВладелец: simai/docara; namespace: shell; origin: docara; provider: docara.builtin; authoring: configuration.
ui.badgeblockproposalВладелец: simai/docara; namespace: ui; origin: requirement; provider: component.catalog.product_requirement; authoring: block.
Capabilities: label_status.
ui.dataviewblockproposalВладелец: simai/docara; namespace: ui; origin: requirement; provider: component.catalog.product_requirement; authoring: block.
Capabilities: present_structured_data.
ui.tabsblockrejectedВладелец: simai/docara; namespace: ui; origin: requirement; provider: component.catalog.product_requirement; authoring: block.
Capabilities: switch_content_panels.
docara.docslayoutsupportedВладелец: simai/docara; namespace: docara; origin: docara; provider: docara.builtin; authoring: container.
Container: allowed_children=[section]; slots=[header, sidebar, main, outline, footer]; min_children=1; max_children=7; order=layout_regions; max_depth=3, depth_semantics=relative_subtree_root_level_1.
docara.articlesectionsupportedВладелец: simai/docara; namespace: docara; origin: docara; provider: docara.builtin; authoring: container.
Capabilities: content.document.
Container: allowed_children=[content.document, content.markdown, content.smart]; slots=[content]; min_children=0; max_children=64; order=declared; max_depth=2, depth_semantics=relative_subtree_root_level_1.
docara.headersectionsupportedВладелец: simai/docara; namespace: docara; origin: docara; provider: docara.builtin; authoring: container.
Capabilities: shell.brand, shell.primary-navigation.
Container: allowed_children=[shell.smart]; slots=[content]; min_children=0; max_children=64; order=declared; max_depth=2, depth_semantics=relative_subtree_root_level_1.
docara.navigationsectionsupportedВладелец: simai/docara; namespace: docara; origin: docara; provider: docara.builtin; authoring: container.
Capabilities: shell.secondary-navigation.
Container: allowed_children=[shell.smart]; slots=[content]; min_children=0; max_children=64; order=declared; max_depth=2, depth_semantics=relative_subtree_root_level_1.
docara.outlinesectionsupportedВладелец: simai/docara; namespace: docara; origin: docara; provider: docara.builtin; authoring: container.
Capabilities: shell.outline.
Container: allowed_children=[shell.smart]; slots=[content]; min_children=0; max_children=64; order=declared; max_depth=2, depth_semantics=relative_subtree_root_level_1.
docara.shellsectionsupportedВладелец: simai/docara; namespace: docara; origin: docara; provider: docara.builtin; authoring: container.
Capabilities: shell.brand, shell.content-after, shell.content-before, shell.footer, shell.outline, shell.primary-navigation, shell.secondary-navigation.
Container: allowed_children=[shell.element, shell.smart]; slots=[content]; min_children=0; max_children=64; order=declared; max_depth=2, depth_semantics=relative_subtree_root_level_1.
project.footersectionprojectВладелец: project/project; namespace: project; origin: project; provider: project.project; authoring: container.
Capabilities: shell.footer.
Container: allowed_children=[project.footer-smart]; slots=[content]; min_children=0; max_children=64; order=declared; max_depth=2, depth_semantics=relative_subtree_root_level_1.
Общая presentation не меняет semantic owner
Surface — authored content container. Hero, Showcase и Promo — отдельные typed semantic definitions. Их Atlas ownership, states, props и provenance берутся из реальных admitted definitions, но outer width/container/background frame собирает одна immutable Surface presentation. Оборачивать эти semantic blocks в Surface нельзя; page/head и границы region по-прежнему принадлежат LayoutComposer.