CtrlK
BlogDocsLog inGet started
Tessl Logo

jbaruch/coding-policy

General-purpose coding policy for Baruch's AI agents

Quality

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

Low

Low-risk findings worth noting

Overview
Quality
Evals
Security
Files

SKILL.mdskills/migrate-to-plugin/

name:
migrate-to-plugin
description:
Migrate a legacy tile.json plugin to the .tessl-plugin/plugin.json form. Runs `tessl plugin migrate`, renames .tileignore to .tesslignore, removes the obsolete tile.json, re-lints, then reconciles residual "tile" wording to "plugin" in the repo's prose. Use when a repo still has a tile.json (and no .tessl-plugin/plugin.json), or when the user asks to migrate / convert / modernize a tile.json plugin, move off tile.json, or adopt the plugin.json manifest form.

Migrate to Plugin Skill

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.

Step 1 — Run the Migration Script

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, tessl plugin migrate produced no manifest, or the residual-file scan could not read the tree. 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.

Step 2 — Reconcile Residual Terminology

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:

  • Package-sense prose — "the tile", "every other tile", "tile-prescribed", "20 steering rules" → "the plugin", "every other plugin", "plugin-prescribed", "20 rules"
  • tessl tile <cmd>tessl plugin <cmd> (the canonical alias)

Keep "tile" unchanged — these are live contracts, not prose:

  • The tile.json filename in historical or legacy-format references
  • v1/tiles/... REST API routes and any argument bound to that route
  • Code identifiers — variable, function, type, and class names
  • Real external documentation page paths and analytics property names

If residual_files is empty, proceed silently to Step 3.

Step 3 — Sync Affected Surfaces

Apply surface sync per rules/context-artifacts.md for any prose touched in Step 2:

  • Update the repo's README.md rules/skills tables if their wording changed
  • Add a CHANGELOG.md entry describing the migration, matching the repo's release model per rules/context-artifacts.md CHANGELOG Hygiene

If Step 2 changed no surfaces, proceed silently. Proceed immediately to Step 4.

Step 4 — Verify the Result

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.

README.md

tile.json