@lovrozagar/grunt 0.3.9 → 0.3.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/.agents/agents/implementer.md +2 -2
  2. package/.agents/agents/orchestrator.md +2 -2
  3. package/.agents/skills/commit/SKILL.md +3 -3
  4. package/.agents/skills/commit-and-push/SKILL.md +3 -9
  5. package/.agents/skills/commit-push/SKILL.md +46 -0
  6. package/.agents/skills/commit-push-deploy/SKILL.md +59 -0
  7. package/.agents/skills/commit-push-release/SKILL.md +62 -0
  8. package/.claude/agents/implementer.md +2 -2
  9. package/.claude/agents/orchestrator.md +2 -2
  10. package/.claude/skills/commit/SKILL.md +3 -3
  11. package/.claude/skills/commit-and-push/SKILL.md +3 -9
  12. package/.claude/skills/commit-push/SKILL.md +46 -0
  13. package/.claude/skills/commit-push-deploy/SKILL.md +59 -0
  14. package/.claude/skills/commit-push-release/SKILL.md +62 -0
  15. package/.codex/agents/implementer.toml +2 -2
  16. package/.codex/agents/orchestrator.toml +2 -2
  17. package/.grok/agents/implementer.md +2 -2
  18. package/.grok/agents/orchestrator.md +2 -2
  19. package/.grok/hooks/orchestrate-parent.js +3 -3
  20. package/.grok/skills/commit/SKILL.md +3 -3
  21. package/.grok/skills/commit-and-push/SKILL.md +3 -9
  22. package/.grok/skills/commit-push/SKILL.md +46 -0
  23. package/.grok/skills/commit-push-deploy/SKILL.md +59 -0
  24. package/.grok/skills/commit-push-release/SKILL.md +62 -0
  25. package/.rulesync/reference/cascade.md +1 -1
  26. package/.rulesync/reference/map.md +3 -3
  27. package/.rulesync/rules/CLAUDE.md +1 -1
  28. package/.rulesync/rules/overview.md +1 -1
  29. package/.rulesync/skills/commit/SKILL.md +3 -3
  30. package/.rulesync/skills/commit-and-push/SKILL.md +4 -9
  31. package/.rulesync/skills/commit-push/SKILL.md +47 -0
  32. package/.rulesync/skills/commit-push-deploy/SKILL.md +60 -0
  33. package/.rulesync/skills/commit-push-release/SKILL.md +63 -0
  34. package/.rulesync/subagents/implementer.md +2 -2
  35. package/.rulesync/subagents/orchestrator.md +2 -2
  36. package/AGENTS.md +1 -1
  37. package/CLAUDE.md +1 -1
  38. package/README.md +311 -52
  39. package/package.json +1 -1
  40. package/scripts/gate-fat-tools.mjs +19 -4
@@ -14,10 +14,10 @@ inheritMcp: false
14
14
  ---
15
15
  Voice: `.rulesync/reference/output.md` — must follow.
16
16
 
17
- Implement specified solution. Never spawn. Never run for simple tool usage (grunt agent). Never plan (thinker agent).
17
+ Implement specified solution. User prompt may be the spec; `.tmp/plans` not required for small/defined writes. Never spawn. Never run for simple tool usage (grunt agent). Never plan (thinker agent).
18
18
  After write: validate+sim (mandatory). Fix hard failures. Return findings. Never skip validation
19
19
  Read/Grep/list_dir only if needed for edit. Prefer: implement the spec; dump via `need:`.
20
- Write-allowlist = paths listed in the spec/plan only. No unsolicited README/docs/examples. Missing path → blocker/`need:`; do not invent. Checkbox-flip the plan file.
20
+ Write-allowlist = paths listed in the spec/plan/prompt only. No unsolicited README/docs/examples. Missing path → blocker/`need:`; do not invent. Checkbox-flip the plan file.
21
21
  TDD when the spec/plan says tests: you write intelligent test, confirm test fails, implement solution, confirm test pass and iterate until completion (red/green/refactor).
22
22
  Return blockers, problems, edge cases, performance, bugs, warnings, inefficiencies / missed optimizations found while implementing or testing.
23
23
 
@@ -15,7 +15,7 @@ Always-do:
15
15
 
16
16
  | signal | next |
17
17
  |---|---|
18
- | create/change product files | spawn implementer (thinker then implementer if no spec). Never parent Write/Bash/Skill |
18
+ | create/change product files | small/simple or prompt-is-spec → implementer; large/complex + no spec → thinker then implementer. Never parent Write/Bash/Skill |
19
19
  | plan/spec ready + file writes remain | persist plan if needed; spawn implementer; do not recap-stop |
20
20
  | tools/facts/git/test/mechanical write | spawn grunt |
21
21
  | world fact | spawn grunt `job:web` |
@@ -35,7 +35,7 @@ Always-do:
35
35
 
36
36
  You do not talk. First token = spawn. Illegal tools (never consider never call): Read read_file Grep grep Glob list_dir Bash run_terminal_command view_file grep_search run_command. Not in toolkit. Hook deny = backstop not UX. Next=spawn not retry. Only /solo (stamp grunt-off-{sid} this session) escapes spawn workflow. /explain=voice+post-child recap never parent Read. No try-then-spawn. No parent probe. No skip-spawn. No trivia/cheap. User-visible = legal tag + **one-line** echo only. Siblings still run: `[grunt]:` echo. Facts/search/trees → grunt, never thinker.
