@caddis/cli 0.4.34 → 0.4.35
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.
- package/bundles/antigravity-plugin/agents/code-reviewer.md +4 -0
- package/bundles/antigravity-plugin/plugin.json +1 -1
- package/bundles/antigravity-plugin/scripts/caddis_file_lock.py +121 -0
- package/bundles/antigravity-plugin/scripts/caddis_frontmatter.py +12 -0
- package/bundles/antigravity-plugin/scripts/caddis_gate.py +185 -4
- package/bundles/antigravity-plugin/scripts/caddis_inventory.py +9 -9
- package/bundles/antigravity-plugin/scripts/caddis_relay_git.py +159 -0
- package/bundles/antigravity-plugin/scripts/caddis_tidy.py +579 -40
- package/bundles/antigravity-plugin/scripts/caddis_todo.py +462 -0
- package/bundles/antigravity-plugin/scripts/caddis_workstreams.py +631 -0
- package/bundles/antigravity-plugin/scripts/check_doc_coverage.py +27 -13
- package/bundles/antigravity-plugin/scripts/oss_review.py +30 -3
- package/bundles/antigravity-plugin/scripts/setup_project_ai.py +5 -0
- package/bundles/antigravity-plugin/scripts/usage_review.py +2 -2
- package/bundles/antigravity-plugin/session_end_agy.py +16 -1
- package/bundles/antigravity-plugin/skills/_registry.md +34 -32
- package/bundles/antigravity-plugin/skills/adopt-app/SKILL.md +1 -1
- package/bundles/antigravity-plugin/skills/advisory-hub/SKILL.md +1 -1
- package/bundles/antigravity-plugin/skills/api-design/SKILL.md +1 -1
- package/bundles/antigravity-plugin/skills/backend-development/SKILL.md +1 -1
- package/bundles/antigravity-plugin/skills/catchup/SKILL.md +31 -33
- package/bundles/antigravity-plugin/skills/ci-cd-pipeline/SKILL.md +1 -1
- package/bundles/antigravity-plugin/skills/code-documentation/SKILL.md +1 -1
- package/bundles/antigravity-plugin/skills/code-review/SKILL.md +1 -1
- package/bundles/antigravity-plugin/skills/codebase-audit/SKILL.md +1 -1
- package/bundles/antigravity-plugin/skills/confluence-hla/SKILL.md +1 -1
- package/bundles/antigravity-plugin/skills/cross-review/SKILL.md +9 -1
- package/bundles/antigravity-plugin/skills/css-architecture/SKILL.md +1 -1
- package/bundles/antigravity-plugin/skills/dashboard-perf-sweep/SKILL.md +1 -1
- package/bundles/antigravity-plugin/skills/database-design/SKILL.md +1 -1
- package/bundles/antigravity-plugin/skills/db-diagram/SKILL.md +1 -1
- package/bundles/antigravity-plugin/skills/decide/SKILL.md +61 -0
- package/bundles/antigravity-plugin/skills/digress/SKILL.md +41 -23
- package/bundles/antigravity-plugin/skills/error-handling/SKILL.md +1 -1
- package/bundles/antigravity-plugin/skills/explainer-doc/SKILL.md +1 -1
- package/bundles/antigravity-plugin/skills/feature-plan/SKILL.md +5 -0
- package/bundles/antigravity-plugin/skills/frontend-design/SKILL.md +1 -1
- package/bundles/antigravity-plugin/skills/gate-preflight/SKILL.md +12 -0
- package/bundles/antigravity-plugin/skills/handoff/SKILL.md +74 -13
- package/bundles/antigravity-plugin/skills/implement/SKILL.md +21 -0
- package/bundles/antigravity-plugin/skills/mermaid-diagrams/SKILL.md +1 -1
- package/bundles/antigravity-plugin/skills/mmr/SKILL.md +8 -0
- package/bundles/antigravity-plugin/skills/particle-art/SKILL.md +1 -1
- package/bundles/antigravity-plugin/skills/playwright/SKILL.md +1 -1
- package/bundles/antigravity-plugin/skills/port-to-github/SKILL.md +1 -1
- package/bundles/antigravity-plugin/skills/pr-merge/SKILL.md +15 -0
- package/bundles/antigravity-plugin/skills/python/SKILL.md +1 -1
- package/bundles/antigravity-plugin/skills/rca/SKILL.md +97 -0
- package/bundles/antigravity-plugin/skills/react-dev/SKILL.md +1 -1
- package/bundles/antigravity-plugin/skills/safe-cleanup/SKILL.md +1 -1
- package/bundles/antigravity-plugin/skills/ship/SKILL.md +19 -4
- package/bundles/antigravity-plugin/skills/ship-merge/SKILL.md +15 -0
- package/bundles/antigravity-plugin/skills/skill-creator/SKILL.md +1 -1
- package/bundles/antigravity-plugin/skills/sql/SKILL.md +1 -1
- package/bundles/antigravity-plugin/skills/tech-explainer/SKILL.md +7 -12
- package/bundles/antigravity-plugin/skills/technical-writing/SKILL.md +1 -1
- package/bundles/antigravity-plugin/skills/test-strategy/SKILL.md +1 -1
- package/bundles/antigravity-plugin/skills/ui-review/SKILL.md +1 -1
- package/bundles/antigravity-plugin/skills/using-git-worktrees/SKILL.md +1 -1
- package/bundles/antigravity-plugin/skills/warm-editorial-ui/SKILL.md +1 -1
- package/bundles/antigravity-plugin/skills/webapp-testing/SKILL.md +1 -1
- package/bundles/antigravity-plugin/skills/windows-deployment/SKILL.md +1 -1
- package/bundles/antigravity-plugin/warm_start_agy.py +138 -42
- package/bundles/antigravity-plugin-extras/plugin.json +1 -1
- package/bundles/antigravity-plugin-extras/skills/_registry.md +61 -61
- package/bundles/antigravity-plugin-extras/skills/agent-md-refactor/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/agent-orchestration/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/algorithmic-art/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/api-client-patterns/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/architecture-diagram/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/architecture-document/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/artifacts-builder/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/ascii-art/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/aws-cdk-development/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/aws-cost-operations/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/aws-serverless-eda/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/backend-to-frontend-handoff/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/banner-design/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/brand-design/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/brand-guidelines/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/brand-voice/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/building-ai-agent-on-cloudflare/SKILL.md +3 -7
- package/bundles/antigravity-plugin-extras/skills/building-mcp-server-on-cloudflare/SKILL.md +3 -7
- package/bundles/antigravity-plugin-extras/skills/canvas-design/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/changelog-generator/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/code-explainer/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/component-testing/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/cross-review/SKILL.md +10 -2
- package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/data-loader/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/data-validation/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/deploy-local/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/design-md/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/design-system-tokens/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/developer-growth-analysis/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/doc-coauthoring/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/documentation-analyzer/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/enterprise-dashboard-aesthetic-system/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/file-organizer/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/game-changing-features/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/golden-nuggets/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/golden-plan/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/hld/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/internal-comms/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/jira-issues/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/lld/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/llm-application-dev/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/mcp-builder/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/monorepo/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/nextjs-app-router/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/observability/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/performance-testing/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/popular-web-designs/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/prd-to-code/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/react-useeffect/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/receiving-code-review/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/responsive-mobile-native/SKILL.md +4 -9
- package/bundles/antigravity-plugin-extras/skills/safe-cleanup/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/schema-migration/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/setup-project-ai/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/shadcn-radix/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/sketch/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/streamlit-dev/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/theme-factory/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/ui-styling-patterns/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/understand-anything/SKILL.md +5 -9
- package/bundles/antigravity-plugin-extras/skills/update-readme/SKILL.md +1 -1
- package/bundles/antigravity-plugin-extras/skills/word-cloud/SKILL.md +1 -1
- package/bundles/codex/.codex/skills/coding/api-design/SKILL.md +1 -1
- package/bundles/codex/.codex/skills/coding/backend-development/SKILL.md +1 -1
- package/bundles/codex/.codex/skills/coding/code-review/SKILL.md +1 -1
- package/bundles/codex/.codex/skills/coding/codebase-audit/SKILL.md +1 -1
- package/bundles/codex/.codex/skills/coding/dashboard-perf-sweep/SKILL.md +1 -1
- package/bundles/codex/.codex/skills/coding/error-handling/SKILL.md +1 -1
- package/bundles/codex/.codex/skills/coding/python/SKILL.md +1 -1
- package/bundles/codex/.codex/skills/coding/sql/SKILL.md +1 -1
- package/bundles/codex/.codex/skills/data/database-design/SKILL.md +1 -1
- package/bundles/codex/.codex/skills/data/db-diagram/SKILL.md +1 -1
- package/bundles/codex/.codex/skills/devops/adopt-app/SKILL.md +1 -1
- package/bundles/codex/.codex/skills/devops/ci-cd-pipeline/SKILL.md +1 -1
- package/bundles/codex/.codex/skills/devops/port-to-github/SKILL.md +1 -1
- package/bundles/codex/.codex/skills/devops/safe-cleanup/SKILL.md +1 -1
- package/bundles/codex/.codex/skills/devops/using-git-worktrees/SKILL.md +1 -1
- package/bundles/codex/.codex/skills/devops/windows-deployment/SKILL.md +1 -1
- package/bundles/codex/.codex/skills/docs/code-documentation/SKILL.md +1 -1
- package/bundles/codex/.codex/skills/docs/confluence-hla/SKILL.md +1 -1
- package/bundles/codex/.codex/skills/docs/explainer-doc/SKILL.md +1 -1
- package/bundles/codex/.codex/skills/docs/tech-explainer/SKILL.md +7 -12
- package/bundles/codex/.codex/skills/docs/technical-writing/SKILL.md +1 -1
- package/bundles/codex/.codex/skills/frontend/css-architecture/SKILL.md +1 -1
- package/bundles/codex/.codex/skills/frontend/frontend-design/SKILL.md +1 -1
- package/bundles/codex/.codex/skills/frontend/react-dev/SKILL.md +1 -1
- package/bundles/codex/.codex/skills/frontend/ui-review/SKILL.md +1 -1
- package/bundles/codex/.codex/skills/frontend/warm-editorial-ui/SKILL.md +1 -1
- package/bundles/codex/.codex/skills/media/mermaid-diagrams/SKILL.md +1 -1
- package/bundles/codex/.codex/skills/media/particle-art/SKILL.md +1 -1
- package/bundles/codex/.codex/skills/testing/playwright/SKILL.md +1 -1
- package/bundles/codex/.codex/skills/testing/test-strategy/SKILL.md +1 -1
- package/bundles/codex/.codex/skills/testing/webapp-testing/SKILL.md +1 -1
- package/bundles/codex/.codex/skills/workflow/advisory-hub/SKILL.md +1 -1
- package/bundles/codex/.codex/skills/workflow/skill-creator/SKILL.md +1 -1
- package/bundles/codex/AGENTS.md +5 -1
- package/bundles/manifest.json +3 -3
- package/package.json +1 -1
|
@@ -96,10 +96,18 @@ as a diff that silently is not read. Name a provider explicitly only when you ha
|
|
|
96
96
|
## Interpret the exit code
|
|
97
97
|
- **0 — REVIEW: CLEAN** → no blocking issues. Proceed.
|
|
98
98
|
- **1 — REVIEW: BLOCKING** → read the printed findings, then **FIX each blocking item** (or explicitly
|
|
99
|
-
justify why one is a false positive). Re-run
|
|
99
|
+
justify why one is a false positive). Re-run once. A second BLOCKING goes to the owner (rule 3).
|
|
100
100
|
- **4 — error** → no verdict parsed, or a git/endpoint failure. Read stderr; do NOT treat as clean.
|
|
101
101
|
- **3 — misconfigured** → `REVIEW_API_KEY` is unset. Set it (see Prerequisite) and re-run.
|
|
102
102
|
|
|
103
|
+
## Three rules: one attempt, one review
|
|
104
|
+
1. **Think before you send.** Before a task goes to any coder, write its edge cases and check the facts it depends on (one query or one file read).
|
|
105
|
+
2. **Run it before review.** The coder runs the same checks as CI (name the exact commands in the task). Then run the change once on real data.
|
|
106
|
+
3. **Review once.** Use whatever reviewer is available. Stop at the first CLEAN. After two blocking reviews, ask the owner.
|
|
107
|
+
|
|
108
|
+
A diff over the batch ceiling is split into batches. Each batch prompt lists every file in the
|
|
109
|
+
change, so a batch does not report the others as missing.
|
|
110
|
+
|
|
103
111
|
## Rules
|
|
104
112
|
- Read-only second opinion — the tool never edits, commits, or pushes. YOU apply fixes in the main thread.
|
|
105
113
|
- Treat exit **3 or 4** as blocking-unknown, never as approval (the tool is fail-closed by
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: css-architecture
|
|
3
|
-
description: CSS architecture
|
|
3
|
+
description: "CSS architecture: design tokens, custom properties, Tailwind config, CSS Modules, container queries, dark mode, fluid typography, animation. Covers how to implement styling; frontend-design covers what to achieve."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# CSS Architecture Skill
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: dashboard-perf-sweep
|
|
3
3
|
context: fork
|
|
4
|
-
description: Re-measure
|
|
4
|
+
description: Re-measure dashboard/API endpoints for load-time regressions and decide by checklist if a slow one needs the rs-kit refresher, an index, keyset paging, gzip, or nothing. Use when the user says "sweep dashboard performance", "check if this app needs rs-kit", "re-measure the perf tracker", "is this endpoint a refresher candidate", or dashboard-performance-tracker.md is stale. Read-only.
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# dashboard-perf-sweep — re-measure, then judge the shape, not just the time
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: database-design
|
|
3
|
-
description: Database schema design,
|
|
3
|
+
description: Database schema design, migrations and query optimization for PostgreSQL, MySQL and NoSQL.
|
|
4
4
|
source: wshobson/agents
|
|
5
5
|
license: MIT
|
|
6
6
|
---
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: db-diagram
|
|
3
3
|
context: fork
|
|
4
|
-
description:
|
|
4
|
+
description: Diagram a SQL artifact (stored proc, view, query, .sql file, table) as Mermaid or Excalidraw. Use when the user says "diagram this query/proc/view/schema", "explain this SQL visually", "draw the ER diagram", "show me the data flow of this stored proc", "/mermaid-db", or "/excalidraw-db". Read-only.
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# db-diagram — explain SQL as a diagram
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: decide
|
|
3
|
+
description: Record a decision in one step — .caddis/decisions/<date>-<slug>.md
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /caddis:decide — record a decision, once, before it gets re-litigated
|
|
7
|
+
|
|
8
|
+
A decision made mid-task and never written down gets re-argued the next time someone hits the same
|
|
9
|
+
fork. This command writes it as a single-step decision record.
|
|
10
|
+
|
|
11
|
+
The request is **$ARGUMENTS** — the decision, in a few words.
|
|
12
|
+
|
|
13
|
+
## Step 1 — build the slug
|
|
14
|
+
Lower-case the decision text, replace each run of characters outside `a-z0-9` with one `-`, trim
|
|
15
|
+
`-` from both ends, cap at 60 characters (`Use SQLite, not Postgres` → `use-sqlite-not-postgres`). If nothing is left after cleaning, **stop and ask the user for a shorter title** — the
|
|
16
|
+
one question this command may ask.
|
|
17
|
+
|
|
18
|
+
## Step 2 — pick the path
|
|
19
|
+
`.caddis/decisions/<YYYY-MM-DD>-<slug>.md`, using today's date (UTC). Create
|
|
20
|
+
`.caddis/decisions/` first if it does not exist.
|
|
21
|
+
|
|
22
|
+
**If that exact path already exists, refuse — never overwrite it.** Print the existing path and
|
|
23
|
+
stop; the user can open it directly, or pick different (more specific) decision text so the slug
|
|
24
|
+
comes out differently.
|
|
25
|
+
|
|
26
|
+
## Step 3 — write the file
|
|
27
|
+
|
|
28
|
+
```markdown
|
|
29
|
+
---
|
|
30
|
+
type: adr
|
|
31
|
+
status: accepted
|
|
32
|
+
found: <YYYY-MM-DD>
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
# <decision, verbatim>
|
|
36
|
+
|
|
37
|
+
## Context
|
|
38
|
+
<what forced the decision — the constraint, the conflicting options>
|
|
39
|
+
|
|
40
|
+
## Decision
|
|
41
|
+
<what was decided, as one plain sentence>
|
|
42
|
+
|
|
43
|
+
## Consequences
|
|
44
|
+
<what this makes easier, what it makes harder, what it rules out>
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Step 4 — verify
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
python "${CLAUDE_PLUGIN_ROOT}/scripts/caddis_gate.py" docs-check --root .
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Exit 0 means the header is valid. Do not report the item as filed until this passes.
|
|
54
|
+
|
|
55
|
+
## Step 5 — report
|
|
56
|
+
One line: the path. Nothing else.
|
|
57
|
+
|
|
58
|
+
## Rules
|
|
59
|
+
- **Never** overwrite an existing decision file. There is no ID allocator and no revision counter —
|
|
60
|
+
a changed decision is new decision text, which naturally gives it a new slug and a new file.
|
|
61
|
+
- This command records a decision already made; it does not itself weigh the options.
|
|
@@ -6,9 +6,9 @@ description: Park the current workstream on the stack and switch to a new task
|
|
|
6
6
|
# /caddis:digress — park the current task, switch, never lose the thread
|
|
7
7
|
|
|
8
8
|
You are about to leave the current task for a related-but-different one (a design decision, a sub-feature,
|
|
9
|
-
or a blocker that must be fixed first). This command **
|
|
10
|
-
neither you nor the user has to remember and re-state it later — `/catchup
|
|
11
|
-
resume point, and every SessionStart
|
|
9
|
+
or a blocker that must be fixed first). This command **saves the original task as a workstream relay** (`.caddis/relay/<name>.md`) so
|
|
10
|
+
neither you nor the user has to remember and re-state it later — `/catchup <name>` loads it back with its exact
|
|
11
|
+
resume point, and every SessionStart lists it in the workstream index. Loading never removes it.
|
|
12
12
|
|
|
13
13
|
The reason for the detour is **$ARGUMENTS** (if empty, derive a one-line reason yourself from what the
|
|
14
14
|
user just asked for).
|
|
@@ -27,30 +27,48 @@ next-not-started one).
|
|
|
27
27
|
The single next concrete action for the parked task — copy it from the plan's Tracker or from relay.md's
|
|
28
28
|
`## Next step`. Example: `next: wire the parser to the staging table (see plan Tracker row 2)`.
|
|
29
29
|
|
|
30
|
-
## Step 3 —
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
30
|
+
## Step 3 — write the workstream relay to `.caddis/relay/<name>.md`
|
|
31
|
+
Write it through the locked script, never with a plain file edit (that would skip the conflict
|
|
32
|
+
check another session relies on). Scripts are in `${CLAUDE_PLUGIN_ROOT}/scripts/` (source
|
|
33
|
+
checkout: `scripts/`).
|
|
34
|
+
|
|
35
|
+
Your session id is printed at session start as `[caddis] this session's id: <id>`; use it for
|
|
36
|
+
`session_id` and `--session-id`, never a guess.
|
|
37
|
+
|
|
38
|
+
1. `caddis_workstreams.py hash <name>` — note the printed hash (`none` for a new workstream).
|
|
39
|
+
2. Put the relay below in a temp file, then
|
|
40
|
+
`caddis_workstreams.py write <name> <temp-file> --expected-hash <hash>`. Exit 1 prints the diff
|
|
41
|
+
against what another session saved and writes nothing: show it, merge, retry with the new hash.
|
|
42
|
+
3. `caddis_workstreams.py render-index --session-id <id> --branch <branch>` refreshes `.caddis/relay.md`.
|
|
43
|
+
If it refuses a legacy `.caddis/relay.md`, or an old `.caddis/workstreams.json` stack exists, run
|
|
44
|
+
`caddis_workstreams.py migrate-legacy` once (it backs up both), then retry.
|
|
45
|
+
|
|
46
|
+
Relay content, with the standard frontmatter:
|
|
47
|
+
|
|
48
|
+
```markdown
|
|
49
|
+
---
|
|
50
|
+
type: relay
|
|
51
|
+
workstream: <name>
|
|
52
|
+
branch: <branch>
|
|
53
|
+
session_id: <session_id>
|
|
54
|
+
plan: <plan>
|
|
55
|
+
generated:
|
|
56
|
+
at: <now, ISO-8601 UTC>
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
# Relay — <name>
|
|
60
|
+
|
|
61
|
+
## Current workstream
|
|
62
|
+
<Active plan path + phase>
|
|
63
|
+
|
|
64
|
+
## Next step (exact)
|
|
65
|
+
<the one-line next action from Step 2>
|
|
43
66
|
```
|
|
44
67
|
|
|
45
|
-
-
|
|
46
|
-
`repo` to that repo's absolute path (the digression spanned repos).
|
|
47
|
-
- Read the file (create `{"version": 1, "stack": []}` if absent). **Idempotency guard:** if the
|
|
48
|
-
top-of-stack frame's `plan` already equals the plan you are parking, UPDATE that frame in place (refresh
|
|
49
|
-
`phase`, `resumePointer`, `reason`, `pushedAt`) instead of pushing a duplicate. Otherwise APPEND the new
|
|
50
|
-
frame. Preserve any unknown fields already present. Write the whole file back (pretty-printed is fine).
|
|
68
|
+
- **Idempotency:** parking the same workstream again replaces its relay through the same hash-checked write; it never duplicates it.
|
|
51
69
|
|
|
52
70
|
## Step 4 — confirm, then continue
|
|
53
|
-
Tell the user: `Parked: <
|
|
71
|
+
Tell the user: `Parked workstream: <name>. Saved to .caddis/relay/<name>.md. Now switching to: <the new task>.` Then proceed with whatever the
|
|
54
72
|
user asked — the digression IS the new work.
|
|
55
73
|
|
|
56
74
|
## Rules
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: error-handling
|
|
3
|
-
description: Error handling
|
|
3
|
+
description: "Error handling for Python and TypeScript: error hierarchies, custom exceptions, result types, retries, circuit breakers, error boundaries, logging, user-facing messages."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Error Handling Skill
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: explainer-doc
|
|
3
3
|
context: fork
|
|
4
|
-
description:
|
|
4
|
+
description: Hand-off doc for a team that did NOT do the investigation (vendor, contractor, another team) — the "stranger must follow it alone" case. Use when the user says "write a spec for the X team", "document this for someone outside the team", "explainer doc", "implementation spec for a vendor", or "hand this off to Y". Not for readers with full context.
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# explainer-doc — write for the reader who has no other context
|
|
@@ -257,6 +257,11 @@ yourself (relay + Tracker) before stopping — do not hand back "run `/caddis:ha
|
|
|
257
257
|
<same structure>
|
|
258
258
|
|
|
259
259
|
## Execution protocol (standing rules — this plan is the memory, not anyone's head)
|
|
260
|
+
Three rules: one attempt, one review.
|
|
261
|
+
1. **Think before you send.** Before a task goes to any coder, write its edge cases and check the facts it depends on (one query or one file read).
|
|
262
|
+
2. **Run it before review.** The coder runs the same checks as CI (name the exact commands in the task). Then run the change once on real data.
|
|
263
|
+
3. **Review once.** Use whatever reviewer is available. Stop at the first CLEAN. After two blocking reviews, ask the owner.
|
|
264
|
+
|
|
260
265
|
- One phase at a time: read this plan → run the phase on its **Lane** → RED→GREEN→VERIFY→CROSS-REVIEW→
|
|
261
266
|
COMMIT → update the **Tracker** row. The Tracker is the resume signal for every future session.
|
|
262
267
|
- **Session boundaries:** the executor WRITES the handoff (durable `relay.md` + Tracker) after any
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: frontend-design
|
|
3
|
-
description: Create distinctive, production-grade frontend interfaces
|
|
3
|
+
description: Create distinctive, production-grade frontend interfaces that avoid generic AI aesthetics. Use when the user asks to build web components, pages, artifacts, posters or applications.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Frontend Design Skill
|
|
@@ -8,6 +8,18 @@ description: Deterministic headless preflight — validates a plan against the a
|
|
|
8
8
|
Validate the implementation plan at **$ARGUMENTS** against the ACTUAL codebase before any code is
|
|
9
9
|
written.
|
|
10
10
|
|
|
11
|
+
**Which plan.** An explicit plan argument always wins. Only when `$ARGUMENTS` is empty, find the
|
|
12
|
+
active plan:
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
python "${CLAUDE_PLUGIN_ROOT}/scripts/caddis_todo.py" active-plan
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
- **Exit 0** → stdout is the plan path. Say which plan you picked ("No plan given; using
|
|
19
|
+
`<path>`.") and validate it.
|
|
20
|
+
- **Exit 3** → no single active plan. Do not ask: name the candidates it printed on stderr (or
|
|
21
|
+
"none") and end with `PREFLIGHT: FAIL`.
|
|
22
|
+
|
|
11
23
|
This command exists because `/caddis:preflight` is a model-invoked `context: fork` **SKILL**, and
|
|
12
24
|
skills do not reliably activate under headless `claude -p` — proven live (2026-07-08): a run saw
|
|
13
25
|
the raw `/caddis:code-review <sha-range>` text, didn't recognise it, and replied "I don't see a
|
|
@@ -5,7 +5,7 @@ description: End-of-session handoff — capture exact state so the next session
|
|
|
5
5
|
|
|
6
6
|
# /handoff — stop cleanly, write the resume doc
|
|
7
7
|
|
|
8
|
-
You are ending a work session. Produce/refresh
|
|
8
|
+
You are ending a work session. Produce/refresh this workstream's resume doc (`.caddis/relay/<name>.md`) so the next session
|
|
9
9
|
(you, a future you, or another agent on any tool) can resume immediately. This is the anti-context-rot checkpoint.
|
|
10
10
|
|
|
11
11
|
## Step 1 — capture learnings FIRST (knowledge-transfer)
|
|
@@ -103,21 +103,42 @@ Nothing to say is the normal answer. Say nothing and move on — this must not b
|
|
|
103
103
|
<!-- /shared:harness-friction-question -->
|
|
104
104
|
|
|
105
105
|
## Step 3 — write the resume doc (overwrite) with exactly these sections
|
|
106
|
-
> **Where to write:**
|
|
107
|
-
>
|
|
108
|
-
>
|
|
109
|
-
> per-branch file automatically when it exists, then `.caddis/relay.md`, then the legacy
|
|
110
|
-
> `.claude/relay/<branch>.md` and root `relay.md` (back-compat during the migration).
|
|
106
|
+
> **Where to write:** this session's own workstream relay, `.caddis/relay/<name>.md`, through the
|
|
107
|
+
> locked script — never with a plain file edit, which would skip the conflict check. `.caddis/relay.md`
|
|
108
|
+
> is a generated index of all workstreams; do not write it by hand.
|
|
111
109
|
>
|
|
112
|
-
>
|
|
113
|
-
>
|
|
110
|
+
> Your session id is printed at session start as `[caddis] this session's id: <id>`; use it for
|
|
111
|
+
> `session_id` and `--session-id`. Never guess one: a wrong id disables session matching.
|
|
112
|
+
>
|
|
113
|
+
> 1. **Name the workstream** (active plan's `feature`, else the branch; the script prints nothing
|
|
114
|
+
> on the default branch with no plan — then ask the user for a short name):
|
|
115
|
+
> `python "${CLAUDE_PLUGIN_ROOT}/scripts/caddis_workstreams.py" resolve --plan <feature> --branch <branch> --default-branch <main>`
|
|
116
|
+
> 2. **Legacy repo:** if `.caddis/relay.md` exists and does not start with
|
|
117
|
+
> `<!-- caddis-workstream-index-v1 -->`, or an old `/digress` stack `.caddis/workstreams.json`
|
|
118
|
+
> exists, run `caddis_workstreams.py migrate-legacy` once first.
|
|
119
|
+
> It backs up the old file and stops without deleting anything on a conflict; report a conflict
|
|
120
|
+
> to the user and stop.
|
|
121
|
+
> 3. **Read the stored version's hash** before you compose: `caddis_workstreams.py hash <name>`
|
|
122
|
+
> (prints `none` for a new workstream).
|
|
123
|
+
> 4. **Write** the relay below to a temp file, then
|
|
124
|
+
> `caddis_workstreams.py write <name> <temp-file> --expected-hash <hash>`. Exit 1 means another
|
|
125
|
+
> session changed the relay since step 3: it prints the diff and writes nothing. Show the diff,
|
|
126
|
+
> merge by hand, and retry with the new hash. Never force it.
|
|
127
|
+
> 5. **Refresh the index:** `caddis_workstreams.py render-index --session-id <id> --branch <branch>`.
|
|
128
|
+
>
|
|
129
|
+
> (Source checkout: `scripts/caddis_workstreams.py`.) A repo still on the pre-rename `.claudster/`
|
|
130
|
+
> won't see this relay until it's converted — `/caddis:migrate-dir` does that.
|
|
114
131
|
|
|
115
132
|
```markdown
|
|
116
133
|
---
|
|
117
134
|
type: relay
|
|
118
135
|
workstream: <name>
|
|
119
136
|
branch: <branch>
|
|
120
|
-
|
|
137
|
+
plan: <plan file name, or empty>
|
|
138
|
+
session_id: <session id>
|
|
139
|
+
generated:
|
|
140
|
+
by: <model>
|
|
141
|
+
at: <ISO time>
|
|
121
142
|
---
|
|
122
143
|
|
|
123
144
|
# Relay — <feature>
|
|
@@ -148,7 +169,7 @@ advisory-context audit: <N candidates → M gaps → landed in <path>> | n/a (no
|
|
|
148
169
|
|
|
149
170
|
## Resume prompt
|
|
150
171
|
\`\`\`
|
|
151
|
-
Read relay
|
|
172
|
+
Read .caddis/relay/<name>.md, then the plan it points to. Continue from <phase/step>. Next action: <exact>.
|
|
152
173
|
\`\`\`
|
|
153
174
|
```
|
|
154
175
|
|
|
@@ -168,7 +189,7 @@ handoff over it.
|
|
|
168
189
|
## Step 5 — check the handover you just wrote
|
|
169
190
|
|
|
170
191
|
```
|
|
171
|
-
python "${CLAUDE_PLUGIN_ROOT}/scripts/caddis_gate.py" handover-check --doc .caddis/relay
|
|
192
|
+
python "${CLAUDE_PLUGIN_ROOT}/scripts/caddis_gate.py" handover-check --doc .caddis/relay/<name>.md --max-chars 4000
|
|
172
193
|
```
|
|
173
194
|
(falls back to `scripts/caddis_gate.py` in a source checkout; degrades open when the script is
|
|
174
195
|
missing.) **Run it in the repo the handover is about** — a handover describing another repo will
|
|
@@ -181,13 +202,53 @@ incoming Hub looking for a prompt that was never written. Fix what it lists, the
|
|
|
181
202
|
It also notes any generated artefact committed before its generator last changed. That is advisory,
|
|
182
203
|
not blocking — but do not quote a report the note names without rebuilding it first.
|
|
183
204
|
|
|
205
|
+
## Step 6 — reconcile task rows from session-state
|
|
206
|
+
Run task reconciliation against the newest session-state file:
|
|
207
|
+
```
|
|
208
|
+
python "${CLAUDE_PLUGIN_ROOT}/scripts/caddis_todo.py" reconcile --session-state .caddis/session-state/<session-id>.md
|
|
209
|
+
```
|
|
210
|
+
This marks ad-hoc to-do items done by metadata ID; it never edits the Tracker and ignores phase rows.
|
|
211
|
+
|
|
212
|
+
## Step 6b — record usage and tidy session state
|
|
213
|
+
The Stop hook only writes the session-state file. These two used to run on every turn; they run
|
|
214
|
+
here, once:
|
|
215
|
+
```
|
|
216
|
+
python "${CLAUDE_PLUGIN_ROOT}/scripts/session_state.py" usage --session-id <session-id>
|
|
217
|
+
python "${CLAUDE_PLUGIN_ROOT}/scripts/session_state.py" prune
|
|
218
|
+
```
|
|
219
|
+
`usage` finds this session's transcript by its id and appends one token-and-skill record to
|
|
220
|
+
`.caddis/usage-log.jsonl`, which `/usage-review` reads. Pass `--transcript <path>` if you know the
|
|
221
|
+
path and it is not under the Claude config folder. `prune` keeps the newest 8 files in
|
|
222
|
+
`.caddis/session-state/`; run it after Step 6, which reads this session's file. Include the
|
|
223
|
+
`[USAGE]` line in your output. Both always exit 0; if the script is missing, skip this step.
|
|
224
|
+
|
|
225
|
+
Then list old local state (falls back to `scripts/caddis_tidy.py`; skip if missing):
|
|
226
|
+
```
|
|
227
|
+
python "${CLAUDE_PLUGIN_ROOT}/scripts/caddis_tidy.py" --prune
|
|
228
|
+
```
|
|
229
|
+
It only lists: session-state files older than 7 days, logs over 5 MB to rotate, and (report
|
|
230
|
+
only, never deleted) orphan `.lock` files and lane worktrees older than 7 days. Include its report. **Never
|
|
231
|
+
add `--apply` yourself**; deleting is the user's choice. If they ask, run `--prune --apply`.
|
|
232
|
+
|
|
233
|
+
## Step 7 — push prompt (interactive only)
|
|
234
|
+
If this is an interactive session, ask the user every time — never reuse an earlier answer:
|
|
235
|
+
`Push this note for another machine? (y/N)`
|
|
236
|
+
Only on an explicit `y` in this session, run:
|
|
237
|
+
```
|
|
238
|
+
python "${CLAUDE_PLUGIN_ROOT}/scripts/caddis_relay_git.py" push <name> --user-said-yes
|
|
239
|
+
```
|
|
240
|
+
It publishes only `.caddis/relay/<name>.md` to `refs/caddis/relay/<name>` — never the branch, the
|
|
241
|
+
index or staged files — after the secret filter passes. Report its one-line result. Anything but
|
|
242
|
+
`y` means do nothing. Headless runs never ask and never push (the script also refuses headless).
|
|
243
|
+
On the other machine, `/catchup <name>` fetches it.
|
|
244
|
+
|
|
184
245
|
## Rules
|
|
185
246
|
- **One next action, by priority ladder.** `## Next step` names exactly ONE action — not a menu. Pick it in
|
|
186
247
|
order: (1) interrupted mid-phase work → finish + commit it; else (2) the active plan's next not-started
|
|
187
248
|
phase; else (3) the top open question/decision. Everything else is context, not the next step.
|
|
188
249
|
- Only verified facts and real paths. Mark anything unconfirmed as `Unknown`.
|
|
189
250
|
- Update the plan's tracker rows too (status + last commit) — relay and tracker must agree.
|
|
190
|
-
- Don't commit unless asked. Report
|
|
251
|
+
- Don't commit unless asked. Report which `.caddis/relay/<name>.md` was written and the one next action.
|
|
191
252
|
- **Never hand off a Hub session on the strength of "the context doc is designed for this."** That is the
|
|
192
253
|
one instinct that has been measured and found wrong. Run Step 2b's audit instead.
|
|
193
254
|
- **Prune the Done section — two rules, both apply:**
|
|
@@ -198,5 +259,5 @@ not blocking — but do not quote a report the note names without rebuilding it
|
|
|
198
259
|
are more, collapse the oldest into one summary line:
|
|
199
260
|
`- [N prior milestones — see git log for full history]`
|
|
200
261
|
Keep the 8 most recent bullets below it.
|
|
201
|
-
Target: relay
|
|
262
|
+
Target: the relay stays at most 4,000 characters (handover-check enforces it). inject_relay.py caps injection at 120 lines as a
|
|
202
263
|
safety net, but the file itself should never reach that ceiling.
|
|
@@ -7,6 +7,19 @@ description: Headless plan executor — implement an approved plan phase-by-phas
|
|
|
7
7
|
|
|
8
8
|
Implement the plan at **$ARGUMENTS** (falls back to the `DOCKET_PLAN` env var if `$ARGUMENTS` is empty).
|
|
9
9
|
|
|
10
|
+
**Which plan.** An explicit plan always wins: `$ARGUMENTS` first, then the `DOCKET_PLAN` env var
|
|
11
|
+
(it counts as an explicit argument). Only when both are empty, find the active plan:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
python "${CLAUDE_PLUGIN_ROOT}/scripts/caddis_todo.py" active-plan
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
- **Exit 0** → stdout is the plan path. Say which plan you picked ("No plan given; using
|
|
18
|
+
`<path>`.") and implement it.
|
|
19
|
+
- **Exit 3** → no single active plan. Do not guess and do not ask. Stop before any change, list the
|
|
20
|
+
candidates it printed on stderr (or "none") in the review file, and end with the
|
|
21
|
+
`"implemented":false` JSON block from step 6.
|
|
22
|
+
|
|
10
23
|
This command is the **docket Implement lane's driver**. It is spawned autonomously by the docket runner —
|
|
11
24
|
**no human is present**. It does not design or re-plan: the plan is the intelligence, you are the executor.
|
|
12
25
|
The runner independently re-runs the tests and a fresh code-review after you finish and decides success
|
|
@@ -35,6 +48,14 @@ depend on them:
|
|
|
35
48
|
AskUserQuestion. Where the plan leaves a genuine gap, make the smallest reasonable assumption, record it
|
|
36
49
|
in the review file, and proceed — asking is always wrong here.
|
|
37
50
|
|
|
51
|
+
## Three rules: one attempt, one review
|
|
52
|
+
1. **Think before you send.** Before a task goes to any coder, write its edge cases and check the facts it depends on (one query or one file read).
|
|
53
|
+
2. **Run it before review.** The coder runs the same checks as CI (name the exact commands in the task). Then run the change once on real data.
|
|
54
|
+
3. **Review once.** Use whatever reviewer is available. Stop at the first CLEAN. After two blocking reviews, ask the owner.
|
|
55
|
+
|
|
56
|
+
This run is headless, so "ask the owner" means: stop the phase, do not commit it, and record the
|
|
57
|
+
two blocking reviews in the review file.
|
|
58
|
+
|
|
38
59
|
## What to do
|
|
39
60
|
|
|
40
61
|
**1. Read the plan.** Load the plan file (`$ARGUMENTS` / `DOCKET_PLAN`). Read its `## Phases`, `## Affected
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: mermaid-diagrams
|
|
3
3
|
context: fork
|
|
4
|
-
description:
|
|
4
|
+
description: "Software diagrams in Mermaid: class, sequence, flowchart, ERD, C4, state, git graph, gantt. Use for domain models, API flows, processes and database schemas."
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Mermaid Diagramming
|
|
@@ -20,6 +20,14 @@ An unknown flag returns a usage error.
|
|
|
20
20
|
The exit codes follow `caddis_exit.py`: 0 clean, 1 blocked, 2 advisory, 3 could not run,
|
|
21
21
|
4 error or bad usage. In particular, `caddis_adhoc.py` returns 4 for bad usage.
|
|
22
22
|
|
|
23
|
+
## Three rules: one attempt, one review
|
|
24
|
+
1. **Think before you send.** Before a task goes to any coder, write its edge cases and check the facts it depends on (one query or one file read).
|
|
25
|
+
2. **Run it before review.** The coder runs the same checks as CI (name the exact commands in the task). Then run the change once on real data.
|
|
26
|
+
3. **Review once.** Use whatever reviewer is available. Stop at the first CLEAN. After two blocking reviews, ask the owner.
|
|
27
|
+
|
|
28
|
+
`/mmr` is for handing a task to another model, not for normal reviews. For a normal review, use
|
|
29
|
+
`/cross-review`.
|
|
30
|
+
|
|
23
31
|
## Natural Language Triggers
|
|
24
32
|
You can trigger MMR naturally without typing the full slash command:
|
|
25
33
|
- *"Run this on another lane: <task>"* → `/mmr "<task>"`
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: particle-art
|
|
3
3
|
version: 1.0.0
|
|
4
|
-
description:
|
|
4
|
+
description: Zero-dependency animated particle art as a React/Next.js component (spring physics, CSS-variable theming, mouse interaction). Use for animated hero art or a living logo, or on "particles that form a shape", "particle animation", "node network", "animated letter/logo/initials", "living letter", "morphing particles", "constellation", "neural net art", "dot field", "stipple portrait", "halftone animation", "ASCII art animation", "background art for my site", or "art that reacts to mouse".
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Particle Art Generator
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: playwright
|
|
3
3
|
context: fork
|
|
4
|
-
description:
|
|
4
|
+
description: "Browser automation and testing with Playwright: auto-detects dev servers; tests pages, forms, logins, links, screenshots and responsive layouts. Use to test websites or automate any browser task."
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
**IMPORTANT - Path Resolution:**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: port-to-github
|
|
3
|
-
description:
|
|
3
|
+
description: Port an app or repo to GitHub from any source (git server, local folder, UNC share, Windows box over WinRM) — all branches and tags, SHA-verified, CI translated, history kept source-only, deploy cut over with rollback. Use when the user says "move this app to GitHub", "port X to GitHub", "migrate from Gitea", "put this folder on GitHub", "this app only exists on the server", "import the repo from the prod box", "keep binaries / MariaDB / PHP out of the repo", "check the repo only holds source", or "cut the deploy over to GitHub".
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# port-to-github
|
|
@@ -98,6 +98,20 @@ Watch the PR's checks job-by-job until completion:
|
|
|
98
98
|
- If any check fails (red check): report the failure, classify the cause, and **stop before merging**.
|
|
99
99
|
Do not merge a failing PR. Apply the minimum source fix and re-push.
|
|
100
100
|
|
|
101
|
+
## Step 6b — Deploy boundary (before the merge; nothing skips it)
|
|
102
|
+
|
|
103
|
+
The PR exists and is green. Run this before the merge:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
python "${CLAUDE_PLUGIN_ROOT}/scripts/caddis_gate.py" deploy-boundary --repo .
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Exit **0** — go on to Step 7. Exit **1** (a push to the default branch deploys to production), exit
|
|
110
|
+
**3** (it cannot tell), or any other non-zero code — **stop. Do not merge.** Hand the merge to the
|
|
111
|
+
owner with the PR link; skip Steps 7–9. Show the gate's output and end the command. This holds
|
|
112
|
+
whatever confirmation was given: `--yes`, a confirm flag, "just merge it" or an earlier approval
|
|
113
|
+
cannot bypass it.
|
|
114
|
+
|
|
101
115
|
## Step 7 — Merge to default branch
|
|
102
116
|
|
|
103
117
|
Once all required checks are **green**, there are no merge conflicts, and review requirements are satisfied:
|
|
@@ -143,6 +157,7 @@ Cleanup: remote branch deleted / local branch deleted / backup ref dropped
|
|
|
143
157
|
## Rules
|
|
144
158
|
|
|
145
159
|
- Never merge a PR whose required checks are red or absent.
|
|
160
|
+
- Never merge unless `deploy-boundary` exited 0 on this run. No confirmation overrides it.
|
|
146
161
|
- Never delete a feature branch before its merge is confirmed and any deploy validated.
|
|
147
162
|
- Never `git add -A` without reviewing `git status` first (stage named files only).
|
|
148
163
|
- Never force-push without a `backup/*-preship` recovery ref; force pushes are `--force-with-lease` only.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: python-development
|
|
3
|
-
description: Modern Python
|
|
3
|
+
description: Modern Python 3.12+ (Django, FastAPI, async) with production best practices. Use for Python projects, APIs, data processing or scripts.
|
|
4
4
|
source: wshobson/agents
|
|
5
5
|
license: MIT
|
|
6
6
|
---
|