You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[finding] ComponentInput.defaultValue?: any (packages/types/src/base.ts:550) is why the marked plugin example in skills/objectui must carry a bare any — tighten the contract to unknown and the baseline row retires with the guide #7493
Filed by the skills lane seat (session session_01LraLgQVGq8egUwfYZpbYt1) from the #7463 flight (PR #7490, report comment 5523867580, out-of-scope finding 3). Unassigned, bare, for triage; landing surface packages/types (a published contract) plus one line in governed skills/objectui/guides/plugin-development.md and one row in KNOWN_BARE_ANY_EXAMPLES in scripts/check-skill-examples.mjs.
packages/types/src/base.ts:550 — defaultValue?: any; in the exported ComponentInput interface.
skills/objectui/guides/plugin-development.md:92 — the marked example restates it as defaultValue: any. The bare-any assertion PR feat(scripts): assert no bare any in a marked skill example, and scan .claude/skills too #7490 adds finds it, and it is declared verbatim as the baseline row skills/objectui/guides/plugin-development.md:92 property defaultValue — the one row of four whose guide is faithful prose rather than rot. Fixing the guide alone would make it lie about the contract it restates, which is why the flight left it declared instead of unmarking it.
Second site, same class (added 11:2xZ from the #7494 flight, PR #7496 report 5524854506, finding 2)
packages/core/src/validation/schema-validator.ts:459 — schema: any, the first parameter of the exported validateSchema. The testing guide's Pattern 3 fence now passes {} with no cast at all (PR fix(skills): teach the honest test-double idiom in testing.md, retiring its three bare-any rows #7496) precisely because the parameter is any: the guide is honest, the contract is wide. The honest fix is unknown with the narrowing done inside the validator, never in the guide restating it. Fold both sites into one PR or split by package — the dev's call, stated in the PR body.
Scope
Tighten defaultValue?: any to defaultValue?: unknown, or to the narrowest union the readers actually accept. Measure the read side first: the manifest serializer and every registry or renderer consumer of defaultValue ([finding] ComponentInput's inputType/min/max/step/placeholder have no reader — the manifest serializer forwards six keys and none of them #5905 records that several ComponentInput keys have no reader at all, so "who reads it" is the fact to settle at source, not assume). Contract-first: a declared type that erases checking is exactly the class the new assertion exists to catch.
Update the guide line to the new type and delete the baseline row in the same PR. The gate reports the row as STALE the moment the guide stops carrying the bare any, so leaving the row is a red, not an option.
Same treatment for validateSchema(schema: any): unknown at the boundary, narrowing inside; the Pattern 3 fence needs no change (it already passes a plain {}).
Size S. Fixes this card. Mixed surface: packages/types and packages/core owe changesets by their own gates; the guide line is governed skills/objectui/** (draft PR, human merge).
Filed by the skills lane seat (session
session_01LraLgQVGq8egUwfYZpbYt1) from the #7463 flight (PR #7490, report comment 5523867580, out-of-scope finding 3). Unassigned, bare, for triage; landing surfacepackages/types(a published contract) plus one line in governedskills/objectui/guides/plugin-development.mdand one row inKNOWN_BARE_ANY_EXAMPLESinscripts/check-skill-examples.mjs.Measured by the flight at PR #7490's head
2df07b7packages/types/src/base.ts:550—defaultValue?: any;in the exportedComponentInputinterface.skills/objectui/guides/plugin-development.md:92— the marked example restates it asdefaultValue: any. The bare-anyassertion PR feat(scripts): assert no bareanyin a marked skill example, and scan.claude/skillstoo #7490 adds finds it, and it is declared verbatim as the baseline rowskills/objectui/guides/plugin-development.md:92 property defaultValue— the one row of four whose guide is faithful prose rather than rot. Fixing the guide alone would make it lie about the contract it restates, which is why the flight left it declared instead of unmarking it.Second site, same class (added 11:2xZ from the #7494 flight, PR #7496 report 5524854506, finding 2)
packages/core/src/validation/schema-validator.ts:459—schema: any,the first parameter of the exportedvalidateSchema. The testing guide's Pattern 3 fence now passes{}with no cast at all (PR fix(skills): teach the honest test-double idiom in testing.md, retiring its three bare-any rows #7496) precisely because the parameter isany: the guide is honest, the contract is wide. The honest fix isunknownwith the narrowing done inside the validator, never in the guide restating it. Fold both sites into one PR or split by package — the dev's call, stated in the PR body.Scope
defaultValue?: anytodefaultValue?: unknown, or to the narrowest union the readers actually accept. Measure the read side first: the manifest serializer and every registry or renderer consumer ofdefaultValue([finding]ComponentInput'sinputType/min/max/step/placeholderhave no reader — the manifest serializer forwards six keys and none of them #5905 records that severalComponentInputkeys have no reader at all, so "who reads it" is the fact to settle at source, not assume). Contract-first: a declared type that erases checking is exactly the class the new assertion exists to catch.any, so leaving the row is a red, not an option.unknownis either a real narrowing site (add the narrowing there) or evidence the field is written and never read (say so; that is [finding]ComponentInput'sinputType/min/max/step/placeholderhave no reader — the manifest serializer forwards six keys and none of them #5905's class).validateSchema(schema: any):unknownat the boundary, narrowing inside; the Pattern 3 fence needs no change (it already passes a plain{}).Size S.
Fixesthis card. Mixed surface:packages/typesandpackages/coreowe changesets by their own gates; the guide line is governedskills/objectui/**(draft PR, human merge).Verified
search_issuesin objectui, 5 results read): [finding]ComponentInput'sinputType/min/max/step/placeholderhave no reader — the manifest serializer forwards six keys and none of them #5905 (sixComponentInputkeys with no reader — the read-side census this card leans on), A component type has THREE declared surfaces that disagree (TS schema type / registry meta inputs / renderer prop reads), and nothing reconciles or enforces them #4631 (three declared surfaces of a component type disagree; on hold,domain:spec),ComponentInput.type无法表达 spec 的联合类型,于是发布面永远比契约窄一个 arm ——page:header.title的内联翻译映射今天就会被 manifest 门报type-mismatch#3832 and ComponentInput.type 只有一个粗粒度 number 臂,无法表达整数/正数约束 —— 发布面比契约宽,checkType 对 spec 会拒的值零诊断 #5006 (closed;ComponentInput.typearms) — none carriesdefaultValue'sany.2df07b7/383b87d; re-measure at claim.Refs: #7463 · PR #7490 · #7494 · PR #7496 · #5905 · #4631.