37
37
  Spawn only `grunt` | `implementer` | `thinker`. Omit `model`. Isolation `none` unless asked. Never spawn `orchestrator`. Children never spawn.
38
- grunt ← tools. World fact → grunt `job: web`. Never memory. implementer ← specified solution (not the spec). thinker ← plan/deep reason/spec.
38
+ grunt ← tools. World fact → grunt `job: web`. Never memory. implementer ← specified solution or prompt-is-spec. thinker ← plan/deep reason.
39
39
  Child prompt first sentence only: `You are {agent} subagent.` Then task + abs paths + verdicts only.
40
40
  Peek every 60s/child; quote real host fields; `done|alive|stuck`; no invent; no auto-kill. Grok: `get_command_or_subagent_output` `timeout_ms=60000` every peek. Else GAP: block on spawn return = `done`. Stuck/blocked: quote host fields only.
41
41
  Child `need:` JSON → parse-need + parallel grunt; one `resume_from` + **new** verdicts only; max 3; no re-send task; no fresh-spawn.
@@ -2,9 +2,9 @@
2
2
  name: commit
3
3
  description: >
4
4
  Inspect the diff and commit with a Conventional Commits subject line. Use for
5
- /commit, "commit this", "commit these changes". Never pushes.
5
+ /commit, "commit this", "commit these changes". Never git push.
6
6
  ---
7
- Inspect `git status` + `git diff` (staged and unstaged) before the message. Never push.
7
+ Inspect `git status` + `git diff` (staged and unstaged) before the message.
8
8
 
9
9
  Stage only user intent. Never blind `git add -A` / `git add .`. Split unrelated concerns into multiple commits.
10
10
 
@@ -16,6 +16,6 @@ Subject: imperative lowercase no trailing period.
16
16
 
17
17
  NO body. NO footer. NO `Co-Authored-By`. NO `Generated with`. NO 🤖. NO trailers. No AI attribution. Work belongs to the human.
18
18
 
19
- Never `git push`.
19
+ Never git push. Never `git push`. This skill never pushes.
20
20
 
21
21
  Protocol: `.rulesync/reference/cascade.md`. Do not paste cascade.
@@ -1,15 +1,9 @@
1
1
  ---
2
2
  name: commit-and-push
3
3
  description: >
4
- Commit like /commit, then push to the current branch's upstream. Use for
5
- /commit-and-push, "commit and push", "commit this and push".
4
+ Commit and push. Use for /commit-and-push, "commit and push", "commit this and
5
+ push". Must push.
6
6
  ---
7
- Run commit skill rules first (`.rulesync/skills/commit/SKILL.md`). Then push.
8
-
9
- If on default branch, create/switch to a feature branch first — never push default directly.
10
-
11
- Push upstream; if no upstream `git push -u origin <current-branch>`.
12
-
13
- Never force-push.
7
+ Use `.rulesync/skills/commit-push/SKILL.md`. Must push. Do not load /commit.
14
8
 
15
9
  Protocol: `.rulesync/reference/cascade.md`. Do not paste cascade.
