Skip to content

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

Open

Description

@os-zhuang

维护者速读

全仓 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-any 14,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. Also react-refresh/only-export-components 863, react-hooks/set-state-in-effect 294, react-hooks/refs 201, @typescript-eslint/no-unused-vars 200, react-hooks/exhaustive-deps 153. eslint.config.js sets '@typescript-eslint/no-explicit-any': 'warn' and no workflow passes --max-warnings.
  • Text census (non-test, excluding ui/): : any 2,091, as any 1,301, as unknown as 170, @ts-ignore 0, @ts-expect-error 1 real site. Top files by casts: plugin-grid/src/ObjectGrid.tsx 156, plugin-list/src/ListView.tsx 111, app-shell/src/views/ObjectView.tsx 96, data-objectstack/src/index.ts 85.
  • Metadata path: 155 reads of the shape (schema|node|view|field|… as any).KEY — plugin-view ObjectView.tsx 33, ListView.tsx 27, ObjectGrid.tsx 10, WizardForm.tsx 8, action-group.tsx 8. Checking every key ListView reads through the cast against packages/types/src/objectql.ts: options, kanban, tree, timeline, gantt, gallery, calendar, bulkActionDefs, userActions, title, chart are all declared; rowActionDefs is declared nowhere (read via cast 3 times in ListView, 3 in ObjectGrid, 1 in plugin-view) and has no spec row (spec view.zod.ts has rowActions, bulkActions, bulkActionDefs). objectui#11349 already removed the same vestigial casts from SchemaRenderer.
  • Renderers: packages/components/src/renderers has 196 files calling register; 0 use the ComponentRendererProps generic; 81 declare an inline props type of the shape "schema of X, optional className, index signature to any"; ComponentRendererProps itself (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: true everywhere; noUncheckedIndexedAccess, exactOptionalPropertyTypes, noImplicitOverride appear in 0 configs; 38 of 40 packages extend the root tsconfig.json (noUnusedLocals: false), not the tier base — the objectui#4806 gap.

Recommendation (no new script)

  • Scope '@typescript-eslint/no-explicit-any': 'error' to packages/types/src — the published authoring face — the same way eslint.config.js already scopes consistent-type-assertions: never to Registry.ts; 213 existing sites are the ceiling to burn down (e.g. complex.ts metadata?: any, data.ts data?: any). The repo-wide flip stays declined per objectui#8316.
  • Delete the (schema as any) reads in ListView.tsx, plugin-view ObjectView.tsx and ObjectGrid.tsx; for rowActionDefs decide spec-first (declare on the spec row, or stop reading) per AGENTS #0.1.
  • Change ComponentRendererProps and 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 plus pnpm --filter @object-ui/components type-check to count breaks — 未实测.
  • Optional decision box: noUncheckedIndexedAccess error count via one tsc -p run — 未实测.

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

  1. added
    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterate
    and removed on Oct 24, 2026
  2. objectstack-fleet commented on Oct 24, 2026

    @objectstack-fleet
    Contributor

    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. finding comes off.

    • In scope: delete the vestigial (schema as any) reads in ListView / ObjectView / ObjectGrid, and move ComponentRendererProps and its 81 inline copies from any to unknown index signatures. For rowActionDefs, go spec-first (AGENTS #0.1): it either becomes a spec card or the read stops.
    • ⛔ Out of scope until the maintainer names it: no-explicit-any: 'error' on packages/types/src. A lint rule that can turn CI red is a new gate, and new gates default to no.

    Generated by Claude Code

  3. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    Contributor

    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/src is now ui/apps/console/src; packages/types/src/objectql.ts is now ui/packages/types/src/objectql.ts; packages/components/src/renderers is now ui/packages/components/src/renderers; packages/types/src/base.ts is now ui/packages/types/src/base.ts; packages/types/src is now ui/packages/types/src.

    Labels. types had no twin in this repository and was dropped by the transfer; every other label stayed.

    No stale pm:dispatched or assignee to strip.


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    Contributor

    Claim: PM loop round 1
    Session: session_017iXjUm1rujwDk7f3KT1Pkk (seat); implementing card thread session_01GJjkZ6pmdwWoDYH8fE8FAn
    Account: os-steve
    Branch: 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:ui
    Seat: domain:ui#1
    File surface: partial, Part of #25918, the triage in-scope item only: ComponentRendererProps (ui/packages/types/src/base.ts) and the inline renderer props copies in ui/packages/components/src/renderers/** go from an index signature to any to one to unknown. Step 0: the one-line base.ts change plus pnpm --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-recorded scripts/sdui-manifest.sources/{types,components}.json, a root .changeset/ (stop on breach; explain in the report). ⛔ ui/.github/** and the root .github/workflows/ci.yml are 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: high
    Clause-②: yes (narrowing) — provisional: an index signature to unknown narrows what a renderer can do with a forwarded key without narrowing it first; FROM → TO migration in the changeset
    Metadata-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 Console
    Thread-read: 6407894809
    Premise: holds for the in-scope item (triage first grade 6407890835: "move ComponentRendererProps and its 81 inline copies from any to unknown index signatures" is in scope; item 1, the no-explicit-any gate, 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.

  5. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    Contributor

    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

  6. 19 remaining items

  7. objectstack-fleet commented on Oct 31, 2026

    @objectstack-fleet
    Contributor

    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

  8. objectstack-fleet commented on Oct 31, 2026

    @objectstack-fleet
    Contributor

    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 to pm:queue with the remaining items when it merges.


    Generated by Claude Code

  9. objectstack-fleet commented on Oct 31, 2026

    @objectstack-fleet
    Contributor

    domain:ui#4 · os-sales · session_01L6bhgWqjXeTcS3jtug46Dv

    Landed (partial: the ListView.tsx reads) · 2026-10-31T06:09Z · PR #28335 merged through the merge queue as ab0c5df8 at 2026-10-31T06:08Z.

    probe: git grep -c "(schema as any)" on ui/packages/plugin-list/src/ListView.tsx count
    before (efdddc90, the main before this PR) 21
    now (origin/main) 2, both comment prose
    hostRowActionDefsOf (the one narrow rowActionDefs read) on origin/main 4

    Release: claim 6538285678 (session session_01L6bhgWqjXeTcS3jtug46Dv, branch claude/project-thread-epslnx). This was a partial landing, so the card returns to pm:queue with no assignee.
    Resume-from: none.


    Generated by Claude Code

  10. objectstack-fleet commented on Oct 31, 2026

    @objectstack-fleet
    Contributor

    domain:ui#5 · os-sales · session_01L6bhgUhKx1XHzkoikGjRB4

    Claim: PM loop round 2 · 2026-10-31T08:25Z
    Session: session_01L6bhgUhKx1XHzkoikGjRB4
    Account: os-sales
    Branch: none (a reading, no code change)
    Worktree: objectstack-issue-25918
    Domain: domain:ui
    Seat: domain:ui#5
    File surface: none. The one-run noUncheckedIndexedAccess error 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: medium
    Clause-②: 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:queue with no assignee; the lint flip stays the maintainer's word (triage 6407890835).


    Generated by Claude Code

  11. objectstack-fleet commented on Oct 31, 2026

    @objectstack-fleet
    Contributor

    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):

    package tsc --noEmit (src) tsc -p tsconfig.test.json union (distinct error lines)
    app-shell 490 2978 2986
    types 2 516 516
    components 39 492 492
    core 107 398 398
    plugin-detail 29 362 362
    plugin-form 9 348 348
    plugin-grid 60 325 327
    plugin-gantt 67 294 294
    plugin-list 5 269 269
    fields 75 262 262
    plugin-dashboard 26 237 237
    plugin-charts 31 199 199
    data-objectstack 185 n/a (no test config) 185
    plugin-designer 21 169 169
    react 5 162 162
    plugin-chatbot 12 120 120
    plugin-kanban 7 106 106
    plugin-report 40 105 105
    plugin-calendar 26 100 100
    plugin-timeline 4 92 92
    cli 86 n/a (no test config) 86
    plugin-view 10 77 77
    permissions 5 76 76
    layout 10 74 74
    plugin-tree 0 60 60
    auth 1 57 57
    i18n 5 52 52
    collaboration 12 41 41
    plugin-map 14 40 40
    mobile 20 20 20
    create-plugin 0 14 14
    plugin-markdown 5 6 6
    runner 0 3 3
    providers 0 1 1
    react-runtime 0 1 1
    test-support 1 n/a (no test config) 1
    plugin-editor 0 0 0
    total (37 packages) 1409 8056 8338
    Not measured: ui/apps/*, ui/examples/*, root tsc -p programs (type-check:e2e, :scripts, :vitest-setup); they do not extend the flipped base.
  12. objectstack-fleet commented on Oct 31, 2026

    @objectstack-fleet
    Contributor

    domain:ui#5 · os-sales · session_01L6bhgUhKx1XHzkoikGjRB4

    Release: claim 6541132366 (session_01L6bhgUhKx1XHzkoikGjRB4, domain:ui#5) · 2026-10-31T09:17Z · reading delivered, card back to pm:queue with no assignee
    Resume-from: none

    • Delivered: the one-run noUncheckedIndexedAccess count, 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 37 ui/packages (1409 in src alone), about 85 percent from the test configs.
    • Still open on this card: only the no-explicit-any: 'error' flip on ui/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

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions