Repository navigation
lint/types: 14,366 no-explicit-any warnings can never red CI — make it an error on packages/types/src, delete the vestigial (schema as any) reads, and type ComponentRendererProps with unknown #25918
Description
维护者速读
全仓 pnpm exec eslint packages/*/src apps/console/src:7,339 文件,0 error,16,183 warning,其中 @typescript-eslint/no-explicit-any 14,366(非测试源码 4,457)、react-hooks/set-state-in-effect 294、react-hooks/refs 201、no-unused-vars 200。规则是 warn 且无 --max-warnings,与 objectui#4806 同一结构:什么都不能让 CI 红。元数据路径上 155 处 (schema as any).KEY 读取,逐键核对后几乎全是遗留壳——真被藏住的只有 rowActionDefs。196 个注册渲染器 0 个用 ComponentRendererProps 泛型,81 份内联 [key: string]: any 签名。不做全仓翻转(objectui#8316 已拒),只在发布的授权面上加严。
Measured (2026-10-24, HEAD 7981384)
- ESLint census (5m26s wall): 7,339 files, 0 errors, 16,183 warnings.
@typescript-eslint/no-explicit-any14,366 — in non-test source 4,457: app-shell 1,188, components 415, plugin-detail 376, core 304, plugin-grid 267, fields 257, plugin-form 226, types 213. Alsoreact-refresh/only-export-components863,react-hooks/set-state-in-effect294,react-hooks/refs201,@typescript-eslint/no-unused-vars200,react-hooks/exhaustive-deps153.eslint.config.jssets'@typescript-eslint/no-explicit-any': 'warn'and no workflow passes--max-warnings. - Text census (non-test, excluding
ui/):: any2,091,as any1,301,as unknown as170,@ts-ignore0,@ts-expect-error1 real site. Top files by casts:plugin-grid/src/ObjectGrid.tsx156,plugin-list/src/ListView.tsx111,app-shell/src/views/ObjectView.tsx96,data-objectstack/src/index.ts85. - Metadata path: 155 reads of the shape
(schema|node|view|field|… as any).KEY— plugin-viewObjectView.tsx33,ListView.tsx27,ObjectGrid.tsx10,WizardForm.tsx8,action-group.tsx8. Checking every keyListViewreads through the cast againstpackages/types/src/objectql.ts:options,kanban,tree,timeline,gantt,gallery,calendar,bulkActionDefs,userActions,title,chartare all declared;rowActionDefsis declared nowhere (read via cast 3 times in ListView, 3 in ObjectGrid, 1 in plugin-view) and has no spec row (specview.zod.tshasrowActions,bulkActions,bulkActionDefs). objectui#11349 already removed the same vestigial casts fromSchemaRenderer. - Renderers:
packages/components/src/renderershas 196 files callingregister; 0 use theComponentRendererPropsgeneric; 81 declare an inline props type of the shape "schema of X, optional className, index signature to any";ComponentRendererPropsitself (packages/types/src/base.ts) is an index signature to any by design (#0.1 keeps renderer props tolerant).PluginScopeImpl.registerComponent(type: string, component: any, meta?: any)in core. - tsconfig:
strict: trueeverywhere;noUncheckedIndexedAccess,exactOptionalPropertyTypes,noImplicitOverrideappear in 0 configs; 38 of 40 packages extend the roottsconfig.json(noUnusedLocals: false), not the tier base — the objectui#4806 gap.
Recommendation (no new script)
- Scope
'@typescript-eslint/no-explicit-any': 'error'topackages/types/src— the published authoring face — the same wayeslint.config.jsalready scopesconsistent-type-assertions: nevertoRegistry.ts; 213 existing sites are the ceiling to burn down (e.g.complex.tsmetadata?: any,data.tsdata?: any). The repo-wide flip stays declined per objectui#8316. - Delete the
(schema as any)reads inListView.tsx, plugin-viewObjectView.tsxandObjectGrid.tsx; forrowActionDefsdecide spec-first (declare on the spec row, or stop reading) per AGENTS #0.1. - Change
ComponentRendererPropsand the 81 inline copies from an index signature to any to an index signature to unknown: forwarded keys stay admitted (the SchemaRenderer forward path in AGENTS §9 is untouched) but a renderer must narrow before use. Step 0 is the one-line change pluspnpm --filter @object-ui/components type-checkto count breaks — 未实测. - Optional decision box:
noUncheckedIndexedAccesserror count via onetsc -prun — 未实测.
Benefit: the published types face can no longer grow new any; props.foo.bar in renderers stops compiling silently; one undeclared metadata read (rowActionDefs) gets a contract.
Refs: objectui#4806, objectui#11349, objectui#8316, objectui#8347.
Filed by the read-only whole-repo review session https://claude.ai/code/session_01BDtwYUWhLGyWLzYQjZ95Cf on 2026-10-24; the maintainer approved filing (「同意,创建任务」). Full evidence files sit in that session's scratchpad (objectui-review-report.md, findings-*.md). ⛔ Not a claim; for triage to grade and route.
Generated by Claude Code
Activity
objectstack-fleet commentedon Oct 24, 2026
Triage: first grade —
tech-debt·priority:p3·domain:ui·area:devpath·pm:queue· triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-24T14:56Z⛔ Not a claim, ⛔ not a dispatch.
findingcomes off.(schema as any)reads inListView/ObjectView/ObjectGrid, and moveComponentRendererPropsand its 81 inline copies fromanytounknownindex signatures. ForrowActionDefs, go spec-first (AGENTS #0.1): it either becomes a spec card or the read stops.no-explicit-any: 'error'onpackages/types/src. A lint rule that can turn CI red is a new gate, and new gates default to no.Generated by Claude Code
objectstack-fleet commentedon Oct 26, 2026
Transferred 2026-10-26T03:58Z from objectstack-ai/objectui#13456, with its comments and timeline; the old URL redirects here. objectui moved into this repository as the
ui/workspace (epic #25677) and is being archived (#25854). The body is left exactly as filed.Paths. Read every repository path in the body with a
ui/prefix:apps/console/srcis nowui/apps/console/src;packages/types/src/objectql.tsis nowui/packages/types/src/objectql.ts;packages/components/src/renderersis nowui/packages/components/src/renderers;packages/types/src/base.tsis nowui/packages/types/src/base.ts;packages/types/srcis nowui/packages/types/src.Labels.
typeshad no twin in this repository and was dropped by the transfer; every other label stayed.No stale
pm:dispatchedor assignee to strip.Generated by Claude Code
objectstack-fleet commentedon Oct 26, 2026
Claim: PM loop round 1
Session:
session_017iXjUm1rujwDk7f3KT1Pkk(seat); implementing card threadsession_01GJjkZ6pmdwWoDYH8fE8FAnAccount:
os-steveBranch:
claude/project-thread-r8hdni(platform-assigned card-thread branch; a card thread can push only its assigned branch, and the name carries no issue number, so this claim is the identity record)Worktree: the card thread's own container
Domain:
domain:uiSeat:
domain:ui#1File surface: partial,
Part of #25918, the triage in-scope item only:ComponentRendererProps(ui/packages/types/src/base.ts) and the inline renderer props copies inui/packages/components/src/renderers/**go from an index signature toanyto one tounknown. Step 0: the one-linebase.tschange pluspnpm --filter @object-ui/components type-check, reporting the break count before editing further. ⛔ No ESLint rule change, and no(schema as any)reads in ListView/ObjectGrid/ObjectView (seat 2 files, separate slice). Re-recordedscripts/sdui-manifest.sources/{types,components}.json, a root.changeset/(stop on breach; explain in the report). ⛔ui/.github/**and the root.github/workflows/ci.ymlare out of bounds (maintainer's word, ui-merge epic in flight). Changeset in the root.changeset/.Container & model:
medium,mode:thread,model: TIER_DEFAULT (dispatch-gates --tier: no path-derived mandate),effort: highClause-②: yes (narrowing) — provisional: an index signature to
unknownnarrows what a renderer can do with a forwarded key without narrowing it first; FROM → TO migration in the changesetMetadata-protocol: none
Responsibility:
n/a: renderer defect in ui/, the producing code is the cited ui file; no platform path covers it; reached through the public ConsoleThread-read: 6407894809
Premise: holds for the in-scope item (triage first grade 6407890835: "move
ComponentRendererPropsand its 81 inline copies fromanytounknownindex signatures" is in scope; item 1, theno-explicit-anygate, is ⛔ out of scope until the maintainer names it and is NOT claimed here; 2026-10-26T18:51Z)Serial constraints cleared: types: check #25917 before landing; components: #25917 may change 4 files' type imports
Dispatch order handed to the card thread by the project coordinator (three partitions: ruling / mechanism hypotheses / suggested route); the dev does not claim, and starts only once this claim names its branch.
objectstack-fleet commentedon Oct 26, 2026
os-dev-report
{ "issue": 25918, "status": "done", "branch": "claude/project-thread-r8hdni", "pr": "https://github.com/objectstack-ai/objectstack/pull/26293", "session": "session_01GJjkZ6pmdwWoDYH8fE8FAn", "premise_still_valid": true, "summary": "Partial, Part of #25918, the claim 6424620547 surface only: ComponentRendererProps (ui/packages/types/src/base.ts) and 77 renderer props annotations in 74 files under ui/packages/components/src/renderers move from an index signature to any to one to unknown. Step 0 (base.ts alone) broke 0 sites; flipping the inline copies broke 65 (49 files) on components tsc, cleared by a package-local RendererHostProps (data-obj-id, data-obj-type, style, the host keys renderers read by name) plus per-renderer declarations (onPageChange, input-otp onChange/value, button loading, text className, form RenderFieldProps ref/field/emptyHint) and one visible cast in filter-builder. No ESLint change, no ListView/ObjectGrid/ObjectView edits. Changeset patch on both packages, Clause-②: yes (narrowing), Metadata-protocol: none, FROM → TO migration. sdui types/components sources re-recorded (manifest unchanged). #25917 (PR #26292) touches neither types nor components.", "tests": "At code commit 67418d8f (later commits: changeset + sdui records only), base origin/main 617f27eb. pnpm --filter @object-ui/components type-check exit 0 (tsc --noEmit and tsc -p tsconfig.test.json); @object-ui/types, @object-ui/react, @object-ui/core type-check exit 0 (step 0 tree). pnpm --dir ui exec vitest run packages/components/ packages/types/ packages/react/src/__tests__/ComponentRendererProps.reconciliation.test.ts --maxWorkers=2 under os-verify-lock: VERDICT command-exit 0, Test Files 826 passed | 1 skipped (827), Tests 14866 passed | 24 skipped. Downstream: no renderer props type is exported from components src/index.ts and ComponentRendererProps has no consumer beyond the two type pins, so no downstream package type-check reads the change. No ablation: no tested runtime behaviour changed (type-only).", "gates": "dispatch-gates --commands at e349c832: 40 derived, 39 exit 0, node scripts/check-adr-0087-registration.mjs --base origin/main exit 1. dispatch-gates --ran: 40 run, 0 NOT-MEASURED, 0 UNRUN. The adr-0087 red is a gate gap, not this change: predicate 1 finds no workspace manifest for @object-ui/* (PACKAGE_ROOTS omits ui/, #26220); predicate 4 refuses type-surface-only on ComponentRendererProps because the interface was concrete at base and the gate counts only a whole-symbol any as erased, not an any index-signature member. no-migration-prescription and runtime-interface-only refuse a FROM → TO block, which this changeset owes, so the changeset keeps the true type-surface-only disposition. CI check-runs on #26293: in_progress at report time (not waited on).", "dogfood_battery": "e349c832 · os-verify-lock VERDICT command-exit 0 (21m43s, shared box) · Test Files 297 passed | 3 skipped (300) · Tests 2527 passed | 18 skipped (2545) · no failures", "mcp_calls": "6 — all reads: issue_read get #25918, issue_read get_comments #25918 x2, issue_read get #26220, search_pull_requests (25917), pull_request_read get_files #26292. No MCP write.", "api_writes": "2 — relay pr_create (POST /repos/objectstack-ai/objectstack/pulls draft + POST /issues/26293/assignees os-steve, one action, run 40389039640, read-back identical), this os-dev-report comment via post-stamped.mjs (POST /issues/25918/comments). git push x5 not REST.", "open_questions": [ { "question": "How should #26293 clear check-adr-0087-registration?", "options": [ "A: hold #26293 Blocked-by #26220 and widen #26220 so predicate 4 also treats an any index-signature member of a concrete interface as erased (type-surface-only then verifies)", "B: land it red on that gate with the gap stated (only if the CI job that runs it does not block the queue; not measured here)", "C: rewrite the changeset to no-migration-prescription with the migration in prose (misstates the change: a TypeScript consumer does rewrite code; the detector-miss shape ADR-0087 D9 retires)" ], "recommendation": "A, because type-surface-only is the true disposition and only the gate cannot verify it for ui/ packages; C would game the detector." } ], "out_of_scope_findings": [ "class: b · reach: named producer: filter-builder renderer hands schema.value (authored FilterGroup, @object-ui/types) to FilterBuilder typed on FilterBuilderRowGroup; FilterBuilderRow and the authored row are assignable in neither direction (operator vocabulary one way, value requiredness the other), previously hidden by the any index signature; now one visible cast in complex/filter-builder.tsx · dedupe words: filter-builder FilterGroup FilterBuilderRowGroup schema.value cast", "carrier: none · noted, not filed: ActionGroupSchema / ActionMenuSchema (exported schema interfaces in action-group.tsx / action-menu.tsx) and html-elements AnyProps schema: any still carry any; outside the claim surface, in PR Acceptance notes", "carrier: #26220 · the adr-0087 gate gap above (ui roots, plus the index-signature predicate-4 case to add)" ] }Generated by Claude Code
19 remaining items
objectstack-fleet commentedon Oct 31, 2026
domain:ui#4 · os-sales · session_01L6bhgWqjXeTcS3jtug46Dv
os-dev-report
{ "issue": 25918, "status": "done", "branch": "claude/project-thread-epslnx", "pr": "https://github.com/objectstack-ai/objectstack/pull/28335", "session": "session_01L6bhgTB22iDFvxkkThZWCa", "premise_still_valid": true, "summary": "Partial, Part of #25918, claim 6538285678 surface only. ListView.tsx: the 26 (schema as any) casts on 19 code lines (the order's 21 grep lines include 2 comment lines) are gone. kanban, calendar, gallery, timeline, gantt, tree, chart and bulkActionDefs are declared ListViewSchema members (measured with the checker against the built @object-ui/types declarations, index signature stripped) and are now typed reads. rowActionDefs is declared on no list mirror and refused by the spec (objectui#8653 keeps the read), so it goes through one module-private helper hostRowActionDefsOf casting to Pick of DataTableSchema rowActionDefs; the predicate-key site's own narrow cast uses the same helper. No key declared in types or spec, no exported type changed, no ESLint config touched. The 2 comment lines that quote the retired casts (userActions collision note, retired title arm) are prose and stay.", "tests": "Head 0a1ec22650 (origin/main b33946512c merged, clean). Closure pnpm --workspace-concurrency=2 --filter '@object-ui/plugin-list^...' build under os-verify-lock: VERDICT command-exit 0. pnpm --filter @object-ui/plugin-list run type-check (tsc --noEmit and tsc -p tsconfig.test.json) exit 0. pnpm --dir ui exec vitest run --maxWorkers=3 packages/plugin-list/ plus the 27 out-of-package test files that read ListView.tsx off disk, under os-verify-lock: VERDICT command-exit 0, Test Files 202 passed (202), Tests 2337 passed (2337). New pin ListView.noAnySchemaCast.test.ts (AST scan for schema as any, plus a firing-control probe). Ablation after commit e4ac205e62: scripts/ablation-replace.mjs restored one cast (tree parentField) and the pin went red naming line 3735, restore blob bbaf90cc == HEAD; origin/main's ListView.tsx over the file: pin red with 26 hits, git checkout HEAD restored, git diff --quiet HEAD clean. eslint on ListView.tsx and the new test: 0 errors; ListView.tsx warnings 190 to 150.", "gates": "dispatch-gates --commands at 0a1ec22650: 34 derived, each run with exit captured before any pipe, all 34 exit 0; --ran: 34 derived, 34 run, 0 NOT-MEASURED, 0 UNRUN (derived zero). Same 34 all exit 0 at e4ac205e62 and 09ae34358a. node scripts/check-sdui-manifest.mjs exit 0. dispatch-gates --tier: no path-derived mandate (claim). CI check-runs on #28335: in_progress at report time (not waited on).", "dogfood_battery": "n/a: no ! in the PR title and Clause-2 no without a narrowing arm", "line_budget": "138 changed lines (+117 / -21, 3 files) per dispatch-gates, under the 3000 human-merge threshold", "files_changed": [ ".changeset/25918-list-view-typed-schema-reads.md", "ui/packages/plugin-list/src/ListView.tsx", "ui/packages/plugin-list/src/__tests__/ListView.noAnySchemaCast.test.ts" ], "deviations": "Changeset: patch on @object-ui/plugin-list (the emitted JS gains the module-private helper, so the shipped files change though behaviour does not), not skip-changeset. PR body line 2 links this card thread (the platform's required attribution block) rather than the seat thread named in order-common item 8. No assignee and no review request on the PR, per order-common (the platform's assign-via-MCP step skipped). Main was merged twice before pr_create (53749673ba, then b33946512c, which changed ListView.tsx for kanban lanes); type-check, tests and the 34 gates were re-run on the final head.", "mcp_calls": "5, all reads or session plumbing: issue_read get #25918, issue_read get_comments #25918, pull_request_read get #27206, list_pull_requests open; plus claude-code-remote subscribe_pr_activity #28335 (not a GitHub write). No GitHub MCP write.", "api_writes": "2: relay pr_create (draft #28335, run 41172742855, read-back 6722 bytes identical, assignees none); this report via post-stamped.mjs (POST /issues/25918/comments). git push x3 not REST.", "open_questions": [], "out_of_scope_findings": [ "noted only: ListView.tsx predicate-key site still reads bulkActionDefs through a narrow typed cast to readonly unknown[] (not an any cast); schema.bulkActionDefs would compile there · carrier: PR #28335 Acceptance notes, not filed" ] }Generated by Claude Code
objectstack-fleet commentedon Oct 31, 2026
domain:ui#4 · os-sales · session_01L6bhgWqjXeTcS3jtug46Dv
ACCEPT → PR #28335 comment 6539590091 (head
0a1ec226, 2026-10-31T05:31Z). Lands on all-green via the merge queue;Part of #25918, so the card is released topm:queuewith the remaining items when it merges.Generated by Claude Code
objectstack-fleet commentedon Oct 31, 2026
domain:ui#4 · os-sales · session_01L6bhgWqjXeTcS3jtug46Dv
Landed (partial: the
ListView.tsxreads) · 2026-10-31T06:09Z · PR #28335 merged through the merge queue asab0c5df8at 2026-10-31T06:08Z.git grep -c "(schema as any)"onui/packages/plugin-list/src/ListView.tsxefdddc90, themainbefore this PR)origin/main)hostRowActionDefsOf(the one narrowrowActionDefsread) onorigin/mainRelease: claim 6538285678 (session
session_01L6bhgWqjXeTcS3jtug46Dv, branchclaude/project-thread-epslnx). This was a partial landing, so the card returns topm:queuewith no assignee.Resume-from: none.
(schema as any)reads inListView.tsx, PR refactor(plugin-list): ListView reads its view blocks through ListViewSchema, not a (schema as any) cast #28335.no-explicit-any: 'error'onui/packages/types/src. ⛔ This stays out of scope until the maintainer names it (triage 6407890835: a new gate defaults to no).noUncheckedIndexedAccesserror count.Generated by Claude Code
objectstack-fleet commentedon Oct 31, 2026
domain:ui#5 · os-sales · session_01L6bhgUhKx1XHzkoikGjRB4
Claim: PM loop round 2 · 2026-10-31T08:25Z
Session:
session_01L6bhgUhKx1XHzkoikGjRB4Account:
os-salesBranch: none (a reading, no code change)
Worktree:
objectstack-issue-25918Domain:
domain:uiSeat:
domain:ui#5File surface: none. The one-run
noUncheckedIndexedAccesserror count named open on this card (release 6539922158): a throwaway local tsconfig flip in a worktree, counted per package, reported on this card, never pushed (stop on breach; explain in the report).Container & model: S mechanical,
mode:subagent,model: floor (no path-derived mandate),effort: mediumClause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card
Thread-read: 6539922158
Premise: holds (6539922158 lists the reading as the only open item besides the maintainer's lint-flip word)
Serial constraints cleared: none (no file is changed)
After the reading the card goes back to
pm:queuewith no assignee; the lint flip stays the maintainer's word (triage 6407890835).Generated by Claude Code
objectstack-fleet commentedon Oct 31, 2026
domain:ui#5 · os-sales · session_01L6bhgUhKx1XHzkoikGjRB4
os-dev-report
{ "issue": 25918, "status": "reading", "branch": "none (detached throwaway worktree of origin/main a878ff6c; nothing committed or pushed)", "pr": null, "session": "session_01L6bhgUhKx1XHzkoikGjRB4", "premise_still_valid": true, "summary": "noUncheckedIndexedAccess: true added to ui/tsconfig.json (the base 36 of 37 ui/packages tsconfigs extend; packages/runner/tsconfig.json extends nothing, so its src is not under the flag, only its test config is) yields 8338 distinct new error lines over 37 ui/packages (union of tsc --noEmit and tsc -p tsconfig.test.json per package); src-only (tsc --noEmit) 1409. Baseline with the flag off, same packages, same built state: 0 errors in 71 of 71 tsc invocations. Top: app-shell 2986, types 516, components 492, core 398, plugin-detail 362, plugin-form 348. Dominant codes: TS2532 4205, TS18048 2105, TS2345 1993, TS2322 641, TS2538 229 (all raw lines, with test duplicates). NOT MEASURED: ui/apps/* (console etc.) and ui/examples/* - they do not extend ui/tsconfig.json; and the flag was not applied through turbo, so no package build with the flag was run.", "tests": "origin/main a878ff6c. pnpm install --frozen-lockfile exit 0; turbo build of the 7 @objectstack packages + deps 37/37 ok; turbo run type-check --filter='./ui/packages/*' (flag off) 101/101 tasks successful, 0 'error TS'. Then per package pnpm exec tsc --noEmit and, where package.json type-check names it, tsc -p tsconfig.test.json (NODE_OPTIONS=--max-old-space-size=8192, under scripts/pm/os-verify-lock.sh), flag off: 71 invocations, all exit 0, 0 errors; flag on (one added line, noUncheckedIndexedAccess: true after strict in ui/tsconfig.json): 7 exit 0, 64 exit 2, 'error TS' lines per package in the table. Positive control: probe file ui/packages/auth/src/__probe25918.ts = 'const a: number[] = [1]; export const b: number = a[0];' fails under the flag with TS2322 'number | undefined' not assignable to 'number', and 0 matches with the flag removed; probe deleted. Worktree dependencies resolve @object-ui siblings through built dist (built flag-off), so each package is counted on its own sources; 47 lines in test-config logs are re-reports of sibling src files (components 20, plugin-detail 11, plugin-kanban 3, ...) and may be counted once in the owner package and once in the reporter, so the total can overcount by at most 47.", "gates": "n/a - reading, no diff, no PR; flag edit reverted (git status clean) and worktree removed.", "dogfood_battery": "n/a - no PR", "mcp_calls": "0 - no MCP GitHub calls", "api_writes": "1 - POST /repos/objectstack-ai/objectstack/issues/25918/comments via scripts/pm/post-stamped.mjs (this comment); GitHub reads by REST GET only; no git push", "open_questions": [], "out_of_scope_findings": ["class: c · reach: none (reading) · the flag is a separate gate decision for the maintainer (triage 6407890835: new gates default to no); a staged rollout would have to start at the leaf packages with 0-5 src errors (plugin-tree, providers, react-runtime, plugin-editor, runner, auth, plugin-list, react, i18n, permissions, plugin-markdown, plugin-timeline), while the test configs carry about 85 percent of the volume · carrier: this comment, noted, not filed"] }Per-package counts (flag on; baseline flag off = 0 everywhere):
tsc --noEmit(src)tsc -p tsconfig.test.jsonui/apps/*,ui/examples/*, roottsc -pprograms (type-check:e2e,:scripts,:vitest-setup); they do not extend the flipped base.objectstack-fleet commentedon Oct 31, 2026
domain:ui#5 · os-sales · session_01L6bhgUhKx1XHzkoikGjRB4
Release: claim 6541132366 (
session_01L6bhgUhKx1XHzkoikGjRB4,domain:ui#5) · 2026-10-31T09:17Z · reading delivered, card back topm:queuewith no assigneeResume-from: none
noUncheckedIndexedAccesscount, os-dev-report 6541583286. Seat check: the report carries a positive control (a probe that fails only under the flag) and a flag-off baseline of 0 errors on the same packages;ui/apps/*,ui/examples/*and the root tsc programs are recorded NOT MEASURED. Headline: 8338 new error lines over 37ui/packages(1409 insrcalone), about 85 percent from the test configs.no-explicit-any: 'error'flip onui/packages/types/src, which waits on the maintainer naming it (triage 6407890835: a new gate defaults to no). Nothing else here is dispatchable, so triage may move the card to the decision box or close it.Generated by Claude Code