@@ -0,0 +1,46 @@
1
+ ---
2
+ name: commit-push
3
+ description: >
4
+ Commit with a Conventional Commits subject, then push. Use for /commit-push,
5
+ "commit and push", "commit this and push". Must push. Never force-push.
6
+ ---
7
+ Inspect `git status` + `git diff` (staged and unstaged) before the message.
8
+
9
+ Stage only user intent. Never blind `git add -A` / `git add .`. Split unrelated concerns into multiple commits.
10
+
11
+ Message = Conventional Commits **subject only**: `type(scope): subject` (scope optional).
12
+
13
+ Types: feat fix docs style refactor perf test build ci chore revert.
14
+
15
+ Subject: imperative lowercase no trailing period.
16
+
17
+ NO body. NO footer. NO `Co-Authored-By`. NO `Generated with`. NO 🤖. NO trailers. No AI attribution. Work belongs to the human.
18
+
19
+ Must `git push`. Do not load /commit. Ignore never-push.
20
+
21
+ ## Branch
22
+
23
+ Current: `git rev-parse --abbrev-ref HEAD`
24
+
25
+ Default: `git symbolic-ref --quiet --short refs/remotes/origin/HEAD` (strip `origin/`). If that fails: ask. Never invent default.
26
+
27
+ Recent (frozen flags; do not change):
28
+
29
+ ```
30
+ git reflog -n 30
31
+ git for-each-ref --count=8 --sort=-committerdate --format='%(refname:short) %(committerdate:unix)' refs/heads
32
+ ```
33
+
34
+ Recent = unique existing non-default names from those two outputs whose `committerdate` unix is ≤7d (`now - 604800`). Never invent branch names. Unknown/ambiguous names → drop them, do not guess.
35
+
36
+ | state | action |
37
+ | current ≠ default | push current |
38
+ | default AND 0 recent | push default |
39
+ | default AND exactly 1 recent exists | `git checkout` that name; push it |
40
+ | else | ask; do not push yet |
41
+
42
+ No upstream (`git rev-parse --abbrev-ref @{upstream}` fails): `git push -u origin <branch>`. Else `git push`.
43
+
44
+ Never force-push. Never `--force`, `-f`, `--force-with-lease`, `+<branch>`.
45
+
46
+ Protocol: `.rulesync/reference/cascade.md`. Do not paste cascade.
@@ -0,0 +1,59 @@
1
+ ---
2
+ name: commit-push-deploy
3
+ description: >
4
+ Commit, push, then deploy only if allowlisted infra already exists. Use for
5
+ /commit-push-deploy, "commit push deploy", "deploy this". Must push. Never
6
+ force-push. Never invent infra.
7
+ ---
8
+ Inspect `git status` + `git diff` (staged and unstaged) before the message.
9
+
10
+ Stage only user intent. Never blind `git add -A` / `git add .`. Split unrelated concerns into multiple commits.
11
+
12
+ Message = Conventional Commits **subject only**: `type(scope): subject` (scope optional).
13
+
14
+ Types: feat fix docs style refactor perf test build ci chore revert.
15
+
16
+ Subject: imperative lowercase no trailing period.
17
+
18
+ NO body. NO footer. NO `Co-Authored-By`. NO `Generated with`. NO 🤖. NO trailers. No AI attribution. Work belongs to the human.
19
+
20
+ Must `git push`. Do not load /commit. Ignore never-push.
21
+
22
+ ## Branch
23
+
24
+ Current: `git rev-parse --abbrev-ref HEAD`
25
+
26
+ Default: `git symbolic-ref --quiet --short refs/remotes/origin/HEAD` (strip `origin/`). If that fails: ask. Never invent default.
27
+
28
+ Recent (frozen flags; do not change):
29
+
30
+ ```
31
+ git reflog -n 30
32
+ git for-each-ref --count=8 --sort=-committerdate --format='%(refname:short) %(committerdate:unix)' refs/heads
33
+ ```
34
+
35
+ Recent = unique existing non-default names from those two outputs whose `committerdate` unix is ≤7d (`now - 604800`). Never invent branch names. Unknown/ambiguous names → drop them, do not guess.
36
+
37
+ | state | action |
38
+ | current ≠ default | push current |
39
+ | default AND 0 recent | push default |
40
+ | default AND exactly 1 recent exists | `git checkout` that name; push it |
41
+ | else | ask; do not push yet |
42
+
43
+ No upstream (`git rev-parse --abbrev-ref @{upstream}` fails): `git push -u origin <branch>`. Else `git push`.
44
+
45
+ Never force-push. Never `--force`, `-f`, `--force-with-lease`, `+<branch>`.
46
+
47
+ ## Deploy
48
+
49
+ After push. Detect **existing** repo-root (or listed) paths only — never create them:
50
+
51
+ `fly.toml` `vercel.json` `netlify.toml` `wrangler.toml` `wrangler.jsonc` `railway.toml` `railway.json` `render.yaml` `render.yml` `app.yaml` `Dockerfile` `docker-compose.yml` `docker-compose.yaml` `samconfig.toml` `serverless.yml` `serverless.yaml` `Pulumi.yaml` `terraform/` `.do/app.yaml`
52
+
53
+ This repo (`package.json` `name` `@lovrozagar/grunt`): skip deploy. Stop after push.
54
+
55
+ No allowlist hit: skip. Never invent infra, hosts, workflows, or config.
56
+
57
+ Hit: run only a deploy command already documented in-repo (scripts/CI/README). Do not guess a provider. Do not add files.
58
+
59
+ Protocol: `.rulesync/reference/cascade.md`. Do not paste cascade.
@@ -0,0 +1,62 @@
1
+ ---
2
+ name: commit-push-release
3
+ description: >
4
+ Commit, push, bump package.json, tag vX.Y.Z, push the tag. CI publishes. Use
5
+ for /commit-push-release, "commit push release", "release". Must push. Never
6
+ force-push. No npm/gh publish.
7
+ ---
8
+ Inspect `git status` + `git diff` (staged and unstaged) before the message.
9
+
10
+ Stage only user intent. Never blind `git add -A` / `git add .`. Split unrelated concerns into multiple commits.
11
+
12
+ Message = Conventional Commits **subject only**: `type(scope): subject` (scope optional).
13
+
14
+ Types: feat fix docs style refactor perf test build ci chore revert.
15
+
16
+ Subject: imperative lowercase no trailing period.
17
+
18
+ NO body. NO footer. NO `Co-Authored-By`. NO `Generated with`. NO 🤖. NO trailers. No AI attribution. Work belongs to the human.
19
+
20
+ Must `git push`. Do not load /commit. Ignore never-push.
21
+
22
+ ## Branch
23
+
24
+ Current: `git rev-parse --abbrev-ref HEAD`
25
+
26
+ Default: `git symbolic-ref --quiet --short refs/remotes/origin/HEAD` (strip `origin/`). If that fails: ask. Never invent default.
27
+
28
+ Recent (frozen flags; do not change):
29
+
30
+ ```
31
+ git reflog -n 30
32
+ git for-each-ref --count=8 --sort=-committerdate --format='%(refname:short) %(committerdate:unix)' refs/heads
33
+ ```
34
+
35
+ Recent = unique existing non-default names from those two outputs whose `committerdate` unix is ≤7d (`now - 604800`). Never invent branch names. Unknown/ambiguous names → drop them, do not guess.
36
+
37
+ | state | action |
38
+ | current ≠ default | push current |
39
+ | default AND 0 recent | push default |
40
+ | default AND exactly 1 recent exists | `git checkout` that name; push it |
41
+ | else | ask; do not push yet |
42
+
43
+ No upstream (`git rev-parse --abbrev-ref @{upstream}` fails): `git push -u origin <branch>`. Else `git push`.
44
+
45
+ Never force-push. Never `--force`, `-f`, `--force-with-lease`, `+<branch>`.
46
+
47
+ ## Release
48
+
49
+ Ask if off default, or patch/minor/major is unclear. Do not guess semver. Do not tag until answered.
50
+
51
+ On default + clear bump:
52
+
53
+ 1. Set `package.json` `version` to `X.Y.Z` (keep lockfile in sync if it records version).
54
+ 2. Commit the bump with the same subject rules (`chore(release): vX.Y.Z` unless the user gave a subject).
55
+ 3. Push the branch per **Branch**.
56
+ 4. `git tag vX.Y.Z` then `git push origin vX.Y.Z`.
57
+
58
+ Do not `npm publish`. Do not `npm pack` as publish. Do not `gh release create`. CI publishes from the tag.
59
+
60
+ Retag only if asked. Unprompted: never `git tag -f`, never delete a tag, never force-push a tag. If asked to retag: move that tag only; still never force-push a branch.
61
+
62
+ Protocol: `.rulesync/reference/cascade.md`. Do not paste cascade.
@@ -17,10 +17,10 @@ effort: medium
17
17
  ---
