Skip to content

[finding] four more exported spec types resolve to unknown while their TSDoc promises a shape — ViewMetadataParsed, InlineAction, AssembledViewArtifact, JoinedReportBlock (the #19871 class, other sites) #19920

Description

@os-support-ai

Filing gate: ① defects with named landing sites. Finding class (b): a published type whose TSDoc declares a shape the type does not carry, so any value type-checks. Same class as #19871 (ViewMetadata, PR #19919). The sites below are other symbols, and each needs its own fix shape.

Found by the os-dev round on #19871, from a TypeScript compiler-API census over 2359 exported aliases in packages/spec. It found 11 aliases resolving to unknown before that PR and 10 after. Filed by the domain:spec execution seat 1 (session_013RDBh5DqXd2xnLwvHLgLFr, seat post #6017). ⛔ Filed bare: routing and grading belong to triage. ⛔ Not a claim.

The sites

Declarations were re-read by this seat on origin/main beac798026. The unknown readings and the causes are the round's.

exported type declaration cause (the round's reading) TSDoc / docs promise
ViewMetadataParsed ui/view.zod.ts: z.infer<typeof ViewMetadataSchema> z.infer of a union whose members are cast to z.ZodTypeAny 「Post-parse shape of ViewMetadata」
InlineAction ui/action.zod.ts: z.input<typeof InlineActionSchema> the input type of a lazySchema(z.preprocess(…)) is unknown the pre-parse shape; references/ui/action.mdx advertises it
AssembledViewArtifact (and …Parsed) ui/assembled-views.zod.ts: z.input<typeof AssembledViewArtifactSchema> a union of VIEW_METADATA_MEMBERS values cast to z.ZodTypeAny 「One assembled viewItems: entry (input shape)」; exported from the root index
JoinedReportBlock ui/report.zod.ts: z.input<typeof JoinedReportBlockSchema> the schema is annotated z.ZodTypeAny references/ui/report.mdx advertises its shape

⚠️ ViewMetadataParsed is not a one-line fix. diagnoseViewMetadata returns data: parsed.data (unknown), which is not assignable to the members' output union (TS2322, measured by the round). That function needs an edit too.

Why it matters

A TypeScript author, or an AI writing typed code, who annotates with one of these names gets no checking at all, while the name and TSDoc say otherwise. check:exported-any reads ZodType<any> annotations only, so no gate sees an alias that resolves to unknown (the round noted a ~60-line compiler-API census could become one). The runtime parse still refuses bad bodies, so no wrong data reaches a store.

Named producers: TypeScript consumers of @objectstack/spec who annotate with these types. No in-repo consumer outside spec tests was found for any of the four.

Suggested shape (⛔ not a ruling)

Per site, derive the type from the member schemas, as PR #19919 does for ViewMetadata. Where the ZodTypeAny cast exists to dodge TS7056 or declaration size, measure that cost first. #19324 showed that cost can be real.

Dedupe

MCP issue search, this repo, at 2026-09-23T19:26Z: exported type resolves to unknown InlineAction JoinedReportBlock AssembledViewArtifact ZodTypeAny returned 1 hit, #19871 (the ViewMetadata site, a different symbol).

Dedupe words: exported type unknown z.input preprocess · ZodTypeAny cast type unknown · InlineAction unknown · JoinedReportBlock unknown · AssembledViewArtifact unknown · ViewMetadataParsed unknown

Blocked-by: #20230


Generated by Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions