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
opencli convention-audit
opencli convention-audit --site twitter
opencli convention-audit twitter/search
opencli convention-audit --site pixiv -f yaml
opencli convention-audit --strictFormats:
tableprints a grouped human-readable report.yamlis the recommended agent-facing format.jsonis 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 incolumns.camelCase-in-columns: output columns should use stable snake_case keys.missing-access-metadata: every adapter command must declareaccess: 'read' | 'write'.silent-clamp:Math.min(...limit...)can silently change user input instead of throwingArgumentError.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 aslike,save,follow,create, orpostshould 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-clampsilent-empty-fallbacksilent-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:
npm run build
node scripts/check-silent-column-drop.mjs --update-baselineWhen a sweep fixes existing typed-error findings, update the baseline:
npm run build
node scripts/check-typed-error-lint.mjs --update-baseline