{
  "source": "runtime-generated from WordPress core wp-includes/blocks/*/block.json",
  "buckets": {
    "raw-transformable": "h2bc may infer this block from raw HTML when the source signal is deterministic and side-effect-free.",
    "explicit-marker": "h2bc may emit this block only when source markup names the exact WordPress concept through an explicit marker.",
    "compiler-only": "A higher-level compiler may choose this block when it has site, template, query, or content-model intent; h2bc must not infer it from raw rendered HTML.",
    "dynamic-unsupported": "Runtime or site-data blocks that are not raw HTML transform targets for h2bc.",
    "legacy-or-internal": "Legacy, editor-internal, compatibility, or fallback blocks that should not drive new raw transforms.",
    "future-candidate": "A deterministic static transform may be possible later, but no transform ships today."
  },
  "classifications": {
    "core/accordion": { "bucket": "future-candidate", "introduced_after": "6.9", "rationale": "Static disclosure markup may be transformable later, but no conservative accordion transform ships today." },
    "core/accordion-heading": { "bucket": "future-candidate", "introduced_after": "6.9", "rationale": "Accordion child markup needs a parent accordion contract before h2bc can emit it safely." },
    "core/accordion-item": { "bucket": "future-candidate", "introduced_after": "6.9", "rationale": "Accordion item output needs a complete static accordion transform, not isolated child inference." },
    "core/accordion-panel": { "bucket": "future-candidate", "introduced_after": "6.9", "rationale": "Accordion panel output needs a complete static accordion transform, not isolated child inference." },
    "core/archives": { "bucket": "dynamic-unsupported", "rationale": "Archives require runtime site data and archive query intent." },
    "core/audio": { "bucket": "raw-transformable", "rationale": "Audio elements with static sources map directly to core/audio." },
    "core/avatar": { "bucket": "compiler-only", "rationale": "Avatar output requires author or commenter identity context." },
    "core/block": { "bucket": "compiler-only", "rationale": "Reusable block references require a persistent block ref chosen outside raw HTML." },
    "core/breadcrumbs": { "bucket": "compiler-only", "introduced_after": "6.9", "rationale": "Breadcrumbs require route, hierarchy, and site navigation context." },
    "core/button": { "bucket": "raw-transformable", "rationale": "Native WordPress button anchors can become core/button children inside core/buttons." },
    "core/buttons": { "bucket": "raw-transformable", "rationale": "Native WordPress button anchor groups can be inferred from existing block classes." },
    "core/calendar": { "bucket": "dynamic-unsupported", "rationale": "Calendar output is generated from site content and date state." },
    "core/categories": { "bucket": "dynamic-unsupported", "rationale": "Category listings require taxonomy data and display intent." },
    "core/code": { "bucket": "raw-transformable", "rationale": "Preformatted code markup maps directly to core/code." },
    "core/column": { "bucket": "raw-transformable", "rationale": "Column children are emitted only inside a recognized columns transform." },
    "core/columns": { "bucket": "raw-transformable", "rationale": "Explicit row/grid wrappers with direct column-like children are deterministic." },
    "core/comment-author-name": { "bucket": "compiler-only", "rationale": "Comment author fields require comment-loop context." },
    "core/comment-content": { "bucket": "compiler-only", "rationale": "Comment content requires comment-loop context." },
    "core/comment-date": { "bucket": "compiler-only", "rationale": "Comment date output requires comment-loop context." },
    "core/comment-edit-link": { "bucket": "compiler-only", "rationale": "Comment edit links require comment identity and permission context." },
    "core/comment-reply-link": { "bucket": "compiler-only", "rationale": "Comment reply links require threaded-comment runtime context." },
    "core/comment-template": { "bucket": "compiler-only", "rationale": "Comment templates require comment-query context." },
    "core/comments": { "bucket": "compiler-only", "rationale": "Comments require comment-query context and runtime state." },
    "core/comments-pagination": { "bucket": "compiler-only", "rationale": "Comments pagination depends on comment query state." },
    "core/comments-pagination-next": { "bucket": "compiler-only", "rationale": "Comments pagination links depend on comment query state." },
    "core/comments-pagination-numbers": { "bucket": "compiler-only", "rationale": "Comments pagination numbers depend on comment query state." },
    "core/comments-pagination-previous": { "bucket": "compiler-only", "rationale": "Comments pagination links depend on comment query state." },
    "core/comments-title": { "bucket": "compiler-only", "rationale": "Comment titles depend on current post and comment query state." },
    "core/cover": { "bucket": "raw-transformable", "rationale": "Cover-like wrappers with explicit static background signals can be inferred." },
    "core/details": { "bucket": "raw-transformable", "rationale": "Native details/summary markup maps directly to core/details." },
    "core/embed": { "bucket": "raw-transformable", "rationale": "Recognized provider iframes can be normalized into core/embed." },
    "core/file": { "bucket": "raw-transformable", "rationale": "Downloadable file anchors with recognized extensions can be inferred." },
    "core/footnotes": { "bucket": "compiler-only", "rationale": "Footnotes require document-level references and editor-managed anchors." },
    "core/freeform": { "bucket": "legacy-or-internal", "rationale": "Classic/freeform content is a compatibility block, not a new raw transform target." },
    "core/gallery": { "bucket": "raw-transformable", "rationale": "Explicit gallery wrappers with multiple images can become core/gallery." },
    "core/group": { "bucket": "raw-transformable", "rationale": "High-confidence semantic wrappers can become core/group without site context." },
    "core/heading": { "bucket": "raw-transformable", "rationale": "Heading tags map directly to core/heading." },
    "core/home-link": { "bucket": "compiler-only", "rationale": "Home links require site URL and navigation intent." },
    "core/html": { "bucket": "raw-transformable", "rationale": "Unsupported fragments are intentionally preserved as core/html fallback blocks." },
    "core/icon": { "bucket": "future-candidate", "introduced_after": "6.9", "rationale": "Static icon markup may be transformable later, but provider/icon identity rules are not defined yet." },
    "core/image": { "bucket": "raw-transformable", "rationale": "Image elements and figures map directly to core/image." },
    "core/latest-comments": { "bucket": "dynamic-unsupported", "rationale": "Latest comments require runtime site data." },
    "core/latest-posts": { "bucket": "dynamic-unsupported", "rationale": "Latest posts require runtime site data and query intent." },
    "core/legacy-widget": { "bucket": "legacy-or-internal", "rationale": "Legacy widget blocks represent old widget state, not raw HTML inference." },
    "core/list": { "bucket": "raw-transformable", "rationale": "Ordered and unordered lists map directly to core/list." },
    "core/list-item": { "bucket": "raw-transformable", "rationale": "List items are generated as children inside recognized list transforms." },
    "core/loginout": { "bucket": "dynamic-unsupported", "rationale": "Login/logout output depends on runtime authentication state." },
    "core/math": { "bucket": "future-candidate", "introduced_after": "6.9", "rationale": "Static math markup may be transformable later after a stable source-signal contract exists." },
    "core/media-text": { "bucket": "raw-transformable", "rationale": "Explicit media-text wrappers with media plus content can be inferred." },
    "core/missing": { "bucket": "legacy-or-internal", "rationale": "Missing blocks are editor recovery placeholders, not transform targets." },
    "core/more": { "bucket": "legacy-or-internal", "rationale": "More markers are editor/content control comments rather than rendered HTML structures." },
    "core/navigation": { "bucket": "compiler-only", "rationale": "Native navigation blocks need editor-valid serialization and site/menu policy; rendered nav markup falls back to core/html." },
    "core/navigation-link": { "bucket": "compiler-only", "rationale": "Navigation links are native navigation children and are not emitted by default raw conversion." },
    "core/navigation-overlay-close": { "bucket": "compiler-only", "introduced_after": "6.9", "rationale": "Overlay controls are part of a navigation UI chosen by a compiler or editor." },
    "core/navigation-submenu": { "bucket": "compiler-only", "rationale": "Navigation submenus are native navigation children and are not emitted by default raw conversion." },
    "core/nextpage": { "bucket": "legacy-or-internal", "rationale": "Page-break markers are editor/content control comments rather than rendered HTML structures." },
    "core/page-list": { "bucket": "dynamic-unsupported", "rationale": "Page lists require runtime site hierarchy data." },
    "core/page-list-item": { "bucket": "dynamic-unsupported", "rationale": "Page list items are generated from site hierarchy data." },
    "core/paragraph": { "bucket": "raw-transformable", "rationale": "Plain text and paragraphs map directly to core/paragraph." },
    "core/pattern": { "bucket": "explicit-marker", "rationale": "Patterns are emitted only from explicit data-bfb-pattern markers naming a pattern slug." },
    "core/post-author": { "bucket": "compiler-only", "rationale": "Post author output requires current post author context." },
    "core/post-author-biography": { "bucket": "compiler-only", "rationale": "Post author biography requires current post author context." },
    "core/post-author-name": { "bucket": "compiler-only", "rationale": "Post author name requires current post author context." },
    "core/post-comments-count": { "bucket": "compiler-only", "rationale": "Post comments count requires current post and comment state." },
    "core/post-comments-form": { "bucket": "compiler-only", "rationale": "Comment forms require current post, user, and discussion settings." },
    "core/post-comments-link": { "bucket": "compiler-only", "rationale": "Comments links require current post and comment state." },
    "core/post-content": { "bucket": "compiler-only", "rationale": "Post content requires current post/template context." },
    "core/post-date": { "bucket": "compiler-only", "rationale": "Post date requires current post context." },
    "core/post-excerpt": { "bucket": "compiler-only", "rationale": "Post excerpt requires current post context." },
    "core/post-featured-image": { "bucket": "compiler-only", "rationale": "Featured image requires current post media identity." },
    "core/post-navigation-link": { "bucket": "compiler-only", "rationale": "Post navigation links require adjacent post query context." },
    "core/post-template": { "bucket": "compiler-only", "rationale": "Post templates require query-loop context." },
    "core/post-terms": { "bucket": "compiler-only", "rationale": "Post terms require current post taxonomy data." },
    "core/post-time-to-read": { "bucket": "compiler-only", "rationale": "Time-to-read requires current post content analysis." },
    "core/post-title": { "bucket": "compiler-only", "rationale": "Post titles require current post/template context." },
    "core/preformatted": { "bucket": "raw-transformable", "rationale": "Preformatted markup maps directly to core/preformatted when not code or verse." },
    "core/pullquote": { "bucket": "raw-transformable", "rationale": "Explicit pullquote markup maps to core/pullquote." },
    "core/query": { "bucket": "compiler-only", "rationale": "Query blocks require loop intent and query arguments." },
    "core/query-no-results": { "bucket": "compiler-only", "rationale": "No-results output requires query-loop context." },
    "core/query-pagination": { "bucket": "compiler-only", "rationale": "Query pagination requires query-loop state." },
    "core/query-pagination-next": { "bucket": "compiler-only", "rationale": "Query pagination links require query-loop state." },
    "core/query-pagination-numbers": { "bucket": "compiler-only", "rationale": "Query pagination numbers require query-loop state." },
    "core/query-pagination-previous": { "bucket": "compiler-only", "rationale": "Query pagination links require query-loop state." },
    "core/query-title": { "bucket": "compiler-only", "rationale": "Query titles require archive/search/query context." },
    "core/query-total": { "bucket": "compiler-only", "introduced_after": "6.9", "rationale": "Query totals require query-loop state." },
    "core/quote": { "bucket": "raw-transformable", "rationale": "Blockquote markup maps directly to core/quote unless it carries a pullquote signal." },
    "core/read-more": { "bucket": "compiler-only", "rationale": "Read-more links require current post URL and excerpt/content policy." },
    "core/rss": { "bucket": "dynamic-unsupported", "rationale": "RSS output depends on external feed runtime data." },
    "core/search": { "bucket": "dynamic-unsupported", "rationale": "Search forms are runtime site interaction UI, not raw rendered-content inference." },
    "core/separator": { "bucket": "raw-transformable", "rationale": "Horizontal rules map directly to core/separator." },
    "core/shortcode": { "bucket": "raw-transformable", "rationale": "Recognized shortcode text maps directly to core/shortcode." },
    "core/site-logo": { "bucket": "compiler-only", "rationale": "Site logo requires site identity metadata." },
    "core/site-tagline": { "bucket": "compiler-only", "rationale": "Site tagline requires site identity metadata." },
    "core/site-title": { "bucket": "compiler-only", "rationale": "Site title requires site identity metadata." },
    "core/social-link": { "bucket": "future-candidate", "rationale": "Static social links may be transformable later with conservative provider detection." },
    "core/social-links": { "bucket": "future-candidate", "rationale": "Static social link groups need a conservative wrapper and provider-detection contract." },
    "core/spacer": { "bucket": "raw-transformable", "rationale": "Empty explicit spacer elements with height can become core/spacer." },
    "core/table": { "bucket": "raw-transformable", "rationale": "Static tables map directly to core/table." },
    "core/tag-cloud": { "bucket": "dynamic-unsupported", "rationale": "Tag clouds require runtime taxonomy data." },
    "core/template-part": { "bucket": "explicit-marker", "rationale": "Template parts are emitted only from explicit data-bfb-template-part markers naming an area or slug." },
    "core/term-count": { "bucket": "compiler-only", "introduced_after": "6.9", "rationale": "Term counts require current term/query context." },
    "core/term-description": { "bucket": "compiler-only", "introduced_after": "6.9", "rationale": "Term descriptions require current term context." },
    "core/term-name": { "bucket": "compiler-only", "introduced_after": "6.9", "rationale": "Term names require current term context." },
    "core/term-template": { "bucket": "compiler-only", "introduced_after": "6.9", "rationale": "Term templates require terms-query context." },
    "core/terms-query": { "bucket": "compiler-only", "introduced_after": "6.9", "rationale": "Terms queries require taxonomy query intent and runtime term data." },
    "core/text-columns": { "bucket": "legacy-or-internal", "rationale": "Text columns are legacy/editor compatibility, superseded by columns/group transforms." },
    "core/verse": { "bucket": "raw-transformable", "rationale": "Explicit verse markup maps directly to core/verse." },
    "core/video": { "bucket": "raw-transformable", "rationale": "Video elements with static sources map directly to core/video." },
    "core/widget-group": { "bucket": "legacy-or-internal", "rationale": "Widget groups represent legacy widget-area compatibility, not raw content inference." }
  }
}
