Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
60dab6b
ci(skillsaw): add lint job, Makefile targets, and repo config
ralphbean Aug 11, 2026
e2559fa
fix(skillsaw): address review feedback on lint CI config
ralphbean Aug 13, 2026
ab8a4df
fix(skillsaw): correct uvx syntax and add lint.yml to workflows table
fullsend-ai-coder[bot] Aug 13, 2026
52601e9
fix(skillsaw): use canonical claude- rule IDs, correct marketplace co…
ralphbean Aug 13, 2026
14c74ea
fix(skillsaw): use baseline ratchet instead of raised context-budget …
ralphbean Aug 13, 2026
b1141d2
fix(skillsaw): regenerate baseline against PR's actual merge tree
ralphbean Aug 14, 2026
4b8cf58
fix(skillsaw): auto-fix skill name violations and update baseline
ralphbean Aug 19, 2026
75eb767
fix(agents): remove issue-labels from agent frontmatter and references
ralphbean Aug 20, 2026
b41c4a8
ci: address PR #754 review feedback
ralphbean Aug 20, 2026
dcfc6a0
fix(skillsaw): restore issue-labels skill names and create exception
ralphbean Aug 21, 2026
1cb1eb3
fix(skillsaw): add trigger phrasing and reduce fix-review token count
ralphbean Aug 21, 2026
a2765aa
fix: address PR feedback on skill names and config
ralphbean Aug 21, 2026
e091598
chore: consolidate skillsaw version to single source of truth
ralphbean Aug 21, 2026
81895d7
fix(agents): restore issue-labels skill reference in triage output rules
fullsend-ai-coder[bot] Aug 21, 2026
b7d5f9b
docs(contributing): mention both CI lint gates in PR guidance
fullsend-ai-coder[bot] Aug 24, 2026
700c695
fix(skillsaw): address remaining review feedback
ralphbean Aug 31, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions .github/scripts/check-skillsaw-version.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#!/usr/bin/env bash
set -euo pipefail

