Skip to content

lint / policy suppression の利用を静的検査する #47

Description

@koh110

背景

Policy as Code を導入しても、各 rule の disable comment / ignore / allowlist を無制限に利用できると、Agent や開発者が簡単に enforcement を迂回できる。

suppression 自体を禁止するのではなく、「例外が明示的・局所的・追跡可能」であることを保証する必要がある。

目的

lint / typecheck / custom checker の suppression を repository policy として統制する。

対象候補

  • oxlint-disable
  • eslint-disable
  • @ts-ignore
  • @ts-expect-error
  • checker-specific ignore
  • dependency-cruiser ignore
  • Knip ignore
  • secret scanner allowlist
  • policy checker exclusion

基本ルール

lint disable

  • file-wide disable を原則禁止
  • rule 名を必須にする
  • disable 理由を必須にする
  • project policy に対応する場合は policy ID を付与する
    -可能なら next-line / single-line scope に限定する

例:

// policy-exception: DB-002 reason="latest row selection requires findFirst"
// oxlint-disable-next-line coding-style/no-prisma-find-first

TypeScript

  • @ts-ignore は原則禁止
  • unavoidable な場合は @ts-expect-error + 理由を利用する
  • stale @ts-expect-error は TypeScript 自身に検出させる

Checker ignore

ignore / allowlist entry に最低限以下を持たせる。

policy id
target
reason

必要なら owner / expiry も追加する。

Acceptance Criteria

  • anonymous suppression を検出できる
  • file-wide lint disable を原則禁止する
  • project-specific policy suppression に policy ID / reason を要求する
  • @ts-ignore を禁止または厳格に制限する
  • custom checker の ignore entry も policy catalog と接続する
  • suppression 数を機械的に一覧化できる

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions