Skip to content

Convention Audit

opencli convention-audit scans adapter metadata plus source files for common agent-native convention violations.

The command is intentionally report-first. It gives agents a shared fact base before starting a sweep PR; --strict can be used later by CI gates.

Usage

bash
opencli convention-audit
opencli convention-audit --site twitter
opencli convention-audit twitter/search
opencli convention-audit --site pixiv -f yaml
opencli convention-audit --strict

Formats:

  • table prints a grouped human-readable report.
  • yaml is the recommended agent-facing format.
  • json is available for stricter machine consumers.

Rules

The first version reports these categories:

  • silent-column-drop: source rows emit top-level keys that are not present in columns.
  • camelCase-in-columns: output columns should use stable snake_case keys.
  • missing-access-metadata: every adapter command must declare access: 'read' | 'write'.
  • silent-clamp: Math.min(...limit...) can silently change user input instead of throwing ArgumentError.
  • silent-empty-fallback: return [] can hide fetch/parse failures from agents.
  • silent-sentinel: ?? 'unknown' / || 'N/A' style fallbacks can turn missing data into fake data.
  • write-without-delete-pair: write commands such as like, save, follow, create, or post should have an undo/delete counterpart when the site supports one.

The scanners are heuristic. Treat reports as prioritized review input by default, then turn a specific rule into a strict CI gate only after the current violations and exemptions are understood.

CI Gates

npm run check:silent-column-drop enforces the silent-column-drop rule in baseline mode. The baseline file is scripts/silent-column-drop-baseline.json.

npm run check:typed-error-lint enforces the silent failure rules in baseline mode:

  • silent-clamp
  • silent-empty-fallback
  • silent-sentinel

The baseline file is scripts/typed-error-lint-baseline.json.

Each gate fails only on new violations beyond its baseline. This lets the repo adopt the invariant immediately while existing findings are cleaned up in separate sweep PRs.

When a sweep fixes existing silent-column-drop entries, update the baseline:

bash
npm run build
node scripts/check-silent-column-drop.mjs --update-baseline

When a sweep fixes existing typed-error findings, update the baseline:

bash
npm run build
node scripts/check-typed-error-lint.mjs --update-baseline

Released under the Apache-2.0 License.