18
18
  Voice: `.rulesync/reference/output.md` — must follow.
19
19
 
20
- Implement specified solution. Never spawn. Never run for simple tool usage (grunt agent). Never plan (thinker agent).
20
+ Implement specified solution. User prompt may be the spec; `.tmp/plans` not required for small/defined writes. Never spawn. Never run for simple tool usage (grunt agent). Never plan (thinker agent).
21
21
  After write: validate+sim (mandatory). Fix hard failures. Return findings. Never skip validation
22
22
  Read/Grep/list_dir only if needed for edit. Prefer: implement the spec; dump via `need:`.
23
- Write-allowlist = paths listed in the spec/plan only. No unsolicited README/docs/examples. Missing path → blocker/`need:`; do not invent. Checkbox-flip the plan file.
23
+ Write-allowlist = paths listed in the spec/plan/prompt only. No unsolicited README/docs/examples. Missing path → blocker/`need:`; do not invent. Checkbox-flip the plan file.
24
24
  TDD when the spec/plan says tests: you write intelligent test, confirm test fails, implement solution, confirm test pass and iterate until completion (red/green/refactor).
25
25
  Return blockers, problems, edge cases, performance, bugs, warnings, inefficiencies / missed optimizations found while implementing or testing.
26
26
 
@@ -18,7 +18,7 @@ Always-do:
18
18
 
19
19
  | signal | next |
20
20
  |---|---|
21
- | create/change product files | spawn implementer (thinker then implementer if no spec). Never parent Write/Bash/Skill |
21
+ | create/change product files | small/simple or prompt-is-spec → implementer; large/complex + no spec → thinker then implementer. Never parent Write/Bash/Skill |
22
22
  | plan/spec ready + file writes remain | persist plan if needed; spawn implementer; do not recap-stop |
23
23
  | tools/facts/git/test/mechanical write | spawn grunt |
24
24
  | world fact | spawn grunt `job:web` |
@@ -38,7 +38,7 @@ Always-do:
38
38
 
39
39
  You do not talk. First token = spawn. Illegal tools (never consider never call): Read read_file Grep grep Glob list_dir Bash run_terminal_command view_file grep_search run_command. Not in toolkit. Hook deny = backstop not UX. Next=spawn not retry. Only /solo (stamp grunt-off-{sid} this session) escapes spawn workflow. /explain=voice+post-child recap never parent Read. No try-then-spawn. No parent probe. No skip-spawn. No trivia/cheap. User-visible = legal tag + **one-line** echo only. Siblings still run: `[grunt]:` echo. Facts/search/trees → grunt, never thinker.
40
40
  Spawn only `grunt` | `implementer` | `thinker`. Omit `model`. Isolation `none` unless asked. Never spawn `orchestrator`. Children never spawn.
41
- grunt ← tools. World fact → grunt `job: web`. Never memory. implementer ← specified solution (not the spec). thinker ← plan/deep reason/spec.
41
+ grunt ← tools. World fact → grunt `job: web`. Never memory. implementer ← specified solution or prompt-is-spec. thinker ← plan/deep reason.
42
42
  Child prompt first sentence only: `You are {agent} subagent.` Then task + abs paths + verdicts only.
43
43
  Peek every 60s/child; quote real host fields; `done|alive|stuck`; no invent; no auto-kill. Grok: `get_command_or_subagent_output` `timeout_ms=60000` every peek. Else GAP: block on spawn return = `done`. Stuck/blocked: quote host fields only.
44
44
  Child `need:` JSON → parse-need + parallel grunt; one `resume_from` + **new** verdicts only; max 3; no re-send task; no fresh-spawn.
@@ -2,9 +2,9 @@
2
2
  name: commit
3
3
  description: >
4
4
  Inspect the diff and commit with a Conventional Commits subject line. Use for
5
- /commit, "commit this", "commit these changes". Never pushes.
5
+ /commit, "commit this", "commit these changes". Never git push.
6
6
  ---
7
- Inspect `git status` + `git diff` (staged and unstaged) before the message. Never push.
7
+ Inspect `git status` + `git diff` (staged and unstaged) before the message.
8
8
 
9
9
  Stage only user intent. Never blind `git add -A` / `git add .`. Split unrelated concerns into multiple commits.
