Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
79 commits
Select commit Hold shift + click to select a range
0d9b701
fix(hook-kit): repair hook paths broken by the within-marketplace rel…
DrumRobot Aug 20, 2026
3f8e492
fix(git-repo): document conflict root-cause diagnosis (staleness vs d…
DrumRobot Aug 20, 2026
bc2adc4
fix(cleanup): add Plane-completion-first gate before fix_plan Complet…
DrumRobot Aug 20, 2026
f034168
Merge pull request #342 from es6kr/fix/conflict-dry-run-diagnosis
DrumRobot Aug 20, 2026
90f942a
fix(fix-plan): match multi-segment cwd_match tokens in workspace_profile
DrumRobot Aug 20, 2026
59692cc
fix(hook-kit): stop topic dispatch from resolving into nested worktrees
DrumRobot Aug 20, 2026
aba3eeb
fix(code-workflow): record that the plan-edit trigger duplicates plan…
DrumRobot Aug 20, 2026
e81bb4c
Merge pull request #344 from es6kr/fix/topic-dispatch-worktree-leak
DrumRobot Aug 20, 2026
83ec4f0
feat(fix-plan): read the role-shaped v2 workspace config, falling bac…
DrumRobot Aug 20, 2026
ff66544
feat(hook-kit): add workspace-config resolver + gate session-end RAG …
DrumRobot Aug 20, 2026
bf58935
test(fix-plan): isolate workspace-profile resolution test from a real…
DrumRobot Aug 20, 2026
13042e6
fix(hook-kit): detect v2 config by version, not per-profile roles; pr…
DrumRobot Aug 20, 2026
318d6a1
refactor(session): rename claude-session to session skill
DrumRobot Aug 18, 2026
2eca0a0
fix(commit-tidy): add 5+ files large-scale modification mandatory gate
DrumRobot Aug 18, 2026
035a27c
fix(hooks): correct ghost paths for 3 cleanup hook registrations
DrumRobot Aug 18, 2026
79c42e0
Merge PR #345: workspace config schema v2 — role→receiver resolver + …
DrumRobot Aug 20, 2026
3f57612
fix(plane-backlog): make plane_create_issue K3s fallback template saf…
DrumRobot Aug 20, 2026
69cce36
fix(fix-plan): reconcile plane_create_issue with the repaired plane-b…
DrumRobot Aug 20, 2026
5a52c97
test: add plane script defect regression guards
DrumRobot Aug 20, 2026
d8c2871
Merge pull request #349 from es6kr/fix/plane-script-defects
DrumRobot Aug 20, 2026
93f192f
ci(adjudicate): allow refactor as a primary tag on staging branches
DrumRobot Aug 20, 2026
8a715a9
fix(hook-kit): add the block-squash-recommend-multi-commit hook script
DrumRobot Aug 20, 2026
d5875a2
Merge pull request #341 from es6kr/fix/hooks-json-wip-ghost-path
DrumRobot Aug 20, 2026
5a36cc8
fix(fix-plan): relocate audit-approved items to the implementation qu…
DrumRobot Aug 20, 2026
cd2136a
fix(next): require a live context re-measure before the next-vs-clean…
DrumRobot Aug 20, 2026
641f958
fix(fix): add a context-gate precheck immediately before the wrap-up …
DrumRobot Aug 20, 2026
9512c9c
fix(consolidate): refresh the AI Review Summary before the merge ask …
DrumRobot Aug 20, 2026
c37254d
fix(hook-kit): scope topic dispatch to the marketplace the call names…
DrumRobot Aug 20, 2026
ad7a768
fix(ci): scope auto-ready by PR base instead of the run's head branch…
DrumRobot Aug 20, 2026
055c8a2
fix(hook-kit,session): resolve copilot review findings on ambient aut…
DrumRobot Aug 20, 2026
eb7ecb6
Merge pull request #346 from es6kr/next-fix
DrumRobot Aug 20, 2026
0c33ffa
Merge pull request #347 from es6kr/next-feat
DrumRobot Aug 20, 2026
85b6771
fix(fix-plan,plane-backlog): add fix_plan P0-P3 <-> Plane native prio…
DrumRobot Aug 20, 2026
96f4fd8
fix(fix-plan,plane-backlog): add plane_sync.py priority-drift report …
DrumRobot Aug 21, 2026
894f4b5
Merge pull request #352 from es6kr/fix/audit-stage-and-context-gate-r…
DrumRobot Aug 21, 2026
96ce325
Merge pull request #354 from es6kr/fix/plane-priority-mapping
DrumRobot Aug 21, 2026
f5677cc
chore: release main (#337)
github-actions[bot] Aug 21, 2026
862bb29
Merge remote-tracking branch 'origin/main' into next-fix
DrumRobot Aug 21, 2026
e2d054e
fix(consolidate): add block-summary-fabricated-claims guard for Summa…
DrumRobot Aug 20, 2026
388aa3e
fix(next): require ask on every next-trigger re-fire, not just once a…
DrumRobot Aug 17, 2026
d5b7750
fix(hook-kit): prevent false positive on sub-bullets and add per-invo…
DrumRobot Aug 17, 2026
6578934
fix(hook-kit): restore exec bit on two hooks.json-registered scripts
DrumRobot Aug 17, 2026
aa1c34a
fix(todowrite): enforce clickable PR URL matching in AskUserQuestion …
DrumRobot Aug 17, 2026
387653c
fix(git-repo): gate worktree reuse on dependency-install cost
DrumRobot Aug 20, 2026
41b519a
ci(hooks-json): add ghost/duplicate registration check
DrumRobot Aug 18, 2026
32713d9
fix(git-repo): add baseline .gitignore hygiene gate for worktrees and…
DrumRobot Aug 19, 2026
c7ad963
fix(fix-plan): require recency-ask answer reuse in default-invocation…
DrumRobot Aug 20, 2026
22c3294
fix(hook-kit): accept vendor-script RAG route in session-end store check
DrumRobot Aug 20, 2026
3b4fe82
fix(session): cross-reference cleanup model-topic-sessid8 rename format
DrumRobot Aug 19, 2026
c9d651f
fix(cleanup): make locale markers additive in block-cleanup-missing-r…
DrumRobot Aug 21, 2026
42273f4
fix(fix-plan): decouple plane_create_issue to plane-backlog and updat…
DrumRobot Aug 21, 2026
471ed1c
fix(todowrite): enforce tasklist ID conversation blocking and media s…
DrumRobot Aug 21, 2026
ee95d6f
fix(wip,hook-kit): enhance register-before-execute and block-axis-mer…
DrumRobot Aug 21, 2026
c68d489
fix(core): align workflow steps, next suggestion patterns, and browse…
DrumRobot Aug 21, 2026
0e741c1
fix(hook-kit): remove duplicate block-cleanup-missing-rename hook pre…
DrumRobot Aug 21, 2026
d214e5d
Merge pull request #356 from es6kr/fix/accumulated-fixes
DrumRobot Aug 21, 2026
c2e9364
fix(session): propagate antigravity rewind failure + handle array-con…
DrumRobot Aug 21, 2026
c7a8c45
fix(skill-kit): resolve upgrade PR base from works-config staging rol…
DrumRobot Aug 21, 2026
731745c
fix: apply PR #363 Copilot Minor review findings
DrumRobot Aug 22, 2026
0e43f2a
fix(hook-kit): make the handoff guard capable of firing at all
DrumRobot Aug 22, 2026
d63a4bb
test(hook-kit): cover the session-end RAG guard in this checkout
DrumRobot Aug 22, 2026
36106d1
fix(fix-plan): stop cleanup from dropping non-list lines and the fina…
DrumRobot Aug 22, 2026
0c39530
fix(code-workflow): resolve walkthrough artifacts against the configu…
DrumRobot Aug 22, 2026
dd7b0c0
fix(wip): mark the PR-URL gate unenforced in both resume Don't/Do rows
DrumRobot Aug 22, 2026
cbb433a
fix(github-flow): stop claiming the PR-URL gate is registered and enf…
DrumRobot Aug 22, 2026
3a823f6
fix(code-workflow): add available-skills domain scan to Research pre-…
DrumRobot Aug 18, 2026
f153c8b
fix(claude-session): edit rewind topic for code-preserving soft rewind
DrumRobot Aug 20, 2026
e619e33
fix(fix-plan): judge item schema against the file, not the edit window
DrumRobot Aug 20, 2026
35a664b
fix(fix-plan): resolve plane_bulk_update config from workspace profile
DrumRobot Aug 22, 2026
c2fd069
fix(fix-plan): accept ASCII arrow delimiter in plane_sync index lines
DrumRobot Aug 22, 2026
b9bde23
fix(fix-plan): parse nested hooks.json schema in hook_integrity_check
DrumRobot Aug 22, 2026
e837bd5
fix(next): remove duplicated foreground-vs-background spawn block
DrumRobot Aug 22, 2026
19ffc83
Merge pull request #368 from es6kr/fix/pr363-copilot-minor
DrumRobot Aug 22, 2026
7ca0ccb
Merge pull request #363 from es6kr/next-fix
DrumRobot Aug 22, 2026
1c37e30
fix(next): require PR-URL rule even on Stop-hook-forced direct asks (…
DrumRobot Aug 25, 2026
4dfd05d
Merge remote-tracking branch 'origin/next-fix' into fix/promote-accum…
DrumRobot Aug 25, 2026
ef9abf7
test: mock shutil.which in test_k3s_fallback_script_survives_quote_in…
DrumRobot Aug 26, 2026
543d88f
fix(review-feedback): apply review feedback for session rewind, clean…
DrumRobot Aug 26, 2026
770bed2
Merge pull request #366 from es6kr/fix/promote-accumulated-skills-fixes
DrumRobot Aug 26, 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
18 changes: 18 additions & 0 deletions .githooks/pre-push
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,27 @@ cd "$repo_root"
# and it is not a valid PR head (see git.md "PR head branch name convention").
# stdin is the pre-push protocol: `<local_ref> <local_sha> <remote_ref> <remote_sha>` lines.
LOCAL_PUSH_ATTEMPTED=0
HAS_REAL_PUSH=0
LOCAL_STDIN=""
while IFS= read -r line; do
LOCAL_STDIN="${LOCAL_STDIN}${line}
"
# shellcheck disable=SC2086
set -- $line
local_ref="${1:-}"
local_sha="${2:-}"
remote_ref="${3:-}"
remote_sha="${4:-}"

# Skip branch deletions with `continue` (skip THIS ref only). `exit 0` here would
# abort the whole hook on the first delete ref, bypassing the 'local'-guard for any
# non-delete ref in the same push (a mixed delete + 'local' update). Heavy CI is still
# skipped for a delete-only push via the HAS_REAL_PUSH check after the loop.
if [ "$local_sha" = "0000000000000000000000000000000000000000" ] || [ "$local_sha" = "(delete)" ]; then
continue
fi
HAS_REAL_PUSH=1

if [ "$local_ref" = "refs/heads/local" ] || [ "$remote_ref" = "refs/heads/local" ]; then
LOCAL_PUSH_ATTEMPTED=1
fi
Expand All @@ -52,6 +65,11 @@ fi
# contract for future hook chaining.)
printf '%s' "$LOCAL_STDIN"

# Delete-only push (every ref was a deletion): nothing to test — skip heavy CI.
if [ "$HAS_REAL_PUSH" = "0" ]; then
exit 0
fi

echo "Running pre-push checks (CI parity)..."

if ! command -v bats >/dev/null 2>&1; then
Expand Down
52 changes: 42 additions & 10 deletions .github/workflows/auto-ready.yml
Original file line number Diff line number Diff line change
@@ -1,15 +1,27 @@
name: auto-ready

# Automatically converts draft PRs targeting next-feat / next-fix to ready_for_review
# once required checks (branch-tag-adjudication, Test) pass.
# Converts draft PRs *targeting* next-feat / next-fix to ready_for_review once
# branch-tag-adjudication passes.
#
# The `branches:` filter of a workflow_run trigger matches the HEAD branch of
# the run that fired, not the base of its PR. A PR into next-feat/next-fix runs
# its checks on the feature branch (fix/…, feat/…), so filtering on
# [next-feat, next-fix] never matched the PRs this workflow exists to serve —
# it only matched promotion PRs (head next-*, base main), which are exactly the
# ones it should leave alone. Every historical run of this workflow was such a
# misfire.
#
# So: no branch filter, and the base is checked in the job instead. The
# workflow_run payload does carry it — pull_requests[0].base.ref.
#
# Note `Test` is deliberately not listed: it triggers on `pull_request:
# branches: [main]`, so it never runs for a PR into next-feat/next-fix and
# waiting on it here would be waiting on something that cannot arrive.

on:
workflow_run:
workflows: ["branch-tag-adjudication", "Test"]
workflows: ["branch-tag-adjudication"]
types: [completed]
branches:
- next-feat
- next-fix

permissions:
pull-requests: write
Expand All @@ -25,18 +37,38 @@ jobs:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
REPO: ${{ github.repository }}
PR_NUMBER: ${{ github.event.workflow_run.pull_requests[0].number }}
BASE_REF: ${{ github.event.workflow_run.pull_requests[0].base.ref }}
run: |
set -euo pipefail
if [ -z "$PR_NUMBER" ]; then
echo "No associated PR found in workflow_run event — skipping."
exit 0
fi

case "$BASE_REF" in
next-feat|next-fix) ;;
*)
echo "PR #$PR_NUMBER targets '${BASE_REF:-<unknown>}', not a staging branch — skipping."
exit 0
;;
esac

IS_DRAFT=$(gh pr view "$PR_NUMBER" -R "$REPO" --json isDraft --jq '.isDraft')
if [ "$IS_DRAFT" = "true" ]; then
echo "PR #$PR_NUMBER is draft. Converting to ready for review..."
gh pr ready "$PR_NUMBER" -R "$REPO"
if [ "$IS_DRAFT" != "true" ]; then
echo "PR #$PR_NUMBER is already ready for review or not draft."
exit 0
fi

echo "PR #$PR_NUMBER (base $BASE_REF) is draft. Converting to ready for review..."
# GITHUB_TOKEN cannot perform markPullRequestReadyForReview even with
# pull-requests: write — it fails with "Resource not accessible by
# integration". Report that plainly instead of failing the run: a red
# X here would say "the checks failed", which is not what happened.
# Until a token that can do it is wired up, the transition is the
# author's to make (github-flow's publish topic runs `gh pr ready`).
if gh pr ready "$PR_NUMBER" -R "$REPO" 2>/tmp/ready.err; then
echo "Successfully converted PR #$PR_NUMBER to ready_for_review."
else
echo "PR #$PR_NUMBER is already ready for review or not draft."
echo "::warning::Could not convert PR #$PR_NUMBER to ready — $(cat /tmp/ready.err)"
echo "GITHUB_TOKEN lacks markPullRequestReadyForReview. Convert manually or wire a token that can."
fi
16 changes: 14 additions & 2 deletions .github/workflows/branch-tag-adjudication.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ name: branch-tag-adjudication
# earlier PR, possibly not yet cascaded to main).
# - next-fix: fix commits allowed. chore commits allowed ONLY when the same PR
# also contains a fix commit touching the same skill. feat is always REJECTED.
# - refactor: allowed as a primary tag on BOTH branches. A refactor is a
# behaviour-preserving restructure (e.g. a skill rename) that drives no
# release bump, so it needs no same-skill feat/fix rider context.
# - Any commit touching skills/**/*.md with tag chore or docs is REJECTED —
# skill md changes must use fix: (or feat: when accompanied by a new topic
# file). Skill md = behaviour surface, not documentation.
Expand Down Expand Up @@ -186,6 +189,10 @@ jobs:
feat)
# Always OK — this is the intended tag for this branch.
;;
refactor)
# Behaviour-preserving restructure — allowed as a primary
# tag on both staging branches (drives no release bump).
;;
fix|chore)
# Allowed when the same PR contains a feat commit for the
# same skill (i.e. we are shipping a topic addition and a
Expand All @@ -199,7 +206,7 @@ jobs:
fi
;;
*)
echo "::error::next-feat branch: unsupported tag '$TAG' on commit $SHA (skill=$SKILL). Allowed tags: feat (primary), fix/chore (as rider when feat present)."
echo "::error::next-feat branch: unsupported tag '$TAG' on commit $SHA (skill=$SKILL). Allowed tags: feat (primary), refactor, fix/chore (as rider when feat present)."
FAIL=1
;;
esac
Expand All @@ -209,6 +216,10 @@ jobs:
fix)
# Always OK.
;;
refactor)
# Behaviour-preserving restructure — allowed as a primary
# tag on both staging branches (drives no release bump).
;;
chore)
if [ "${PR_SKILL_HAS[${SKILL}__fix]:-0}" != "1" ]; then
echo "::error::next-fix branch: commit $SHA (skill=$SKILL, tag=$TAG) rejected. Same-skill fix commit not present in this PR."
Expand All @@ -220,7 +231,7 @@ jobs:
FAIL=1
;;
*)
echo "::error::next-fix branch: unsupported tag '$TAG' on commit $SHA (skill=$SKILL). Allowed tags: fix (primary), chore (as rider when fix present)."
echo "::error::next-fix branch: unsupported tag '$TAG' on commit $SHA (skill=$SKILL). Allowed tags: fix (primary), refactor, chore (as rider when fix present)."
FAIL=1
;;
esac
Expand All @@ -236,6 +247,7 @@ jobs:
::error::One or more commits violate the staging-branch tag policy.
Policy summary: next-feat accepts feat (fix/chore only as same-skill riders);
next-fix accepts fix (chore only as a same-skill rider; feat never);
refactor is accepted as a primary tag on both branches;
skill md changes must be tagged fix: or feat: on either branch.
EOF
exit 1
Expand Down
10 changes: 10 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -59,3 +59,13 @@ jobs:
steps:
- uses: actions/checkout@v4
- run: bash scripts/lint-frontmatter.sh

hooks-json-lint:
name: Verify hooks.json (no duplicates, no ghost paths)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- run: python3 scripts/verify-hooks-json.py
28 changes: 14 additions & 14 deletions .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,26 +1,26 @@
{
"skills/cc-plugin": "0.5.3",
"skills/cc-plugin": "0.6.0",
"skills/chezmoi": "0.4.2",
"skills/choco": "1.0.4",
"skills/claude-session": "0.8.1",
"skills/claudify": "0.6.1",
"skills/code-workflow": "0.6.3",
"skills/commit-tidy": "0.5.4",
"skills/consolidate": "0.5.4",
"skills/dotfile": "0.5.1",
"skills/fix": "0.3.12",
"skills/fix-plan": "0.8.0",
"skills/claudify": "0.7.0",
"skills/code-workflow": "0.7.0",
"skills/commit-tidy": "0.5.5",
"skills/consolidate": "0.6.0",
"skills/dotfile": "0.6.0",
"skills/fix": "0.4.0",
"skills/fix-plan": "0.9.0",
"skills/forge": "0.1.2",
"skills/git-repo": "0.8.1",
"skills/github-flow": "0.8.3",
"skills/git-repo": "0.9.0",
"skills/github-flow": "0.9.0",
"skills/harness": "0.1.2",
"skills/mcp-config": "0.3.2",
"skills/next": "0.8.1",
"skills/next": "0.9.0",
"skills/omz": "0.3.2",
"skills/repo": "0.3.2",
"skills/skill-kit": "0.6.3",
"skills/session": "0.8.1",
"skills/skill-kit": "0.7.0",
"skills/tdd": "0.3.3",
"skills/todowrite": "0.8.1",
"skills/web-browser": "0.2.7",
"skills/wip": "0.4.5"
"skills/wip": "0.5.0"
}
29 changes: 23 additions & 6 deletions hooks/hooks.json
Original file line number Diff line number Diff line change
Expand Up @@ -132,12 +132,20 @@
{
"type": "command",
"command": "bash ${CLAUDE_PLUGIN_ROOT}/skills/consolidate/resources/block-noncompliant-review-comment.sh"
},
{
"type": "command",
"command": "bash ${CLAUDE_PLUGIN_ROOT}/skills/consolidate/resources/block-summary-fabricated-claims.sh"
}
]
},
{
"matcher": "Edit",
"hooks": [
{
"type": "command",
"command": "node ${CLAUDE_PLUGIN_ROOT}/skills/fix-plan/resources/block-direct-checklist-edit.js"
},
{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/skills/hook-kit/resources/complex-logic-guard.sh"
Expand All @@ -160,7 +168,7 @@
},
{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/skills/hook-kit/resources/block-wip-register-before-execute.sh"
"command": "${CLAUDE_PLUGIN_ROOT}/skills/wip/resources/block-wip-register-before-execute.sh"
},
{
"type": "command",
Expand All @@ -179,6 +187,10 @@
{
"matcher": "Write",
"hooks": [
{
"type": "command",
"command": "node ${CLAUDE_PLUGIN_ROOT}/skills/fix-plan/resources/block-direct-checklist-edit.js"
},
{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/skills/hook-kit/resources/staged-protect.sh"
Expand All @@ -193,7 +205,7 @@
},
{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/skills/hook-kit/resources/block-wip-register-before-execute.sh"
"command": "${CLAUDE_PLUGIN_ROOT}/skills/wip/resources/block-wip-register-before-execute.sh"
},
{
"type": "command",
Expand Down Expand Up @@ -231,7 +243,7 @@
},
{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/skills/hook-kit/resources/block-cleanup-option-below-context-gate.sh",
"command": "${CLAUDE_PLUGIN_ROOT}/skills/cleanup/resources/block-cleanup-option-below-context-gate.sh",
"timeout": 10
},
{
Expand All @@ -242,6 +254,11 @@
{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/skills/hook-kit/resources/block-ask-without-token-measure.sh"
},
{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/skills/hook-kit/resources/block-squash-recommend-multi-commit.sh",
"timeout": 15
}
]
},
Expand Down Expand Up @@ -312,11 +329,11 @@
},
{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/skills/hook-kit/resources/block-cleanup-without-rag.sh"
"command": "${CLAUDE_PLUGIN_ROOT}/skills/cleanup/resources/block-cleanup-without-rag.sh"
},
{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/skills/hook-kit/resources/block-cleanup-without-claudify.sh"
"command": "${CLAUDE_PLUGIN_ROOT}/skills/cleanup/resources/block-cleanup-without-claudify.sh"
},
{
"type": "command",
Expand All @@ -341,7 +358,7 @@
},
{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/skills/hook-kit/resources/block-cleanup-missing-rename.sh"
"command": "${CLAUDE_PLUGIN_ROOT}/skills/cleanup/resources/block-cleanup-missing-rename.sh"
}
]
}
Expand Down
20 changes: 10 additions & 10 deletions release-please-config.json
Original file line number Diff line number Diff line change
Expand Up @@ -82,16 +82,6 @@
}
]
},
"skills/claude-session": {
"package-name": "claude-session",
"component": "claude-session",
"extra-files": [
{
"type": "generic",
"path": "SKILL.md"
}
]
},
"skills/claudify": {
"package-name": "claudify",
"component": "claudify",
Expand Down Expand Up @@ -242,6 +232,16 @@
}
]
},
"skills/session": {
"package-name": "session",
"component": "session",
"extra-files": [
{
"type": "generic",
"path": "SKILL.md"
}
]
},
"skills/skill-kit": {
"package-name": "skill-kit",
"component": "skill-kit",
Expand Down
Loading
Loading