Files
fkysly 35dbb3affe Move the list into data/plugins/, generate the READMEs
Every submission used to append a line at the same anchor in the same README
section, so merging one PR made the next one conflict — most of a day's
maintenance was spent rebasing PRs that had nothing to do with each other.

The list is now one YAML file per plugin under data/plugins/. Two submissions
never touch the same file, so they stop colliding. Both READMEs are generated
from it between marker comments; everything outside those markers (badges,
intro, Contributing, Badge, Disclaimer) is still hand-written.

- data/plugins/<owner>__<repo>.yml — url, name, category, description.{en,zh}
- scripts/lib/entries.mjs — shared model, validation, canonical ordering
- scripts/generate-readme.mjs — writes the list + TOC; --check fails CI when
  a README was hand-edited and drifted from the source of truth
- scripts/migrate-to-yaml.mjs — the one-shot conversion, kept for reference
- scripts/check-submission.mjs — verifies the repo behind each added entry:
  dsh.bundle anywhere in the tree, repo >= 1 day old, >= 10 commits
- .github/workflows/pr-gate.yml — runs that check via workflow_run, because it
  needs the authenticated API and pr-check.yml is deliberately token-free

The manifest check enumerates the git tree rather than guessing directory
names: real monorepos put the bundle in extensions/, bundle/, npm/, dsh-plugin/
and integrations/, so a fixed packages/-plugins/-apps/ list would have rejected
valid submissions.

Entry order inside a category is normalised to url order, which is why the
READMEs show a large diff; docs/plugins.json is unchanged — same 880 entries,
same fields. PRs opened before this lands are judged by the old rules; the
age/commit gate only applies from GATE_EFFECTIVE_FROM onward.
2026-08-16 16:16:25 +08:00
..