Skip to content

chore: delete the 211 inert no-explicit-any eslint-disable comments outside ui/ - #26252

Merged
objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/project-thread-6od3f3
Oct 26, 2026
Merged

objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/project-thread-6od3f3

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Requested by Steve · project thread
Fixes #26082
Clause-②: no
Metadata-protocol: none

What changed

Ruling 6417062243, letter C: delete the 211 @typescript-eslint/no-explicit-any disable comments outside ui/. They are inert twice over: the root eslint.config.mjs never loads @typescript-eslint/eslint-plugin, and pnpm lint runs eslint . --no-inline-config. Nothing is installed, no rule is added, eslint.config.mjs and every baseline are untouched, and nothing under ui/ is touched (#25918 owns that tree).

Every comment named only this one rule, so no comment needed a partial edit. Two shapes, both handled mechanically:

Shape Count Edit
a whole-line // eslint-disable-next-line @typescript-eslint/no-explicit-any 166 the line is deleted, no blank line left in its place
a trailing // eslint-disable-line @typescript-eslint/no-explicit-any 45 the comment and the whitespace before it are cut, the code is kept byte for byte

There were no block /* eslint-disable … */ comments on this rule outside ui/.

Package Files Comments
packages/qa/dogfood 41 120
packages/verify 15 32
packages/plugins/plugin-security 6 41
packages/plugins/plugin-auth 1 10
packages/core 1 6
packages/runtime 1 1
packages/types 1 1

65 of the 66 files are tests; the one source file is packages/verify/src/handle.ts (3 comment lines).

How it was verified (head cd984c91)

  • Grep. git grep -c 'eslint-disable.*@typescript-eslint/no-explicit-any' -- ':!ui' was 66 files / 211 comments on origin/main (601c7738 at start, still 211 at e6dfeb08); on this head it matches nothing (exit 1).
  • Diff shape. Every removed line contains the comment (0 removed lines without it); the 45 added lines are exactly the 45 trailing-comment lines with the comment cut (compared line for line); no eslint text is added; no file loses its final newline.
  • pnpm lint before and after, output diff empty. Before: a clean worktree at origin/main e6dfeb08; after: this head. Both exit 0, and the outputs are identical once the checkout path is normalised. The same pair was also run on the first head (c91379fb against 601c7738), also identical.
  • Typecheck. pnpm --filter … run typecheck on the seven touched packages (core, plugin-auth, plugin-security, dogfood, runtime, types, verify), on this head after a full pnpm build (119/119 tasks): all seven Done, lock VERDICT command-exit 0.
  • Tests on this head. Each package's vitest run --maxWorkers=2 under the verify lock, every VERDICT command-exit 0: types 29 files / 781 tests; verify 46 / 393; plugin-auth 198 / 3,779 (10 skipped); plugin-security 225 / 4,920 (45 skipped); core 121 / 2,778; runtime 455 / 7,408 (19 skipped) (core, runtime and types with --project local, their test script's project). dogfood: the 41 touched files only, 41 / 345 passed; the whole dogfood battery is CI's (no ! in the title and no (narrowing) arm). The same set was green on the first head too.
  • Gates. node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack derived 67 commands; all 67 exit 0, each exit taken before any pipe; --ran reconciliation: 67 run, 0 NOT-MEASURED, 0 UNRUN, a derived zero. (check-plugin-teardown-shape.mjs --self-test needs its pinned fixture commit, fetched into this shallow clone first; check:dts-closure and check:dual-build-cjs-loads read every package's dist/, so they were read after the full build.)
  • Governed surface. node scripts/pm/check-governed-merges.mjs --test on the 66 paths: 0 of 66 path(s) hit the register.
  • Changeset: none, this carries skip-changeset. Only comments are deleted: 65 files are tests outside every package's files[], and in handle.ts the three deleted lines are line comments, so no symbol, type or runtime behaviour in @objectstack/verify's dist changes.

Acceptance notes


Generated by Claude Code

…de ui/

The root ESLint config never loads @typescript-eslint/eslint-plugin and
`pnpm lint` runs with --no-inline-config, so these 211 comments in 66 files
disabled a rule nobody runs. Delete them: a whole-line
eslint-disable-next-line comment goes with its line, a trailing
eslint-disable-line comment is cut from the end of its line. No rule,
plugin, config or baseline changes; nothing under ui/.

Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D8CEyQZUZgQM1xXhoZeKgb
…-6od3f3

# Conflicts:
#	packages/verify/src/harness.org-context.test.ts
@objectstack-fleet objectstack-fleet Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Oct 26, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

2 anchor(s) derived from 1 changed package(s); no hand-written page names any of them, so this run has nothing to list — not a clean bill of health. This check sees only pages that NAME a derived anchor: one that documents this change in prose, or enumerates it in an authoring dialect, names none and stays invisible to it on every run.

What this run could not see
  • the SDK route bridge reached 54 of 206 client-bound route-ledger rows — the other 152 have no registrar path: tail to select them, so pages documenting THEIR client methods cannot appear above, on this or any run. Of those 152: 0 are remediable by widening that discovery convention (an in-repo file declares the path; the convention did not scan it); 55 are structural — on a ledger where NOT ONE row is declared in-repo, so no discovery change reaches them at any price; 97 are undecided (no in-repo declaration, on a ledger that has other in-repo registrars — absence and an unreadable spelling are not distinguishable here). The rows themselves: node scripts/docs-audit/affected-docs.mjs --bridge-coverage
  • a page that states a rule by its inputs shares no identifier with the emitter that implements the rule, so an emitter-only diff cannot list it — not on this run and not on any run. Measured on fix(driver-sql): emit varchar(maxLength) for a text field a declared index keys on #11430: content/docs/protocol/objectql/types.mdx documents the text-family column mapping by the ObjectQL type names it maps FROM (text / textarea / html) while the diff changed createColumn; it went unlisted, and it was the page that diff falsified, in four places. No shared token exists to detect this on, so a rule your change carries has to be re-read by hand in the pages that restate it.
  • a key NAME is not a key, so the hand re-read the line above prescribes can land on the wrong schema. The same spelling is authorable on one governed type and a [REMOVED] tombstone on another for each of active, aria, joins, objects, template, tools and version (censused on [finding] tools is a key on BOTH AgentSchema (tombstoned, dead) and SkillSchema (live, cloud-attested), so a name-based search attributes skill examples to the agent key — it produced a false stop-the-line alarm on PR #19059 #19093 over the liveness ledger's governed types, top-level keys); nothing in a search result distinguishes the two, so a grep hit on a LIVE example reads as evidence about the DEAD key. Measured on fix(spec): the agent.tools liveness row says dead — it claimed live on a key the schema tombstoned #19059: content/docs/ai/agents.mdx was reported as contradicting the agent.tools tombstone over its tools: example at :161, which is inside the defineSkill({ block opened at :155 — the page was already correct. Settle ownership by PARSING the value against both schemas, never by the name: that literal PASSES SkillSchema, and as an AgentSchema it FAILS at tools with the tombstone prescription. ⛔ These names are not the whole class — a key retired through a .strict() guidance map leaves no tombstone in the walked shape and none of them here (tool.category, live as AIToolDefinition.category).

Coarse fallback — 7 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json a1477dec8a216229750b4404fc20cd07d6f2907e → packageMentionDocs.

Which tree this was computed on

This run read content/docs from f603dab74d17cbdac6c88f54df569c30076fd1b6 — the merge of head cd984c9181f8772310e6c2047c827080164729ab into base a1477dec8a216229750b4404fc20cd07d6f2907e, which is what actions/checkout gives a pull_request run. Not the PR head.

A worktree cut from an older main holds a different content/docs, so re-deriving there can legitimately return a different list — that is a different tree, not a wrong row. To answer on the same tree:

# while this PR is open — GitHub drops the merge commit once it closes
git fetch origin f603dab74d17cbdac6c88f54df569c30076fd1b6 && git checkout f603dab74d17cbdac6c88f54df569c30076fd1b6
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin a1477dec8a216229750b4404fc20cd07d6f2907e cd984c9181f8772310e6c2047c827080164729ab && git checkout -B drift-repro a1477dec8a216229750b4404fc20cd07d6f2907e && git merge --no-ff cd984c9181f8772310e6c2047c827080164729ab

node scripts/docs-audit/affected-docs.mjs --json a1477dec8a216229750b4404fc20cd07d6f2907e

⚠️ That checkout carried uncommitted changes, so the commit above does not fully identify what was read.

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

席位核对 · ACCEPT · devx seat 2 · 2026-10-26T17:14Z

Seat domain:devx#2 (#20163) · session_01Q4MDXRbEJCNdPAP4SiXwp9 · reviewed head cd984c9181 · card #26082 (ruling 6417062243, letter C). PR carries Fixes #26082.


Generated by Claude Code

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

Labels

size/m skip-changeset PR has no user-facing published change; bypasses the changeset gate tests

Projects

None yet

2 participants