10
10
 
@@ -16,6 +16,6 @@ Subject: imperative lowercase no trailing period.
16
16
 
17
17
  NO body. NO footer. NO `Co-Authored-By`. NO `Generated with`. NO 🤖. NO trailers. No AI attribution. Work belongs to the human.
18
18
 
19
- Never `git push`.
19
+ Never git push. Never `git push`. This skill never pushes.
20
20
 
21
21
  Protocol: `.rulesync/reference/cascade.md`. Do not paste cascade.
@@ -1,15 +1,9 @@
1
1
  ---
2
2
  name: commit-and-push
3
3
  description: >
4
- Commit like /commit, then push to the current branch's upstream. Use for
5
- /commit-and-push, "commit and push", "commit this and push".
4
+ Commit and push. Use for /commit-and-push, "commit and push", "commit this and
5
+ push". Must push.
6
6
  ---
7
- Run commit skill rules first (`.rulesync/skills/commit/SKILL.md`). Then push.
8
-
9
- If on default branch, create/switch to a feature branch first — never push default directly.
10
-
11
- Push upstream; if no upstream `git push -u origin <current-branch>`.
12
-
13
- Never force-push.
7
+ Use `.rulesync/skills/commit-push/SKILL.md`. Must push. Do not load /commit.
14
8
 
15
9
  Protocol: `.rulesync/reference/cascade.md`. Do not paste cascade.
