Files
wehub-resource-sync 9b395f5cc3
E2E Headed Chrome / e2e-headed (macos-15) (push) Has been cancelled
E2E Headed Chrome / e2e-headed (ubuntu-latest) (push) Has been cancelled
E2E Headed Chrome / e2e-headed (windows-latest) (push) Has been cancelled
CI / build (macos-latest) (push) Has been cancelled
CI / build (ubuntu-latest) (push) Has been cancelled
CI / build (windows-latest) (push) Has been cancelled
CI / unit-test (push) Has been cancelled
CI / bun-test (push) Has been cancelled
CI / adapter-test (push) Has been cancelled
CI / smoke-test (macos-latest) (push) Has been cancelled
CI / smoke-test (ubuntu-latest) (push) Has been cancelled
Security Audit / audit (push) Has been cancelled
Build Chrome Extension / build (push) Has been cancelled
Trigger Website Rebuild (Docs Updated) / dispatch (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:39:48 +08:00

73 lines
2.5 KiB
Markdown

# 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
```