Skip to content

Migrate tile.json to .tessl-plugin/plugin.json - #26

Merged
jimutt merged 1 commit into
mainfrom
migrate-plugin-manifest
Jul 27, 2026
Merged

Migrate tile.json to .tessl-plugin/plugin.json#26
jimutt merged 1 commit into
mainfrom
migrate-plugin-manifest

Conversation

@jimutt

@jimutt jimutt commented Jul 27, 2026

Copy link
Copy Markdown
Owner

Why

tile.json is deprecated. Every tessl invocation warns:

tile.json is deprecated. Migrate to .tessl-plugin/plugin.json to publish a plugin-shape package. tile.json support will be removed in a future release.

It's also a prerequisite for evals: tessl eval run <plugin-dir> looks for .tessl-plugin/plugin.json, so scenario evaluation can't run against the tile-shaped package.

Kept separate from the eval work so the packaging change can be reviewed on its own.

What changed

  • tessl plugin migrate generated .tessl-plugin/plugin.json. Skills became directory references (skills/dld-common) rather than SKILL.md paths, steering became rules, and summary became description.
  • tile.json deleted. With both present the linter reports plugin.json as authoritative and tile.json as ignored, with the packaged tarball synthesised from plugin.json — so leaving it would let it drift silently.
  • CLAUDE.md updated: directory structure, the dual-directory section, the packaging section, and the tessl tile linttessl plugin lint convention. Also corrects a stale version reference (dld-kit/dld@0.1.0).
  • Three manifest tests rewritten against plugin.json, plus a new test asserting plugin.json exists and tile.json is gone.

Test fix worth noting

Two of the replaced tests could not fail. Their return 1 ran inside a while loop on the right-hand side of a pipe, which bash runs in a subshell:

grep '"path":' "$REPO_ROOT/tile.json" | sed '...' | while IFS= read -r path; do
  if [[ ! -f "$REPO_ROOT/$path" ]]; then
    echo "..."
    return 1     # subshell — never fails the test
  fi
done

The replacements read entries into an array with mapfile first, and assert the parse produced at least one entry so an empty or renamed manifest fails loudly instead of passing on zero iterations.

Verification

  • tessl plugin lint — valid, deprecation warning gone
  • tessl plugin pack — tarball builds
  • 166/166 bats tests pass
  • Negative control: restoring tile.json makes the new test fail as intended

🤖 Generated with Claude Code

tile.json is deprecated; the CLI warns on every invocation and says support
will be removed in a future release. With both files present the linter
reports plugin.json as authoritative and tile.json as ignored, so tile.json
is removed rather than left to drift.

Rewrites the three manifest tests against plugin.json. The previous
"skill paths point to existing files" and "steering rule path exists" tests
could not fail: their `return 1` ran inside a `while` loop on the right-hand
side of a pipe, in a subshell. They now read entries into an array first and
assert a non-empty parse.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@jimutt
jimutt merged commit 3713a32 into main Jul 27, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant