Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
2d2b8e3
feat(hooks): add stage-aware gate core with tier-1 tests
ValeroK Aug 24, 2026
3cdc486
fix(hooks): relativise tool paths against cwd before gating
ValeroK Aug 24, 2026
ca3db51
test(hooks): resolve O2 -- Cursor cannot block a file write
ValeroK Aug 24, 2026
bb719fd
docs(prd): Cursor reports success:true for a denied write
ValeroK Aug 24, 2026
ce086d1
docs(prd): Cursor stop adapter must gate on status completed
ValeroK Aug 24, 2026
4e28a3c
feat(hooks): wire the five gates across all four hosts
ValeroK Aug 24, 2026
dac7a85
feat!: rename plugin to ultimate-workflow, ship gates on by default (…
ValeroK Aug 25, 2026
fc9fad4
docs: rewrite README around a worked example
ValeroK Aug 25, 2026
d87363d
feat(hooks): add gate heartbeat and status report
ValeroK Aug 26, 2026
a3200d7
feat!: scope gates to Claude Code, keep Cursor on the prose workflow
ValeroK Aug 26, 2026
09c6418
feat(workflows): add /harvest, the first graph-native phase
ValeroK Aug 26, 2026
dfcf793
fix(hooks): repair four defects found by /review
ValeroK Aug 26, 2026
5c2c63f
feat(workflows): add /review, the second graph-native phase
ValeroK Aug 26, 2026
d520ddb
feat(workflows): add /plan and /tests, the human-checkpoint phases
ValeroK Aug 26, 2026
397a45c
fix(hooks): stop marking the tree dirty on every commit
ValeroK Aug 26, 2026
580baca
feat(workflows): add /build, completing the five phases
ValeroK Aug 26, 2026
d03bc93
refactor(hooks): delete looksLikeShellWrite; add the Day 1 paper
ValeroK Aug 28, 2026
82734df
docs(plan): replan v3 around evals, after reading the Day 1 paper
ValeroK Aug 28, 2026
0ffb08d
fix: defect sweep before the v3 restructure
ValeroK Aug 28, 2026
556eee6
feat(agents): one definition per role, working on both hosts
ValeroK Aug 28, 2026
a79c868
feat(evals): add the trajectory scorer and the context-boundary fixtures
ValeroK Aug 28, 2026
157d243
refactor: CLAUDE.md becomes a thin index, 240 lines to 49
ValeroK Aug 28, 2026
d87f5b8
refactor(gates): demote to opt-in, its own commit
ValeroK Aug 28, 2026
8ca4716
feat(evals): encode the pass conditions and record the thin baseline
ValeroK Aug 28, 2026
f16a3fd
feat(commands): make the five slash commands actually exist
ValeroK Aug 28, 2026
57ad32f
docs(changelog): 3.0.0 -- what was measured and what it cost
ValeroK Aug 28, 2026
9431cd9
feat(cursor): give Cursor a retrieval mechanism for memory/
ValeroK Aug 28, 2026
e91c464
feat(status): --json output, built by the phases it ships
ValeroK Aug 28, 2026
9ce1687
fix: the twelve defects /review confirmed, two of them gate-inverting
ValeroK Aug 28, 2026
78218be
docs(harvest): apply the seven proposals, three of them corrections
ValeroK Aug 28, 2026
27cb5fa
fix(status): the disabled message still described the old inverted flag
ValeroK Aug 28, 2026
08df6a5
docs(readme): rewrite for someone who has never seen this before
ValeroK Aug 28, 2026
522e65e
refactor: no-emoji becomes a standing instruction, not enforcement
ValeroK Aug 28, 2026
750efe5
docs(site): bring the public page up to v3, and stop it rotting silently
ValeroK Aug 28, 2026
7eb8f46
docs(changelog): record the removal of the no-emoji hooks
ValeroK Aug 28, 2026
f0ffbc4
Merge main into feat/hook-gates
ValeroK Aug 28, 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
10 changes: 5 additions & 5 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,18 @@
"name": "ValeroK"
},
"metadata": {
"description": "Plan-first, test-first workflow + bootstrap flow for new projects. Two skills: one for daily feature work inside an existing codebase (the-ultimate-workflow-guidelines), one for greenfield project kickoff (project-bootstrap-guidelines). Behavioral principles derived from Andrej Karpathy's observations on LLM coding pitfalls. Ships Cursor rules under rules/ and Agent Skills under skills/.",
"version": "2.6.0"
"description": "Plan-first, test-first workflow for AI coding assistants. Five phase commands (plan, tests, build, review, harvest) that each run in a fresh context with scoped tools, two skills for feature work and greenfield bootstrap, and opt-in lifecycle gates. Behavioral principles derived from Andrej Karpathy observations on LLM coding pitfalls.",
"version": "3.0.0"
},
"plugins": [
{
"name": "the-ultimate-workflow-guidelines",
"name": "ultimate-workflow",
"source": {
"source": "github",
"repo": "ValeroK/the-ultimate-workflow-guidelines"
},
"description": "Plan-first, test-first workflow + bootstrap flow for new projects. Two skills: one for daily feature work inside an existing codebase (the-ultimate-workflow-guidelines), one for greenfield project kickoff (project-bootstrap-guidelines). Behavioral principles derived from Andrej Karpathy's observations on LLM coding pitfalls. Ships Cursor rules under rules/ and Agent Skills under skills/.",
"version": "2.6.0",
"description": "Plan-first, test-first workflow for AI coding assistants. Five phase commands (plan, tests, build, review, harvest) that each run in a fresh context with scoped tools, two skills for feature work and greenfield bootstrap, and opt-in lifecycle gates. Behavioral principles derived from Andrej Karpathy observations on LLM coding pitfalls.",
"version": "3.0.0",
"author": {
"name": "ValeroK"
},
Expand Down
18 changes: 14 additions & 4 deletions .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,12 +1,22 @@
{
"name": "the-ultimate-workflow-guidelines",
"description": "Plan-first, test-first workflow + bootstrap flow for new projects. Two skills: one for daily feature work inside an existing codebase (the-ultimate-workflow-guidelines), one for greenfield project kickoff (project-bootstrap-guidelines). Behavioral principles derived from Andrej Karpathy's observations on LLM coding pitfalls. Ships Cursor rules under rules/ and Agent Skills under skills/.",
"version": "2.6.0",
"name": "ultimate-workflow",
"description": "Plan-first, test-first workflow for AI coding assistants. Five phase commands (plan, tests, build, review, harvest) that each run in a fresh context with scoped tools, two skills for feature work and greenfield bootstrap, and opt-in lifecycle gates. Behavioral principles derived from Andrej Karpathy observations on LLM coding pitfalls.",
"version": "3.0.0",
"author": {
"name": "ValeroK"
},
"homepage": "https://github.com/ValeroK/the-ultimate-workflow-guidelines",
"repository": "https://github.com/ValeroK/the-ultimate-workflow-guidelines",
"license": "LicenseRef-MIT-Attribution",
"keywords": ["workflow", "planning", "tdd", "bootstrap", "prd", "karpathy", "guidelines", "best-practices", "coding"]
"keywords": [
"workflow",
"planning",
"tdd",
"bootstrap",
"prd",
"karpathy",
"guidelines",
"best-practices",
"coding"
]
}
6 changes: 3 additions & 3 deletions .cursor-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "the-ultimate-workflow-guidelines",
"version": "2.6.0",
"description": "Plan-first, test-first workflow + bootstrap flow for new projects. Two skills: one for daily feature work inside an existing codebase (the-ultimate-workflow-guidelines), one for greenfield project kickoff (project-bootstrap-guidelines). Behavioral principles derived from Andrej Karpathy's observations on LLM coding pitfalls. Ships Cursor rules under rules/ and Agent Skills under skills/.",
"name": "ultimate-workflow",
"version": "3.0.0",
"description": "Plan-first, test-first workflow for AI coding assistants. Five phase commands (plan, tests, build, review, harvest) that each run in a fresh context with scoped tools, two skills for feature work and greenfield bootstrap, and opt-in lifecycle gates. Behavioral principles derived from Andrej Karpathy observations on LLM coding pitfalls.",
"author": {
"name": "ValeroK"
},
Expand Down
21 changes: 20 additions & 1 deletion .github/workflows/release-skills.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,29 @@ jobs:
-x '.github/*' \
-x 'dist/*' \
-x '.gitignore' \
-x 'CLAUDE.md' \
-x 'AGENTS.md' \
-x 'CLAUDE.md'
-x 'research/*.pdf' \
-x 'fixtures/*' \
-x 'evals/results/*' \
-x 'internal/*'
ls -la dist/

- name: Fail if the plugin ZIP has grown past what a plugin should be
# research/new-sdlc-with-vibe-coding.pdf is 9.97 MB of a 10.6 MB repo,
# and for one release it shipped inside this ZIP -- the file Claude
# Desktop and offline Cursor users download -- taking it from under 1 MB
# to roughly 10 MB for a third-party binary no skill, workflow, hook or
# test reads. Only its 9 KB summary is indexed. Nobody noticed because
# nothing looked at the size.
run: |
BYTES=$(stat -c%s dist/the-ultimate-workflow-guidelines-plugin.zip)
echo "Plugin ZIP: $BYTES bytes"
if [ "$BYTES" -gt 2000000 ]; then
echo "::error::Plugin ZIP is $BYTES bytes, over the 2 MB ceiling. Something large was added to the repo root; exclude it above or keep it out of the repo."
exit 1
fi

- name: Upload to GitHub Release (create if missing)
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Expand Down
45 changes: 45 additions & 0 deletions .github/workflows/validate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,21 @@ on:
branches: [main]

jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: '22'

- name: Hook gate unit tests
# The glob is quoted so Node expands it, not the shell -- identical on
# Windows and Linux. `node --test hooks/` does NOT work: a directory
# argument is resolved as a module path, not a search root.
run: node --test "hooks/**/*.test.js" "evals/**/*.test.js" mirrors.test.js

validate:
runs-on: ubuntu-latest
steps:
Expand Down Expand Up @@ -49,3 +64,33 @@ jobs:
exit 1
fi
echo "All four version slots agree on $CANON."

- name: Manifest name consistency
# The plugin name namespaces every skill, command, and workflow it
# ships, so a mismatch silently changes how users invoke them.
# The marketplace's own top-level name is deliberately NOT checked:
# it identifies the marketplace, not the plugin.
run: |
set -e
CANON=$(jq -r '.name' .claude-plugin/plugin.json)
echo "Canonical plugin name: $CANON"

CURSOR=$(jq -r '.name' .cursor-plugin/plugin.json)
MKT=$(jq -r '.plugins[0].name' .claude-plugin/marketplace.json)

fail=0
for pair in \
".cursor-plugin/plugin.json:$CURSOR" \
".claude-plugin/marketplace.json#plugins[0].name:$MKT"; do
label="${pair%%:*}"
value="${pair##*:}"
if [ "$value" != "$CANON" ]; then
echo "::error::Name mismatch at $label: got '$value', expected '$CANON'"
fail=1
fi
done

if [ "$fail" -ne 0 ]; then
exit 1
fi
echo "All plugin name slots agree on $CANON."
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,7 @@ dist/
# OS noise
.DS_Store
Thumbs.db


# Gate heartbeat: per-machine runtime evidence, not source.
.ultimate-workflow/
Loading
Loading