Skip to content

ci: add tessl skill lint workflow#106

Merged
shsteimer merged 3 commits intomainfrom
ci/tessl-lint
May 5, 2026
Merged

ci: add tessl skill lint workflow#106
shsteimer merged 3 commits intomainfrom
ci/tessl-lint

Conversation

@shsteimer
Copy link
Copy Markdown
Collaborator

@shsteimer shsteimer commented Apr 28, 2026

Summary

Adds `.github/workflows/tessl-lint.yml` to run `tessl skill lint` on every PR and push to main.

  • Tile-scoped — discovers changed tiles (parents of `tile.json`) using the same pattern as `tessl-eval.yml`. Push to main lints all tiles.
  • Fails on errors only — lint warnings (orphan files, oversized SKILL.md, etc.) are surfaced but don't block the build. Errors (non-zero `tessl skill lint` exit) fail CI.
  • Sticky PR comment — Codecov-style. Per-tile lint results are summarized in a single comment on the PR Conversation tab, identified by an HTML marker so subsequent pushes update the comment in-place rather than spamming.
  • `::warning::` annotations — yellow ⚠️ entries in the workflow run details for each tile with warnings. Complement to the sticky comment.
  • Step summary — table of per-tile pass/warn/fail status visible from the workflow run page.
  • No `TESSL_TOKEN` required — `lint` is local validation, so it works on fork PRs unlike `tessl skill eval` and `tessl skill review`.

Why now

While diagnosing tile registration issues in PR #104, several drift problems would have been caught earlier with CI lint: skills missing from `tile.json`, broken cross-skill references, files in non-spec directories. This adds a guardrail.

Example output

PR #107 (`test: exercise tessl-lint workflow (do not merge)`) was used to validate the comment surfacing while iterating on this PR. Its sticky comment shows what a PR with warnings looks like.

GitHub check status caveat

GitHub has no "warning" check status — only success / failure / neutral. This workflow uses success ✅ for warnings (with the sticky comment + annotations as the visibility signal) and failure ❌ for hard errors. If we later want stricter behavior (e.g., fail on any warnings, or fail-on-new-warnings only), it can be added on top of this baseline.

Verification

  • Workflow appears in PR checks
  • Step summary table renders correctly
  • Sticky comment appears on PR Conversation tab
  • Subsequent pushes update the existing comment rather than creating new ones
  • Warnings (e.g., `code-review` SKILL.md size) are surfaced but don't fail the build
  • Errors fail the build with red ❌ status

Follow-ups

  • After PR fix(aem-eds): clean up tile to clear all lint warnings #104 merges, the EDS tile should lint clean (1 warning: `code-review` token bloat) and pass.
  • Other tiles in the repo will be linted for the first time — may surface pre-existing warnings that are out of scope here.
  • If we want fail-on-new-warnings semantics later, layer that on top with a base-vs-head comparison.

🤖 Generated with Claude Code

Runs tessl skill lint on every PR and push to main, scoped to changed
tiles (parents of tile.json) following the same discovery pattern as
tessl-eval.yml. Push to main lints all tiles.

Fails CI on lint errors (non-zero exit). Lint warnings (orphan files,
oversized SKILL.md, etc.) are surfaced as GitHub Annotations and step
summary entries but do not fail the build, since they are informational
not blocking.

No TESSL_TOKEN required — lint is local validation, so it works on
fork PRs unlike eval/review.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Promotes per-tile warning-count annotations from ::notice:: (blue ℹ️)
to ::warning:: (yellow ⚠️) so they're more visible in the PR
Conversation tab and Files Changed tab. Still doesn't fail the check —
GitHub has no "warning" check status, only success/failure/neutral.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
shsteimer added a commit that referenced this pull request Apr 28, 2026
Adds a trailing comment marker to page-import SKILL.md so the
tessl-lint workflow (introduced in #106) sees a tile change and runs
against the EDS tile in its current main-branch state (with all the
warnings PR #104 will fix). Demonstrates how warnings surface in the
GitHub UI.

This PR will be closed without merging.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
shsteimer added a commit that referenced this pull request Apr 28, 2026
Iterating on test branch to evaluate UX before porting to PR #106.

Posts a sticky comment to the PR Conversation tab summarizing per-tile
lint results. Comment is identified by an HTML marker and updated
in-place across pushes (Codecov-style), so a PR has at most one
tessl-lint comment regardless of push count.

Per-tile warnings are shown inside collapsible <details> blocks so the
comment stays compact at a glance.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Posts a sticky comment to the PR Conversation tab summarizing per-tile
lint results. Comment is identified by an HTML marker and updated
in-place across pushes (Codecov-style), so a PR has at most one
tessl-lint comment regardless of push count.

Per-tile warnings are shown inside collapsible <details> blocks so the
comment stays compact. Failing tiles get a top-level error block plus
the standard ::error:: annotation, keeping the check status red.

Adds pull-requests: write permission for comment posting.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Copy link
Copy Markdown
Contributor

@trieloff trieloff left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good idea

@shsteimer shsteimer merged commit 555cf22 into main May 5, 2026
9 checks passed
@shsteimer shsteimer deleted the ci/tessl-lint branch May 5, 2026 20:23
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.

2 participants