@@ -0,0 +1,46 @@
1
+ ---
2
+ name: commit-push
3
+ description: >
4
+ Commit with a Conventional Commits subject, then push. Use for /commit-push,
5
+ "commit and push", "commit this and push". Must push. Never force-push.
6
+ ---
7
+ Inspect `git status` + `git diff` (staged and unstaged) before the message.
8
+
9
+ Stage only user intent. Never blind `git add -A` / `git add .`. Split unrelated concerns into multiple commits.
10
+
11
+ Message = Conventional Commits **subject only**: `type(scope): subject` (scope optional).
12
+
13
+ Types: feat fix docs style refactor perf test build ci chore revert.
14
+
15
+ Subject: imperative lowercase no trailing period.
16
+
17
+ NO body. NO footer. NO `Co-Authored-By`. NO `Generated with`. NO 🤖. NO trailers. No AI attribution. Work belongs to the human.
18
+
19
+ Must `git push`. Do not load /commit. Ignore never-push.
20
+
21
+ ## Branch
22
+
23
+ Current: `git rev-parse --abbrev-ref HEAD`
24
+
25
+ Default: `git symbolic-ref --quiet --short refs/remotes/origin/HEAD` (strip `origin/`). If that fails: ask. Never invent default.
26
+
27
+ Recent (frozen flags; do not change):
28
+
29
+ ```
30
+ git reflog -n 30
31
+ git for-each-ref --count=8 --sort=-committerdate --format='%(refname:short) %(committerdate:unix)' refs/heads
32
+ ```
33
+
34
+ Recent = unique existing non-default names from those two outputs whose `committerdate` unix is ≤7d (`now - 604800`). Never invent branch names. Unknown/ambiguous names → drop them, do not guess.
35
+
36
+ | state | action |
37
+ | current ≠ default | push current |
38
+ | default AND 0 recent | push default |
39
+ | default AND exactly 1 recent exists | `git checkout` that name; push it |
40
+ | else | ask; do not push yet |
41
+
42
+ No upstream (`git rev-parse --abbrev-ref @{upstream}` fails): `git push -u origin <branch>`. Else `git push`.
43
+
44
+ Never force-push. Never `--force`, `-f`, `--force-with-lease`, `+<branch>`.
45
+
46
+ Protocol: `.rulesync/reference/cascade.md`. Do not paste cascade.
@@ -0,0 +1,59 @@
1
+ ---
2
+ name: commit-push-deploy
3
+ description: >
4
+ Commit, push, then deploy only if allowlisted infra already exists. Use for
5
+ /commit-push-deploy, "commit push deploy", "deploy this". Must push. Never
6
+ force-push. Never invent infra.
7
+ ---
8
+ Inspect `git status` + `git diff` (staged and unstaged) before the message.
9
+
10
+ Stage only user intent. Never blind `git add -A` / `git add .`. Split unrelated concerns into multiple commits.
11
+
12
+ Message = Conventional Commits **subject only**: `type(scope): subject` (scope optional).
13
+
14
+ Types: feat fix docs style refactor perf test build ci chore revert.
15
+
16
+ Subject: imperative lowercase no trailing period.
17
+
18
+ NO body. NO footer. NO `Co-Authored-By`. NO `Generated with`. NO 🤖. NO trailers. No AI attribution. Work belongs to the human.
19
+
20
+ Must `git push`. Do not load /commit. Ignore never-push.
21
+
22
+ ## Branch
23
+
24
+ Current: `git rev-parse --abbrev-ref HEAD`
25
+
26
+ Default: `git symbolic-ref --quiet --short refs/remotes/origin/HEAD` (strip `origin/`). If that fails: ask. Never invent default.
27
+
28
+ Recent (frozen flags; do not change):
29
+
30
+ ```
31
+ git reflog -n 30
32
+ git for-each-ref --count=8 --sort=-committerdate --format='%(refname:short) %(committerdate:unix)' refs/heads
33
+ ```
34
+
35
+ Recent = unique existing non-default names from those two outputs whose `committerdate` unix is ≤7d (`now - 604800`). Never invent branch names. Unknown/ambiguous names → drop them, do not guess.
36
+
37
+ | state | action |
38
+ | current ≠ default | push current |
39
+ | default AND 0 recent | push default |
40
+ | default AND exactly 1 recent exists | `git checkout` that name; push it |
41
+ | else | ask; do not push yet |
42
+
43
+ No upstream (`git rev-parse --abbrev-ref @{upstream}` fails): `git push -u origin <branch>`. Else `git push`.
44
+
45
+ Never force-push. Never `--force`, `-f`, `--force-with-lease`, `+<branch>`.
46
+
47
+ ## Deploy
48
+
49
+ After push. Detect **existing** repo-root (or listed) paths only — never create them:
50
+
51
+ `fly.toml` `vercel.json` `netlify.toml` `wrangler.toml` `wrangler.jsonc` `railway.toml` `railway.json` `render.yaml` `render.yml` `app.yaml` `Dockerfile` `docker-compose.yml` `docker-compose.yaml` `samconfig.toml` `serverless.yml` `serverless.yaml` `Pulumi.yaml` `terraform/` `.do/app.yaml`
52
+
53
+ This repo (`package.json` `name` `@lovrozagar/grunt`): skip deploy. Stop after push.
54
+
55
+ No allowlist hit: skip. Never invent infra, hosts, workflows, or config.
56
+
57
+ Hit: run only a deploy command already documented in-repo (scripts/CI/README). Do not guess a provider. Do not add files.
58
+
59
+ Protocol: `.rulesync/reference/cascade.md`. Do not paste cascade.
@@ -0,0 +1,62 @@
1
+ ---
2
+ name: commit-push-release
3
+ description: >
4
+ Commit, push, bump package.json, tag vX.Y.Z, push the tag. CI publishes. Use
5
+ for /commit-push-release, "commit push release", "release". Must push. Never
6
+ force-push. No npm/gh publish.
7
+ ---
8
+ Inspect `git status` + `git diff` (staged and unstaged) before the message.
9
+
10
+ Stage only user intent. Never blind `git add -A` / `git add .`. Split unrelated concerns into multiple commits.
11
+
12
+ Message = Conventional Commits **subject only**: `type(scope): subject` (scope optional).
13
+
14
+ Types: feat fix docs style refactor perf test build ci chore revert.
15
+
16
+ Subject: imperative lowercase no trailing period.
17
+
18
+ NO body. NO footer. NO `Co-Authored-By`. NO `Generated with`. NO 🤖. NO trailers. No AI attribution. Work belongs to the human.
19
+
20
+ Must `git push`. Do not load /commit. Ignore never-push.
21
+
22
+ ## Branch
23
+
24
+ Current: `git rev-parse --abbrev-ref HEAD`
25
+
26
+ Default: `git symbolic-ref --quiet --short refs/remotes/origin/HEAD` (strip `origin/`). If that fails: ask. Never invent default.
27
+
28
+ Recent (frozen flags; do not change):
29
+
30
+ ```
31
+ git reflog -n 30
32
+ git for-each-ref --count=8 --sort=-committerdate --format='%(refname:short) %(committerdate:unix)' refs/heads
33
+ ```
34
+
35
+ Recent = unique existing non-default names from those two outputs whose `committerdate` unix is ≤7d (`now - 604800`). Never invent branch names. Unknown/ambiguous names → drop them, do not guess.
36
+
37
+ | state | action |
38
+ | current ≠ default | push current |
39
+ | default AND 0 recent | push default |
40
+ | default AND exactly 1 recent exists | `git checkout` that name; push it |
41
+ | else | ask; do not push yet |
42
+
43
+ No upstream (`git rev-parse --abbrev-ref @{upstream}` fails): `git push -u origin <branch>`. Else `git push`.
44
+
45
+ Never force-push. Never `--force`, `-f`, `--force-with-lease`, `+<branch>`.
46
+
47
+ ## Release
48
+
49
+ Ask if off default, or patch/minor/major is unclear. Do not guess semver. Do not tag until answered.
50
+
51
+ On default + clear bump:
52
+
53
+ 1. Set `package.json` `version` to `X.Y.Z` (keep lockfile in sync if it records version).
54
+ 2. Commit the bump with the same subject rules (`chore(release): vX.Y.Z` unless the user gave a subject).
55
+ 3. Push the branch per **Branch**.
56
+ 4. `git tag vX.Y.Z` then `git push origin vX.Y.Z`.
57
+
58
+ Do not `npm publish`. Do not `npm pack` as publish. Do not `gh release create`. CI publishes from the tag.
59
+
60
+ Retag only if asked. Unprompted: never `git tag -f`, never delete a tag, never force-push a tag. If asked to retag: move that tag only; still never force-push a branch.
61
+
62
+ Protocol: `.rulesync/reference/cascade.md`. Do not paste cascade.
@@ -7,10 +7,10 @@ approval_policy = "never"
7
7
  developer_instructions = '''
8
8
  Voice: `.rulesync/reference/output.md` — must follow.
9
9
 
10
- Implement specified solution. Never spawn. Never run for simple tool usage (grunt agent). Never plan (thinker agent).
10
+ Implement specified solution. User prompt may be the spec; `.tmp/plans` not required for small/defined writes. Never spawn. Never run for simple tool usage (grunt agent). Never plan (thinker agent).
11
11
  After write: validate+sim (mandatory). Fix hard failures. Return findings. Never skip validation
12
12
  Read/Grep/list_dir only if needed for edit. Prefer: implement the spec; dump via `need:`.
13
- Write-allowlist = paths listed in the spec/plan only. No unsolicited README/docs/examples. Missing path → blocker/`need:`; do not invent. Checkbox-flip the plan file.
13
+ Write-allowlist = paths listed in the spec/plan/prompt only. No unsolicited README/docs/examples. Missing path → blocker/`need:`; do not invent. Checkbox-flip the plan file.
14
14
  TDD when the spec/plan says tests: you write intelligent test, confirm test fails, implement solution, confirm test pass and iterate until completion (red/green/refactor).
15
15
  Return blockers, problems, edge cases, performance, bugs, warnings, inefficiencies / missed optimizations found while implementing or testing.
16
16
 
@@ -12,7 +12,7 @@ Always-do:
12
12
 
13
13
  | signal | next |
14
14
  |---|---|
15
- | create/change product files | spawn implementer (thinker then implementer if no spec). Never parent Write/Bash/Skill |
15
+ | create/change product files | small/simple or prompt-is-spec → implementer; large/complex + no spec → thinker then implementer. Never parent Write/Bash/Skill |
16
16
  | plan/spec ready + file writes remain | persist plan if needed; spawn implementer; do not recap-stop |
17
17
  | tools/facts/git/test/mechanical write | spawn grunt |
18
18
  | world fact | spawn grunt `job:web` |
@@ -32,7 +32,7 @@ Always-do:
32
32
 
33
33
  You do not talk. First token = spawn. Illegal tools (never consider never call): Read read_file Grep grep Glob list_dir Bash run_terminal_command view_file grep_search run_command. Not in toolkit. Hook deny = backstop not UX. Next=spawn not retry. Only /solo (stamp grunt-off-{sid} this session) escapes spawn workflow. /explain=voice+post-child recap never parent Read. No try-then-spawn. No parent probe. No skip-spawn. No trivia/cheap. User-visible = legal tag + **one-line** echo only. Siblings still run: `[grunt]:` echo. Facts/search/trees → grunt, never thinker.
34
34
  Spawn only `grunt` | `implementer` | `thinker`. Omit `model`. Isolation `none` unless asked. Never spawn `orchestrator`. Children never spawn.
35
- grunt ← tools. World fact → grunt `job: web`. Never memory. implementer ← specified solution (not the spec). thinker ← plan/deep reason/spec.
35
+ grunt ← tools. World fact → grunt `job: web`. Never memory. implementer ← specified solution or prompt-is-spec. thinker ← plan/deep reason.
36
36
  Child prompt first sentence only: `You are {agent} subagent.` Then task + abs paths + verdicts only.
37
37
  Peek every 60s/child; quote real host fields; `done|alive|stuck`; no invent; no auto-kill. Grok: `get_command_or_subagent_output` `timeout_ms=60000` every peek. Else GAP: block on spawn return = `done`. Stuck/blocked: quote host fields only.
38
38
  Child `need:` JSON → parse-need + parallel grunt; one `resume_from` + **new** verdicts only; max 3; no re-send task; no fresh-spawn.
@@ -9,10 +9,10 @@ tools: read_file, grep, list_dir, write, search_replace, run_terminal_command, w
9
9
  ---
10
10
  Voice: `.rulesync/reference/output.md` — must follow.
11
11
 
12
- Implement specified solution. Never spawn. Never run for simple tool usage (grunt agent). Never plan (thinker agent).
12
+ Implement specified solution. User prompt may be the spec; `.tmp/plans` not required for small/defined writes. Never spawn. Never run for simple tool usage (grunt agent). Never plan (thinker agent).
13
13
  After write: validate+sim (mandatory). Fix hard failures. Return findings. Never skip validation
14
14
  Read/Grep/list_dir only if needed for edit. Prefer: implement the spec; dump via `need:`.
15
- Write-allowlist = paths listed in the spec/plan only. No unsolicited README/docs/examples. Missing path → blocker/`need:`; do not invent. Checkbox-flip the plan file.
15
+ Write-allowlist = paths listed in the spec/plan/prompt only. No unsolicited README/docs/examples. Missing path → blocker/`need:`; do not invent. Checkbox-flip the plan file.
16
16
  TDD when the spec/plan says tests: you write intelligent test, confirm test fails, implement solution, confirm test pass and iterate until completion (red/green/refactor).
17
17
  Return blockers, problems, edge cases, performance, bugs, warnings, inefficiencies / missed optimizations found while implementing or testing.
18
18
 
@@ -14,7 +14,7 @@ Always-do:
14
14
 
15
15
  | signal | next |
16
16
  |---|---|
17
- | create/change product files | spawn implementer (thinker then implementer if no spec). Never parent Write/Bash/Skill |
17
+ | create/change product files | small/simple or prompt-is-spec → implementer; large/complex + no spec → thinker then implementer. Never parent Write/Bash/Skill |
18
18
  | plan/spec ready + file writes remain | persist plan if needed; spawn implementer; do not recap-stop |
19
19
  | tools/facts/git/test/mechanical write | spawn grunt |
20
20
  | world fact | spawn grunt `job:web` |
@@ -34,7 +34,7 @@ Always-do:
34
34
 
35
35
  You do not talk. First token = spawn. Illegal tools (never consider never call): Read read_file Grep grep Glob list_dir Bash run_terminal_command view_file grep_search run_command. Not in toolkit. Hook deny = backstop not UX. Next=spawn not retry. Only /solo (stamp grunt-off-{sid} this session) escapes spawn workflow. /explain=voice+post-child recap never parent Read. No try-then-spawn. No parent probe. No skip-spawn. No trivia/cheap. User-visible = legal tag + **one-line** echo only. Siblings still run: `[grunt]:` echo. Facts/search/trees → grunt, never thinker.
36
36
  Spawn only `grunt` | `implementer` | `thinker`. Omit `model`. Isolation `none` unless asked. Never spawn `orchestrator`. Children never spawn.
37
- grunt ← tools. World fact → grunt `job: web`. Never memory. implementer ← specified solution (not the spec). thinker ← plan/deep reason/spec.
37
+ grunt ← tools. World fact → grunt `job: web`. Never memory. implementer ← specified solution or prompt-is-spec. thinker ← plan/deep reason.
38
38
  Child prompt first sentence only: `You are {agent} subagent.` Then task + abs paths + verdicts only.
39
39
  Peek every 60s/child; quote real host fields; `done|alive|stuck`; no invent; no auto-kill. Grok: `get_command_or_subagent_output` `timeout_ms=60000` every peek. Else GAP: block on spawn return = `done`. Stuck/blocked: quote host fields only.
40
40
  Child `need:` JSON → parse-need + parallel grunt; one `resume_from` + **new** verdicts only; max 3; no re-send task; no fresh-spawn.
@@ -34,9 +34,9 @@ import { logTelemetry, ORCHESTRATOR_LOGS_DIR } from "../../scripts/telemetry.mjs
34
34
  export const DENY_REASON =
35
35
  "First action=spawn implementer|grunt|thinker. Deny expected. Only /solo this session escapes.";
36
36
  export const STOP_REASONS = [
37
- "Spawn: ⚠/validate/sim findings or writes remain or parent just tried to Write → spawn implementer. Else facts → grunt. Else no spec → thinker. Else recap `[orchestrator]:` one-line.",
38
- "Still spawn: ⚠/validate/sim findings or writes remain or parent just tried to Write → spawn implementer. Else facts → grunt. Else no spec → thinker. Else recap `[orchestrator]:` one-line.",
39
- "Last spawn: ⚠/validate/sim findings or writes remain or parent just tried to Write → spawn implementer. Else facts → grunt. Else no spec → thinker. Else recap `[orchestrator]:` one-line.",
37
+ "Spawn: ⚠/validate/sim findings or writes remain or parent just tried to Write → spawn implementer. Else facts → grunt. Else large/complex + no spec → thinker. Else small/simple/defined → implementer. Else recap `[orchestrator]:` one-line.",
38
+ "Still spawn: ⚠/validate/sim findings or writes remain or parent just tried to Write → spawn implementer. Else facts → grunt. Else large/complex + no spec → thinker. Else small/simple/defined → implementer. Else recap `[orchestrator]:` one-line.",
39
+ "Last spawn: ⚠/validate/sim findings or writes remain or parent just tried to Write → spawn implementer. Else facts → grunt. Else large/complex + no spec → thinker. Else small/simple/defined → implementer. Else recap `[orchestrator]:` one-line.",
40
40
  ];
41
41
  const TRANSCRIPT_TAIL_BYTES = 512 * 1024;
42
42
  const PARENT_TOOLS = new Set([
@@ -2,9 +2,9 @@
2
2
  name: commit
3
3
  description: >
4
4
  Inspect the diff and commit with a Conventional Commits subject line. Use for
5
- /commit, "commit this", "commit these changes". Never pushes.
5
+ /commit, "commit this", "commit these changes". Never git push.
6
6
  ---
7
- Inspect `git status` + `git diff` (staged and unstaged) before the message. Never push.
7
+ Inspect `git status` + `git diff` (staged and unstaged) before the message.
8
8
 
9
9
  Stage only user intent. Never blind `git add -A` / `git add .`. Split unrelated concerns into multiple commits.
10
10
 
@@ -16,6 +16,6 @@ Subject: imperative lowercase no trailing period.
16
16
 
17
17
  NO body. NO footer. NO `Co-Authored-By`. NO `Generated with`. NO 🤖. NO trailers. No AI attribution. Work belongs to the human.
18
18
 
19
- Never `git push`.
19
+ Never git push. Never `git push`. This skill never pushes.
20
20
 
21
21
  Protocol: `.rulesync/reference/cascade.md`. Do not paste cascade.
@@ -1,15 +1,9 @@
1
1
  ---
2
2
  name: commit-and-push
3
3
  description: >
4
- Commit like /commit, then push to the current branch's upstream. Use for
5
- /commit-and-push, "commit and push", "commit this and push".
4
+ Commit and push. Use for /commit-and-push, "commit and push", "commit this and
5
+ push". Must push.
6
6
  ---
7
- Run commit skill rules first (`.rulesync/skills/commit/SKILL.md`). Then push.
8
-
9
- If on default branch, create/switch to a feature branch first — never push default directly.
10
-
11
- Push upstream; if no upstream `git push -u origin <current-branch>`.
12
-
13
- Never force-push.
7
+ Use `.rulesync/skills/commit-push/SKILL.md`. Must push. Do not load /commit.
14
8
 
15
9
  Protocol: `.rulesync/reference/cascade.md`. Do not paste cascade.