Split out of #7493 by the triage seat (session session_01SwJQDFKe8tVit3BXQ9EfR5). #7493 is in the decision inbox awaiting a ruling on retiring ComponentInput.defaultValue (245 authoring sites, a manual-floor decision). This item does not depend on that ruling and should not be parked behind it — the domain:spec seat said so explicitly when it moved the parent (5553603343):
Items ② and ③ (unchanged by this): ② validateSchema(schema: any) in packages/core is domain:ui per triage and independent of ①'s outcome — triage may split it out now
⛔ Not claimed, not dispatched, no code written.
⚠️ Provenance — NOT re-derived by this seat
The site (packages/core/src/validation/schema-validator.ts, around :458-459 at the time) and the domain:ui lane both come from triage comment 5548740471 on #7493 and the seat's confirmation above. ⛔ Attributed, not measured here.
⚠️ Anchor on the symbol, ⛔ not on the line number. #7493's own round measured that card's line numbers stale twice over (base.ts :550 → :581 → :608 across three readings in two days). Re-derive validateSchema's position before touching anything.
Why it is likely cheap — and the one thing to check first
⭐ For a parameter, any → unknown is caller-compatible: every value is assignable to unknown, so no call site breaks. The cost lands inside the implementation, which must narrow before it uses the value. That makes this materially cheaper than #7493's item ① (a published property whose narrowing would break authored metadata), and is the reason the two do not belong on one card.
⚠️ But verify that before relying on it: if validateSchema's return type or generics thread the parameter's any outward, the change stops being caller-compatible and this grade needs revisiting. 📌 Re-grade trigger: if narrowing the parameter forces a change at any call site outside this package, ⛔ stop and report — it becomes a published-surface narrowing (Clause-②) rather than an internal tightening.
⛔ Boundaries
priority:p3 inherited from the parent and not inflated: nothing user-visible, no measured caller harm. The value is closing one more bare any on a published surface.
Refs: #7493 (parent, item ①, in the decision inbox) · triage 5548740471 (the three-face split) · 5553603343 (the move to the decision inbox, which named this split) · #5905 · #7781.
Split out of #7493 by the triage seat (session
session_01SwJQDFKe8tVit3BXQ9EfR5). #7493 is in the decision inbox awaiting a ruling on retiringComponentInput.defaultValue(245 authoring sites, a manual-floor decision). This item does not depend on that ruling and should not be parked behind it — thedomain:specseat said so explicitly when it moved the parent (5553603343):⛔ Not claimed, not dispatched, no code written.
The site (
packages/core/src/validation/schema-validator.ts, around:458-459at the time) and thedomain:uilane both come from triage comment5548740471on #7493 and the seat's confirmation above. ⛔ Attributed, not measured here.base.ts:550→:581→:608across three readings in two days). Re-derivevalidateSchema's position before touching anything.Why it is likely cheap — and the one thing to check first
⭐ For a parameter,
any→unknownis caller-compatible: every value is assignable tounknown, so no call site breaks. The cost lands inside the implementation, which must narrow before it uses the value. That makes this materially cheaper than #7493's item ① (a published property whose narrowing would break authored metadata), and is the reason the two do not belong on one card.validateSchema's return type or generics thread the parameter'sanyoutward, the change stops being caller-compatible and this grade needs revisiting. 📌 Re-grade trigger: if narrowing the parameter forces a change at any call site outside this package, ⛔ stop and report — it becomes a published-surface narrowing (Clause-②) rather than an internal tightening.⛔ Boundaries
ComponentInput.defaultValue(either face) — that is [finding]ComponentInput.defaultValue?: any(packages/types/src/base.ts:550) is why the marked plugin example inskills/objectuimust carry a bareany— tighten the contract tounknownand the baseline row retires with the guide #7493 item ①, and it is awaiting a maintainer ruling between retire / tighten / forward / keep.KNOWN_BARE_ANY_EXAMPLESbaseline row live in governedskills/objectui/**+scripts/check-skill-examples.mjs. That is a separate draft PR under maintainer merge, and its content depends on what ① becomes.KNOWN_BARE_ANY_EXAMPLESbaseline or any bare-anyratchet count, ⛔ stop and report rather than editing the baseline — the ratchet is shrink-only and its row belongs to item ③.priority:p3inherited from the parent and not inflated: nothing user-visible, no measured caller harm. The value is closing one more bareanyon a published surface.Refs: #7493 (parent, item ①, in the decision inbox) · triage
5548740471(the three-face split) ·5553603343(the move to the decision inbox, which named this split) · #5905 · #7781.