version=$(sed -n 's/^version: "\([^"]*\)"/\1/p' .skillsaw.yaml)
workflow_ref=$(sed -n 's/.*stbenjam\/skillsaw@\([0-9a-f]\{40\}\).*/\1/p' .github/workflows/lint.yml)
Comment thread
ralphbean marked this conversation as resolved.
tag_ref=$(git ls-remote https://github.com/stbenjam/skillsaw.git "refs/tags/v${version}" | awk '{print $1}')

if [[ -z "${version}" || -z "${workflow_ref}" || -z "${tag_ref}" ]]; then
echo "Unable to resolve the configured skillsaw version or action ref" >&2
exit 1
fi
Comment thread
ralphbean marked this conversation as resolved.

if [[ "${workflow_ref}" != "${tag_ref}" ]]; then
echo "skillsaw action ref ${workflow_ref} does not match v${version} (${tag_ref})" >&2
exit 1
fi
13 changes: 13 additions & 0 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,19 @@ permissions:
contents: read

jobs:
skillsaw:
Comment thread
ralphbean marked this conversation as resolved.
runs-on: ubuntu-24.04
Comment thread
ralphbean marked this conversation as resolved.
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
Comment thread
qodo-code-review[bot] marked this conversation as resolved.
Comment thread
ralphbean marked this conversation as resolved.
with:
Comment thread
ralphbean marked this conversation as resolved.
persist-credentials: false
Comment thread
ralphbean marked this conversation as resolved.
Comment thread
ralphbean marked this conversation as resolved.
Comment thread
ralphbean marked this conversation as resolved.
Comment thread
ralphbean marked this conversation as resolved.
Comment thread
ralphbean marked this conversation as resolved.
Comment thread
ralphbean marked this conversation as resolved.
Comment thread
ralphbean marked this conversation as resolved.
- name: Verify skillsaw action version
run: .github/scripts/check-skillsaw-version.sh
# Version pinned to match .skillsaw.yaml (source of truth)
- uses: stbenjam/skillsaw@c325108b6cf94284762948b6a463e75ab5288520 # v0.18.0
Comment thread
ralphbean marked this conversation as resolved.
with:
strict: true

test:
runs-on: ubuntu-24.04
steps:
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
__pycache__/
*.pyc
.skillsaw-renames.json
115 changes: 115 additions & 0 deletions .skillsaw-baseline.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
{
Comment thread
ralphbean marked this conversation as resolved.
"version": "1",
"generated_by": "skillsaw 0.18.0",
"generated_at": "2026-08-31T00:54:48.875560+00:00",
"violations": [
{
"fingerprint": "34efa8521ae07039",
"rule_id": "agentskill-name",
"file_path": "skills/github-forge/SKILL.md",
"line": 2,
"message": "Name 'github' does not match directory name 'github-forge'",
"severity": "error"
},
{
"fingerprint": "10342080fcd47b75",
"rule_id": "agentskill-name",
"file_path": "skills/gitlab-forge/SKILL.md",
"line": 2,
"message": "Name 'gitlab' does not match directory name 'gitlab-forge'",
"severity": "error"
},
{
"fingerprint": "a44e1496f6fe3e11",
"rule_id": "agentskill-name",
"file_path": "skills/issue-labels/github/SKILL.md",
"line": 2,
"message": "Name 'issue-labels' does not match directory name 'github'",
"severity": "error"
},
{
"fingerprint": "d9a273225a48337f",
"rule_id": "agentskill-name",
"file_path": "skills/issue-labels/gitlab/SKILL.md",
"line": 2,
"message": "Name 'issue-labels' does not match directory name 'gitlab'",
"severity": "error"
},
{
"fingerprint": "327f1f40724439b7",
"rule_id": "agentskill-name",
"file_path": "skills/issue-labels/jira/SKILL.md",
"line": 2,
"message": "Name 'issue-labels' does not match directory name 'jira'",
"severity": "error"
},
{
"fingerprint": "4aecb9c5f36aa70f",
"rule_id": "agentskill-name",
"file_path": "skills/jira-forge/SKILL.md",
"line": 2,
"message": "Name 'jira' does not match directory name 'jira-forge'",
"severity": "error"
},
{
"fingerprint": "334afedb9d511d86",
"rule_id": "content-description-routing",
"file_path": "skills/pr-risk-assessment/SKILL.md",
"line": 3,
"message": "Description does not say when to use this skill; include trigger phrasing such as 'Use when ...'",
"severity": "warning"
},
{
"fingerprint": "c0a7ffe42338cd6f",
"rule_id": "content-weak-language",
"file_path": "skills/code-implementation/SKILL.md",
"line": 161,
"message": "Weak language (vagueness): 'properly' \u2014 Remove 'properly' \u2014 describe what correct behavior looks like",
"severity": "warning"
},
{
"fingerprint": "808393ad080aa81c",
"rule_id": "content-weak-language",
"file_path": "skills/code-implementation/SKILL.md",
"line": 195,
"message": "Weak language (non-actionable): 'note that' \u2014 Restructure \u2014 state the constraint directly",
"severity": "warning"
},
{
"fingerprint": "8aba1d160bb4c413",
"rule_id": "context-budget",
"file_path": "skills/code-implementation/SKILL.md",
"message": "Estimated 11,477 tokens exceeds skill error limit of 6,000",
"severity": "error",
"value": 11477,
"baseline_mode": "ceiling"
},
{
"fingerprint": "43a3bb24cb22288e",
"rule_id": "context-budget",
"file_path": "skills/code-review/SKILL.md",
"message": "Estimated 3,846 tokens exceeds skill warn limit of 3,000",
"severity": "warning",
"value": 3846,
"baseline_mode": "ceiling"
},
{
"fingerprint": "0285e1a7243ebead",
"rule_id": "context-budget",
"file_path": "skills/pr-review/SKILL.md",
"message": "Estimated 15,709 tokens exceeds skill error limit of 6,000",
"severity": "error",
"value": 15709,
"baseline_mode": "ceiling"
},
{
"fingerprint": "3841c25d67e33e68",
"rule_id": "context-budget",
"file_path": "skills/pr-risk-assessment/SKILL.md",
"message": "Estimated 3,775 tokens exceeds skill warn limit of 3,000",
"severity": "warning",
"value": 3775,
"baseline_mode": "ceiling"
}
]
}
Loading
Loading