--- description: bot-agents migration decisions: live @main action for six repos, JSON profiles, Node 24.2+, no eslint-plugin-* packages needed --- Decisions for `commons/bot-agents` (Capsulizers Gitea), from the Deno to Node + Vite+ migration (PR #20, `node-migration`, 2026-10-15/16): - **Live action.** Six consumer repos use `commons/bot-agents@main`, so a merge switches all of them at once. It changes only through a PR and a careful review. Suggested before merging a risky change: tag the current `main` (e.g. `deno-final`) as a rollback target and canary the branch from one consumer (`uses: .../commons/bot-agents@`) on a throwaway PR. - **Profiles are JSON.** `profiles.yml` became `profiles.json` with the same content (encrypted `v1:` values unchanged), read with `JSON.parse`. That removed the only runtime dependency (`@std/yaml`); keep it free of runtime dependencies (`@eslint/core` and the other devDependencies serve only the tooling). - **Node 24.2+**, not 22: `src/post.ts` uses `import.meta.main`. There is no `engines` (user decision 2026-10-18): the `node:24-bookworm` job image decides the version ([[bot-agents-runtime-no-build]]). - **No `eslint-plugin-*` packages** (`eslint-plugin-explicit-types`, `eslint-plugin-import-structure`, `eslint-plugin-lit-robust`; unscoped since 2026-10-18, formerly `@cunarist/...`). The Deno setup enabled no plugin, so this repo depends on none and CI passes without them being published. Planned (2026-10-17): once the plugins are on npm, add `eslint-plugin-import-structure` (rule prefix `import-structure/`) here for its import checks. - **Stricter input checks were accepted** in the migration: Gitea `/user` and comment responses, the runtime manifest, and the outcome's profile type are validated; some type errors became `TypeError` with the same messages. - Merging is the user's call; the `bot` account's approval is required first ([[git-pr-workflow]]).