snapshot of https://github.com/marmelab/atomic-crm.git (main, 2026-09-18; blobs > 131072B omitted)
Some checks failed
✅ Check / 🔬 ESLint (push) Failing after 21s
✅ Check / 🏷️ Typecheck (push) Failing after 11s
✅ Check / 🔎 Test (push) Failing after 11s
✅ Check / e2e-test (push) Failing after 11s
✅ Check / 🔨 Build (push) Failing after 11s
🚀 Deploy / 🚀 Deploy (doc) (push) Failing after 12s
🚀 Deploy / 🚀 Deploy (demo) (push) Failing after 12s
🚀 Deploy / 🚀 Deploy (supabase) (push) Failing after 18s
Some checks failed
✅ Check / 🔬 ESLint (push) Failing after 21s
✅ Check / 🏷️ Typecheck (push) Failing after 11s
✅ Check / 🔎 Test (push) Failing after 11s
✅ Check / e2e-test (push) Failing after 11s
✅ Check / 🔨 Build (push) Failing after 11s
🚀 Deploy / 🚀 Deploy (doc) (push) Failing after 12s
🚀 Deploy / 🚀 Deploy (demo) (push) Failing after 12s
🚀 Deploy / 🚀 Deploy (supabase) (push) Failing after 18s
This commit is contained in:
19
.claude/commands/harness-diff.md
Normal file
19
.claude/commands/harness-diff.md
Normal file
@@ -0,0 +1,19 @@
|
||||
---
|
||||
description: Show what a harness session changed (the net diff of its work)
|
||||
---
|
||||
|
||||
Show the net set of changes a harness session produced, then stop. This is **read-only** — never modify files or git state.
|
||||
|
||||
1. **Pick the session short id.**
|
||||
- If the user passed a short id as an argument (`$ARGUMENTS`), use it directly.
|
||||
- Else, look for a `<session_dir>…</session_dir>` value in your context (injected at session start). If present, `SESSION_SHORT_ID` = the first dash-separated segment of its basename (e.g. `/tmp/…/46bc14c5-13fb-498b-…` → `46bc14c5`). Confirm it with `git show-ref --verify --quiet refs/heads/session/<short>`; if the ref exists, use it.
|
||||
- Otherwise enumerate sessions: `git for-each-ref --format='%(refname:short)' 'refs/heads/session/*'`.
|
||||
- none → tell the user there is no harness session to inspect, and stop.
|
||||
- exactly one → use it.
|
||||
- several → list them and ask which with `AskUserQuestion`. For each, show its short id, its base branch (`git config --local --get sessionbase.<short>.branch`), and its fork date (`git --no-pager log -1 --format=%cr session-base/<short>`). A non-destructive default to the most recent is acceptable, but still show which one you picked.
|
||||
|
||||
2. **Show the diff** (the session's net contribution, isolated from any other work on the branch):
|
||||
- summary first: `git --no-pager diff --stat session-base/<short>..session/<short>`
|
||||
- then full: `git --no-pager diff session-base/<short>..session/<short>`
|
||||
|
||||
3. Summarize in plain terms what the session changed. Do **not** edit anything or run any history-mutating git command.
|
||||
28
.claude/commands/harness-revert.md
Normal file
28
.claude/commands/harness-revert.md
Normal file
@@ -0,0 +1,28 @@
|
||||
---
|
||||
description: Revert a harness session's changes and clean up its branches/worktrees
|
||||
---
|
||||
|
||||
Revert everything a harness session merged into your branch, then remove its temporary branches and worktrees. This is **destructive** — confirm before acting.
|
||||
|
||||
1. **Pick the session short id.**
|
||||
- If the user passed a short id as an argument (`$ARGUMENTS`), use it.
|
||||
- Else, look for a `<session_dir>…</session_dir>` value in your context. If present and `git show-ref --verify --quiet refs/heads/session/<short>` succeeds, that is the current session — use it.
|
||||
- Otherwise enumerate `git for-each-ref --format='%(refname:short)' 'refs/heads/session/*'`.
|
||||
- none → tell the user there is no harness session to revert, and stop.
|
||||
- exactly one → use it.
|
||||
- several → list them (short id + base branch via `git config --local --get sessionbase.<short>.branch` + fork date via `git --no-pager log -1 --format=%cr session-base/<short>`) and ask which with `AskUserQuestion`. Because this is destructive, **always** make the user choose explicitly when more than one exists — never silently pick the latest.
|
||||
|
||||
2. **Show what will be undone, then confirm — including the strategy.** Run `git --no-pager diff --stat session-base/<short>..session/<short>` and name the base branch it landed on. Ask the user to confirm with `AskUserQuestion`, offering the two strategies (default unless the user already said which):
|
||||
- **revert** (default, safe): keeps history, adds a revert commit; safe even if other sessions landed on the same branch afterwards.
|
||||
- **hard** (clean history): `git reset --hard` to the session's fork point — the session's commits disappear entirely (no merge, no revert commit), but anything else committed after the fork is also dropped. Best when this session is the only thing on the branch (e.g. demos). If the user asked to "completely remove the branch / drop the commits / clean history", pick this.
|
||||
**Before offering hard, preview the collateral.** Run `git --no-pager log --oneline session-base/<short>..HEAD`: these are ALL commits `--hard` would drop, not just the session's. If any are unrelated to the session (e.g. the user's own commits made after the session forked, common for a `#technical-harness` run, which never promotes onto the base branch so its work is not even there), warn explicitly that hard would delete them too, and steer to **revert** (or, for a non-promoted session, note that default mode cleans up branches/worktrees without touching the base branch at all). The script enforces this: `--hard` refuses when such collateral exists unless `--force`.
|
||||
Do not proceed without an explicit yes.
|
||||
|
||||
3. **On confirmation, run the script** from the repo root (append `--hard` for the clean-history strategy):
|
||||
```
|
||||
node "$(git rev-parse --show-toplevel)/.claude/scripts/harness-revert.mjs" <short> [--hard] [--force]
|
||||
```
|
||||
If `--hard` refuses because it would drop commits not belonging to the session, do NOT reflexively add `--force`; relay the listed commits to the user and re-confirm; `--force` bypasses the guard and permanently drops them.
|
||||
(Run it once with `--dry-run` appended first if you want to preview the exact git actions.) Relay the script's output. Default mode reverts this session's promotion merge commit(s) (safe even if other sessions landed on the same branch); `--hard` resets the base branch to the fork point (refuses if history diverged). Either way it then removes the session's worktrees, branches, `sessionbase.<short>` config, and `/tmp` dir.
|
||||
|
||||
4. **If the script reports a conflict**, tell the user which step stopped and that another session likely touched the same files; they must resolve it manually before re-running. Never force the revert.
|
||||
17
.claude/commands/harness-target.md
Normal file
17
.claude/commands/harness-target.md
Normal file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
description: Point this harness session's fork base + promotion target at a branch (worktree workflows where $CLAUDE_PROJECT_DIR stays on main)
|
||||
---
|
||||
|
||||
Pre-seed the branch the harness forks from and promotes onto, so a code-change dispatch lands on the branch you are actually working on — e.g. a `feat/...` checked out in a **separate worktree** while `$CLAUDE_PROJECT_DIR` stays on `main`. You name only the **branch**; the merger finds whichever worktree has it checked out.
|
||||
|
||||
1. **Resolve the target branch** from `$ARGUMENTS` (e.g. `feat/us-05`). If empty, ask the user which branch, then stop.
|
||||
|
||||
2. **Resolve the session short id** from the `<session_dir>…</session_dir>` value in your context: `<short>` = the first dash-segment of its basename. If there is no `session_dir`, tell the user and stop.
|
||||
|
||||
3. **Validate the branch exists locally**: `git show-ref --verify --quiet "refs/heads/<branch>"`. If it does not, show `git worktree list` and stop — never create the branch here.
|
||||
|
||||
4. **Refuse if the session already forked.** If `git config --local --get sessionbase.<short>.branch` is already set, or `git show-ref --verify --quiet refs/heads/session/<short>` succeeds, the fork base is already pinned for this session. Overwriting now would change only the promotion target, not the work already forked from the old base — an inconsistent state. Warn the user and ask with `AskUserQuestion` before overwriting; recommend a fresh session (or `/harness-revert` first) instead.
|
||||
|
||||
5. **Set it**: `git config --local "sessionbase.<short>.branch" "<branch>"`. Confirm: for this session the harness will fork from and promote onto `<branch>`, and the merger merges inside that branch's worktree.
|
||||
|
||||
Run this **before** the first code-change request of the session (the base is pinned at the first developer dispatch). Effective only with the worktree-aware `getBaseBranch` / merger changes present.
|
||||
5
.claude/commands/ponytail-audit.md
Normal file
5
.claude/commands/ponytail-audit.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
description: Audit the whole repo for over-engineering, what can be deleted
|
||||
---
|
||||
|
||||
Audit the entire repository for over-engineering only, not correctness. Scan the whole tree, not a diff. One line per finding, ranked biggest cut first: <tag> <what to cut>. <replacement>. [path]. Tags: delete (dead code/speculative feature), stdlib (reinvented standard library), native (dependency doing what the platform does), yagni (abstraction with one implementation), shrink (same logic, fewer lines). End with the net lines and dependencies removable. If nothing to cut: 'Lean already. Ship.'
|
||||
5
.claude/commands/ponytail-debt.md
Normal file
5
.claude/commands/ponytail-debt.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
description: "Harvest ponytail: comments into a tracked debt ledger"
|
||||
---
|
||||
|
||||
Harvest every `ponytail:` comment in this repository into a debt ledger so deferrals do not rot into 'later means never'. Grep the whole tree for comment markers (grep -rnE '(#|//) ?ponytail:' ., skipping node_modules/.git/build output). One row per marker, grouped by file: <file>:<line> — <what was simplified>. ceiling: <the limit named in the comment>. upgrade: <the trigger to revisit>. Tag any marker that names no upgrade path or trigger as no-trigger, those rot silently. End with the count of markers and how many lack a trigger. If none: 'No ponytail: debt. Clean ledger.' Report only, change nothing.
|
||||
5
.claude/commands/ponytail-help.md
Normal file
5
.claude/commands/ponytail-help.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
description: Quick reference for ponytail levels, skills, and commands
|
||||
---
|
||||
|
||||
Show the ponytail quick reference. One shot, change nothing: do not switch mode, write flag files, or persist anything. Levels: /ponytail lite (build what's asked, name the lazier alternative in one line), /ponytail (full, the default ladder: YAGNI then stdlib then native then one line then minimum), /ponytail ultra (deletion before addition, challenges the requirement before building). Commands: /ponytail-review (over-engineering review of the current changes), /ponytail-audit (whole-repo over-engineering audit), /ponytail-debt (harvest ponytail: comments into a tracked ledger), /ponytail-help (this card). Deactivate with 'stop ponytail', 'normal mode', or /ponytail off; resume anytime with /ponytail. Default mode is full; change it with the PONYTAIL_DEFAULT_MODE environment variable (off|lite|full|ultra) or a config file at ~/.config/ponytail/config.json (Windows: %APPDATA%\ponytail\config.json) with {"defaultMode": "lite"}. Resolution order: env var, then config file, then full.
|
||||
5
.claude/commands/ponytail-review.md
Normal file
5
.claude/commands/ponytail-review.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
description: Review changes for over-engineering, what can be deleted
|
||||
---
|
||||
|
||||
Review the current code changes for over-engineering only, not correctness. One line per finding: L<line>: <tag> <what to cut>. <replacement>. Tags: delete (dead code/speculative feature), stdlib (reinvented standard library), native (dependency doing what the platform does), yagni (abstraction with one implementation), shrink (same logic, fewer lines). End with the net lines removable. If nothing to cut: 'Lean already. Ship.'
|
||||
6
.claude/commands/ponytail.md
Normal file
6
.claude/commands/ponytail.md
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
description: Switch ponytail intensity level (lite/full/ultra/off)
|
||||
argument-hint: [lite|full|ultra|off]
|
||||
---
|
||||
|
||||
Switch to ponytail $ARGUMENTS mode. If no level specified, use full. Lazy senior dev mode, before any code: does it need to exist at all (YAGNI)? Does the standard library do it? A native platform feature? Can it be one line? Build the minimum that works. No unrequested abstractions, no avoidable dependencies, no boilerplate. Mark intentional simplifications with a ponytail: comment.
|
||||
Reference in New Issue
Block a user