Observation from #16334 (spec half of #16049), filed unassigned. Sub-issue of #15638 because it is the same block and the same class — an arm of the auto-discovery block in packages/plugins/plugin-hono-server/src/hono-plugin.ts (around line 508) that no object can reach any more.
What is dead, and since when
Evidence. The two pins that exercised those branches through the real kernel — "derives the slug from the last path segment of the plugin name when none is declared" and "a ui type with no staticPath mounts nothing" in src/ui-plugin-auto-discovery.pin.test.ts — had to be inverted into refusal pins on the #16334 PR (#16598): with the schema tightened, kernel.use() throws PLUGIN_CONTRACT_VIOLATION … at 'slug' / at 'staticPath' before start() ever runs. The it.todo for case C in that file still narrates a boot path that "never calls PluginSchema", which stopped being true at #16363.
Left out of #16334 by scope. Retiring the two arms is a plugin-hono-server change with its own verification surface, and #15638 already owns the third arm of the same guard. Suggested shape, for whoever lands it: read plugin.slug and plugin.staticPath as the contract now guarantees them, drop the fallback and the guard, and rewrite the case-C todo against the post-#16363 boot path. The same block also reads an isDefault alias beside default (plugin.default || plugin.isDefault); isDefault is not a PluginSchema key and is worth a look in the same pass.
Observation from #16334 (spec half of #16049), filed unassigned. Sub-issue of #15638 because it is the same block and the same class — an arm of the auto-discovery block in
packages/plugins/plugin-hono-server/src/hono-plugin.ts(around line 508) that no object can reach any more.What is dead, and since when
const slug = plugin.slug || plugin.name.split('/').pop();— the||fallback. With spec:PluginSchemamakesstaticPath/slugreally required fortype: "ui"(superRefine), and core'sPlugininterface derives fromPluginDefinition(spec half of #16049) #16334,PluginSchemarefuses atype: 'ui'plugin withoutslug, andkernel.use()runs the schema ([finding] PluginSchema has zero runtime callers — the boot path validates name, init and semver only, so the declared plugin contract is never enforced #16049, landed as feat(core): enforce PluginSchema at kernel.use() (#16049) #16363), so auiobject with noslugnever reacheskernel.plugins, the only population the block iterates.if ((plugin.type === 'ui' || plugin.type === 'ui-plugin') && plugin.staticPath)— the&& plugin.staticPathconjunct, for the same reason (staticPathis required foruitoo). Theui-plugindisjunct is [finding]plugin-hono-serverstill accepts the legacyui-plugintype thatPluginSchemarefuses — an unreachable arm under ADR-0049 #15638's own subject and was already unreachable after feat(core): enforce PluginSchema at kernel.use() (#16049) #16363.Evidence. The two pins that exercised those branches through the real kernel — "derives the slug from the last path segment of the plugin name when none is declared" and "a
uitype with no staticPath mounts nothing" insrc/ui-plugin-auto-discovery.pin.test.ts— had to be inverted into refusal pins on the #16334 PR (#16598): with the schema tightened,kernel.use()throwsPLUGIN_CONTRACT_VIOLATION … at 'slug'/at 'staticPath'beforestart()ever runs. Theit.todofor case C in that file still narrates a boot path that "never callsPluginSchema", which stopped being true at #16363.Left out of #16334 by scope. Retiring the two arms is a
plugin-hono-serverchange with its own verification surface, and #15638 already owns the third arm of the same guard. Suggested shape, for whoever lands it: readplugin.slugandplugin.staticPathas the contract now guarantees them, drop the fallback and the guard, and rewrite the case-C todo against the post-#16363 boot path. The same block also reads anisDefaultalias besidedefault(plugin.default || plugin.isDefault);isDefaultis not aPluginSchemakey and is worth a look in the same pass.