General-purpose coding policy for Baruch's AI agents
90
91%
Does it follow best practices?
Impact
90%
1.76xAverage score across 18 eval scenarios
Advisory
Suggest reviewing before use
Process steps in order. Do not skip ahead.
Convert a legacy tile.json plugin to the plugin.json form and reconcile the leftover terminology. The deterministic mechanics live in a script; the prose reconciliation in Step 2 is the judgment this skill owns.
Run the deterministic migration from the repo root:
.tessl/plugins/jbaruch/coding-policy/skills/migrate-to-plugin/migrate.sh .The script detects the manifest state, runs tessl plugin migrate, renames .tileignore → .tesslignore, removes the obsolete tile.json, runs tessl plugin lint, and emits a JSON report with a residual_files list. Contract — inputs, output shape, exit codes — is in the script's top-of-file docstring.
A non-zero exit with no JSON on stdout (exit 2) is a tool or precondition failure — jq/tessl missing, the path is not a directory, or tessl plugin migrate produced no manifest. Surface the script's stderr diagnostic and stop; do not proceed.
Otherwise parse stdout and branch on the emitted status:
not-a-plugin (exit 0) — no tile.json or plugin.json here. Report that this is not a tessl plugin directory and finish here.already-migrated (exit 0) — plugin.json already exists, nothing to convert. If residual_tile_refs is 0, finish here; otherwise proceed to Step 2 to reconcile the leftover wording.migrated with lint_ok: false (exit 1) — migration ran but tessl plugin lint failed. Report the lint failure, run tessl plugin lint directly to read it, fix the manifest, then proceed to Step 2.migrated with lint_ok: true (exit 0) — proceed immediately to Step 2.Read each path in the script's residual_files. For every "tile"/"tiles" occurrence, decide rename-vs-keep — the script counts the pattern but makes no judgment.
Rename to plugin wording:
tessl tile <cmd> → tessl plugin <cmd> (the canonical alias)Keep "tile" unchanged — these are live contracts, not prose:
tile.json filename in historical or legacy-format referencesv1/tiles/... REST API routes and any argument bound to that routeevals/* scenario directory names — renaming resets lift history (see rules/plugin-evals.md Naming)If residual_files is empty, proceed silently to Step 3.
Apply surface sync per rules/context-artifacts.md for any prose touched in Step 2:
README.md rules/skills tables if their wording changedCHANGELOG.md entry describing the migration, matching the repo's release model per rules/context-artifacts.md CHANGELOG HygieneIf Step 2 changed no surfaces, proceed silently. Proceed immediately to Step 4.
Re-run tessl plugin lint and confirm it passes. Report the final state: manifest migrated, .tesslignore renamed, tile.json removed, and the files whose wording was reconciled. Finish here.
.tessl-plugin
evals
scenario-1
scenario-2
scenario-3
scenario-4
scenario-5
scenario-6
scenario-7
scenario-8
scenario-9
scenario-10
scenario-11
scenario-12
scenario-13
scenario-14
scenario-15
scenario-16
scenario-17
scenario-18
rules
skills
adopt-fork-pr
eval-curation
install-reviewer
migrate-to-plugin