A post type registered without the right arguments is invisible to the site editor, which means its template is still a PHP file.
register_post_type( 'case_study', array(
'public' => true,
'show_in_rest' => true, // required for the block editor
'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt' ),
'has_archive' => true,
'rewrite' => array( 'slug' => 'case-studies' ),
'template' => array(
array( 'core/heading', array( 'level' => 2 ) ),
array( 'core/paragraph' ),
),
) );
show_in_rest is the switch that makes the block editor available at all, and has_archive is what makes the site editor offer an archive template for the type. The template argument is a separate and useful thing — it seeds new posts with a starting block structure, which for a content type with a consistent shape saves an explanation to every author.