@caddis/cli 0.4.34 → 0.4.36
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 +210 -6
- package/bundles/antigravity-plugin/scripts/caddis_inventory.py +9 -9
- package/bundles/antigravity-plugin/scripts/caddis_lanes.py +262 -1
- package/bundles/antigravity-plugin/scripts/caddis_relay_git.py +159 -0
- package/bundles/antigravity-plugin/scripts/caddis_routing.py +103 -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 +35 -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/cloud-phases/SKILL.md +185 -0
- 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 +20 -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 +31 -2
- 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 +33 -2
- 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 +27 -7
- package/bundles/antigravity-plugin/skills/ship-merge/SKILL.md +36 -3
- package/bundles/antigravity-plugin/skills/ship-pr/SKILL.md +6 -1
- 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
|
@@ -42,6 +42,13 @@ import subprocess
|
|
|
42
42
|
import sys
|
|
43
43
|
from pathlib import Path
|
|
44
44
|
|
|
45
|
+
# Shared header reader. setup_project_ai copies this checker into a project's scripts/ without
|
|
46
|
+
# it, so fall back to this file's own top-level field reader rather than crashing there.
|
|
47
|
+
try:
|
|
48
|
+
from caddis_frontmatter import parse as _parse_header
|
|
49
|
+
except ImportError: # pragma: no cover - exercised by the copied-alone setup test
|
|
50
|
+
_parse_header = None
|
|
51
|
+
|
|
45
52
|
# Shared per-repo config reader + artifact-dir resolution (fail-open). Fall back to shims if it's
|
|
46
53
|
# ever absent, so the gate degrades to baked-in defaults rather than crashing.
|
|
47
54
|
try:
|
|
@@ -210,6 +217,17 @@ def frontmatter_block(text: str) -> str | None:
|
|
|
210
217
|
return match.group(1) if match else None
|
|
211
218
|
|
|
212
219
|
|
|
220
|
+
def _header_fields(text: str) -> dict:
|
|
221
|
+
"""Top-level header fields: the shared reader when present, else ``type``/``status``/``stale_after``."""
|
|
222
|
+
if _parse_header is not None:
|
|
223
|
+
return _parse_header(text)
|
|
224
|
+
block = frontmatter_block(text)
|
|
225
|
+
if block is None:
|
|
226
|
+
return {}
|
|
227
|
+
fields = ((key, _top_level_field(block, key)) for key in ("type", "status", "stale_after"))
|
|
228
|
+
return {key: _scalar(field[0]) for key, field in fields if field is not None}
|
|
229
|
+
|
|
230
|
+
|
|
213
231
|
def _scalar(raw: str) -> str:
|
|
214
232
|
"""A frontmatter scalar with its trailing ``# comment`` and surrounding quotes removed."""
|
|
215
233
|
return re.sub(r"\s+#.*$", "", raw).strip().strip("'\"").strip()
|
|
@@ -304,13 +322,10 @@ def misfiled_hub_spawns(root: Path) -> list[str]:
|
|
|
304
322
|
if rel.startswith(HUB_REPORTS_DIR):
|
|
305
323
|
continue
|
|
306
324
|
try:
|
|
307
|
-
|
|
325
|
+
meta = _header_fields(f.read_text(encoding="utf-8", errors="ignore"))
|
|
308
326
|
except OSError:
|
|
309
327
|
continue
|
|
310
|
-
if
|
|
311
|
-
continue
|
|
312
|
-
field = _top_level_field(block, "type")
|
|
313
|
-
if field and _scalar(field[0]).strip().lower() == "hub-spawn":
|
|
328
|
+
if str(meta.get("type", "")).strip().lower() == "hub-spawn":
|
|
314
329
|
out.append(rel)
|
|
315
330
|
return out
|
|
316
331
|
|
|
@@ -325,11 +340,11 @@ def trust_signal_warnings(text: str) -> list[str]:
|
|
|
325
340
|
block = frontmatter_block(text)
|
|
326
341
|
if block is None:
|
|
327
342
|
return []
|
|
343
|
+
meta = _header_fields(text)
|
|
328
344
|
warns: list[str] = []
|
|
329
345
|
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
value = _scalar(status[0])
|
|
346
|
+
if "status" in meta:
|
|
347
|
+
value = _scalar(str(meta["status"]))
|
|
333
348
|
# Only a single bare token is vetted. caddis has long-standing docs whose status is a
|
|
334
349
|
# sentence ("DRAFT — approved shape (Option 2), awaiting go"); vetting those would nag
|
|
335
350
|
# about prose that predates the field's vocabulary. A one-word typo still surfaces.
|
|
@@ -339,9 +354,8 @@ def trust_signal_warnings(text: str) -> list[str]:
|
|
|
339
354
|
f"({', '.join(sorted(TRUST_STATUS_VALUES))})"
|
|
340
355
|
)
|
|
341
356
|
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
value = _scalar(stale[0])
|
|
357
|
+
if "stale_after" in meta:
|
|
358
|
+
value = _scalar(str(meta["stale_after"]))
|
|
345
359
|
if not value:
|
|
346
360
|
warns.append("`stale_after:` is empty — give an ISO date (YYYY-MM-DD) or drop the field")
|
|
347
361
|
elif not (_ISO_DATE_RE.match(value) or _ISO_DATETIME_RE.match(value)):
|
|
@@ -520,8 +534,8 @@ _DOCMAP_SCAFFOLD = """\
|
|
|
520
534
|
> one line each: what it is and when to read it. A router, not a summary; detail lives in the linked
|
|
521
535
|
> docs. KB notes live beside this file in `{artifact_dir}/kb/`.
|
|
522
536
|
>
|
|
523
|
-
> **Discipline:** kept honest by
|
|
524
|
-
> every
|
|
537
|
+
> **Discipline:** kept honest by `check_doc_coverage.py` —
|
|
538
|
+
> every linked table row must resolve (a link to a missing file is a **hard failure**), and a KB note
|
|
525
539
|
> (`{artifact_dir}/kb/*.md`) not indexed here **warns**. Only `{artifact_dir}/kb/*.md` is governed.
|
|
526
540
|
|
|
527
541
|
## Read first
|
|
@@ -347,6 +347,22 @@ def split_diff_by_file(diff_text: str) -> list[str]:
|
|
|
347
347
|
return parts
|
|
348
348
|
|
|
349
349
|
|
|
350
|
+
def changed_paths(diff_text: str) -> list[str]:
|
|
351
|
+
"""The post-change path of every file in the diff, in diff order."""
|
|
352
|
+
paths: list[str] = []
|
|
353
|
+
for chunk in split_diff_by_file(diff_text):
|
|
354
|
+
header = chunk.split("\n", 1)[0].rstrip("\r")
|
|
355
|
+
if not header.startswith("diff --git "):
|
|
356
|
+
continue
|
|
357
|
+
rest = header[len("diff --git "):]
|
|
358
|
+
quoted = rest.rfind(' "b/')
|
|
359
|
+
if rest.endswith('"') and quoted != -1:
|
|
360
|
+
paths.append(rest[quoted + 4:-1])
|
|
361
|
+
elif " b/" in rest:
|
|
362
|
+
paths.append(rest.rsplit(" b/", 1)[1])
|
|
363
|
+
return paths
|
|
364
|
+
|
|
365
|
+
|
|
350
366
|
def batch_diff(diff_text: str, max_chars: int) -> list[str]:
|
|
351
367
|
"""Pack whole files into as few batches as possible, each under `max_chars`.
|
|
352
368
|
|
|
@@ -398,14 +414,24 @@ def current_branch(cwd: str) -> str:
|
|
|
398
414
|
return "the current branch"
|
|
399
415
|
|
|
400
416
|
|
|
401
|
-
def build_review_prompt(diff_text: str, branch: str, rng: str | None
|
|
417
|
+
def build_review_prompt(diff_text: str, branch: str, rng: str | None,
|
|
418
|
+
all_paths: list[str] | None = None) -> str:
|
|
402
419
|
"""Adversarial review prompt — ported from docket runner._review_prompt (kept in sync).
|
|
403
420
|
|
|
404
421
|
Self-contained: the criteria are inline so a real review always happens, and it ends with
|
|
405
422
|
a single machine-parseable verdict line the caller maps to an exit code.
|
|
406
423
|
"""
|
|
407
424
|
scope = rng or "the working tree (staged, unstaged and new untracked files)"
|
|
408
|
-
|
|
425
|
+
part_note = ""
|
|
426
|
+
if all_paths and len(all_paths) > len(changed_paths(diff_text)):
|
|
427
|
+
# Without the whole list, a batch reports files it cannot see as missing.
|
|
428
|
+
part_note = (
|
|
429
|
+
"This diff is one part of a larger change. The whole change touches these files:\n"
|
|
430
|
+
+ "".join(f"- {p}\n" for p in all_paths)
|
|
431
|
+
+ "Review only the files in the diff below. The other files are reviewed in other "
|
|
432
|
+
"batches; do not report them as missing.\n\n"
|
|
433
|
+
)
|
|
434
|
+
return part_note + (
|
|
409
435
|
f"Perform an adversarial code review of the changes on branch '{branch}' ({scope}). "
|
|
410
436
|
"The unified diff is provided below. Judge, in priority order: (1) correctness — logic "
|
|
411
437
|
"bugs, wrong results, missed edge cases; (2) tests — would a test fail without this "
|
|
@@ -731,7 +757,7 @@ def main(argv: list[str] | None = None, env: dict[str, str] | None = None) -> in
|
|
|
731
757
|
cannot silently shrink a diff to nothing. Returns None when a chunk that cannot be split
|
|
732
758
|
any further still fails — the abort path stays reachable.
|
|
733
759
|
"""
|
|
734
|
-
review = _try_chain(build_review_prompt(chunk, branch, args.range), label)
|
|
760
|
+
review = _try_chain(build_review_prompt(chunk, branch, args.range, whole_change), label)
|
|
735
761
|
if review is not None:
|
|
736
762
|
return [review]
|
|
737
763
|
files = split_diff_by_file(chunk)
|
|
@@ -749,6 +775,7 @@ def main(argv: list[str] | None = None, env: dict[str, str] | None = None) -> in
|
|
|
749
775
|
out += got
|
|
750
776
|
return out
|
|
751
777
|
|
|
778
|
+
whole_change = changed_paths(diff_text)
|
|
752
779
|
verdicts: list[bool | None] = []
|
|
753
780
|
for batch_no, batch in enumerate(batches, 1):
|
|
754
781
|
label = f" (batch {batch_no}/{len(batches)})" if len(batches) > 1 else ""
|
|
@@ -907,6 +907,8 @@ ARTIFACT_GITIGNORE = """\
|
|
|
907
907
|
reviews/*.html
|
|
908
908
|
usage-log.jsonl
|
|
909
909
|
agent-log.jsonl
|
|
910
|
+
usage-log.jsonl.1
|
|
911
|
+
agent-log.jsonl.1
|
|
910
912
|
.last-usage-review
|
|
911
913
|
relay.md
|
|
912
914
|
relay/
|
|
@@ -914,6 +916,9 @@ session-state.md
|
|
|
914
916
|
session-state/
|
|
915
917
|
context-window.json
|
|
916
918
|
PROJECT-FACTS.md
|
|
919
|
+
# lock files beside locked documents, and migration backups (never commit these)
|
|
920
|
+
*.lock
|
|
921
|
+
*.bak
|
|
917
922
|
# retired writer; ignored so old files stay untracked
|
|
918
923
|
memory.jsonl
|
|
919
924
|
"""
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"""caddis /usage-review: local usage analysis + harness self-tuning recommendations.
|
|
3
3
|
|
|
4
4
|
Reads:
|
|
5
|
-
<artifact-dir>/usage-log.jsonl per-session digest (
|
|
5
|
+
<artifact-dir>/usage-log.jsonl per-session digest (/handoff). Tries `.caddis/`, then the older
|
|
6
6
|
`.claude/usage-log.jsonl`.
|
|
7
7
|
~/.claude/projects/<slug>/ session transcripts (agent dispatches, context size)
|
|
8
8
|
claude-harness/agents/*.md agent model tiers (frontmatter)
|
|
@@ -660,7 +660,7 @@ def render_markdown(metrics: dict, findings: list[dict], days: int,
|
|
|
660
660
|
f"| Output tokens | {_fmt(metrics['output'])} |",
|
|
661
661
|
f"| Input + cache read | {_fmt(metrics['input'] + metrics['cache_read'])} |",
|
|
662
662
|
f"| Cache efficiency | {_pct(metrics['cache_read'], metrics['input'] + metrics['cache_read'])} read from cache |",
|
|
663
|
-
f"| Est. cost equiv. | ${metrics['est_cost_usd']:.2f} (estimate; edit rates in
|
|
663
|
+
f"| Est. cost equiv. | ${metrics['est_cost_usd']:.2f} (estimate; edit rates in session_state.py) |",
|
|
664
664
|
"",
|
|
665
665
|
"## Findings",
|
|
666
666
|
"",
|
|
@@ -6,7 +6,12 @@ the workspace's usage log (`<workspace>/.caddis/usage-log.jsonl`). Self-containe
|
|
|
6
6
|
ship claudster_config.py), stdlib-only, and fully defensive:
|
|
7
7
|
a Stop hook must never fail the turn, and must not print a non-JSON line to stdout (agy parses Stop-hook
|
|
8
8
|
stdout as a `{"decision":…}` object — a stray string trips its "unsupported hook decision" path). So this
|
|
9
|
-
does a pure side effect and prints NOTHING
|
|
9
|
+
does a pure side effect and prints NOTHING: empty stdout is agy's "no decision", while
|
|
10
|
+
`{"decision": "continue"}` would stop the session from ending.
|
|
11
|
+
|
|
12
|
+
Headless runs (CADDIS_HEADLESS, DOCKET_PLAN or DOCKET_BRANCH set and non-empty) are skipped, as in
|
|
13
|
+
the Claude Stop hook, so review and lane runs leave no files. The record is one append with no
|
|
14
|
+
transcript read, so it stays here rather than moving to /handoff (Phase 13).
|
|
10
15
|
|
|
11
16
|
agy Stop stdin (camelCase protojson):
|
|
12
17
|
{"executionNum":N, "terminationReason":"model_stop|max_steps_exceeded|error", "error":"",
|
|
@@ -60,11 +65,21 @@ def _workspace_roots(data):
|
|
|
60
65
|
return []
|
|
61
66
|
return [str(r) for r in roots if isinstance(r, (str, bytes)) and str(r).strip()]
|
|
62
67
|
|
|
68
|
+
_HEADLESS_MARKERS = ("CADDIS_HEADLESS", "DOCKET_PLAN", "DOCKET_BRANCH")
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def _headless() -> bool:
|
|
72
|
+
"""True when any marker is set to a non-empty value. `CADDIS_HEADLESS=` is not headless."""
|
|
73
|
+
return any(str(os.environ.get(name, "")).strip() for name in _HEADLESS_MARKERS)
|
|
74
|
+
|
|
75
|
+
|
|
63
76
|
def main() -> None:
|
|
64
77
|
try:
|
|
65
78
|
data = json.load(sys.stdin)
|
|
66
79
|
except Exception:
|
|
67
80
|
data = {}
|
|
81
|
+
if _headless():
|
|
82
|
+
return
|
|
68
83
|
try:
|
|
69
84
|
roots = _workspace_roots(data) or [os.getcwd()]
|
|
70
85
|
# Write the record to every root that ALREADY has a .caddis dir, rather than to
|
|
@@ -11,65 +11,65 @@
|
|
|
11
11
|
|
|
12
12
|
| Skill | Path | When to Use |
|
|
13
13
|
|-------|------|-------------|
|
|
14
|
-
| Api Design | `api-design/` | REST and GraphQL API design
|
|
15
|
-
| Backend Development | `backend-development/` | Backend API design, database
|
|
16
|
-
| Code Review | `code-review/` | Automated code review for
|
|
17
|
-
| Codebase Audit | `codebase-audit/` |
|
|
14
|
+
| Api Design | `api-design/` | REST and GraphQL API design: endpoints, resource schemas, versioning, pagination, error responses, OpenAPI. Use when designing or reviewing API contracts. |
|
|
15
|
+
| Backend Development | `backend-development/` | Backend API design, database schemas, microservices and TDD. Use for backend system architecture. |
|
|
16
|
+
| Code Review | `code-review/` | Automated code review for quality, security, performance and best practices. Use when reviewing code changes, PRs, or doing code audits. |
|
|
17
|
+
| Codebase Audit | `codebase-audit/` | Audit an unfamiliar codebase before architecture or implementation work. Use for a new codebase, pre-implementation audit, codebase review, technical due diligence or onboarding. Produces AUDIT-FINDINGS.md and QUESTIONS.md. |
|
|
18
18
|
| Cross Review | `cross-review/` | Cross-vendor code review of the current diff — a second-vendor model (DeepSeek/GLM/any OpenAI-compatible endpoint) reviews your changes to catch bugs a same-vendor reviewer misses |
|
|
19
|
-
| Dashboard Perf Sweep | `dashboard-perf-sweep/` | Re-measure
|
|
20
|
-
| Error Handling | `error-handling/` | Error handling
|
|
19
|
+
| Dashboard Perf Sweep | `dashboard-perf-sweep/` | 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. |
|
|
20
|
+
| Error Handling | `error-handling/` | Error handling for Python and TypeScript: error hierarchies, custom exceptions, result types, retries, circuit breakers, error boundaries, logging, user-facing messages. |
|
|
21
21
|
| Fastapi Dev | `fastapi-dev/` | Build FastAPI backends with standard patterns, error handling, and testing |
|
|
22
22
|
| Javascript Typescript | `javascript-typescript/` | JavaScript and TypeScript development with ES6+, Node.js, React, and modern web frameworks. Use for frontend, backend, or full-stack JavaScript/TypeScript projects. |
|
|
23
|
-
| Python Development | `python/` | Modern Python
|
|
23
|
+
| Python Development | `python/` | Modern Python 3.12+ (Django, FastAPI, async) with production best practices. Use for Python projects, APIs, data processing or scripts. |
|
|
24
24
|
| Refactoring | `refactoring/` | Safely refactor code while maintaining behavior. Use when improving code structure, reducing duplication, extracting functions, or modernizing legacy code. |
|
|
25
25
|
| Security Review | `security-review/` | Security review workflow — OWASP, code scanning, cloud infrastructure |
|
|
26
|
-
| Sql | `sql/` | Write
|
|
26
|
+
| Sql | `sql/` | Write optimized, secure, readable SQL: performance, NULL handling, dialect-specific notes. |
|
|
27
27
|
|
|
28
28
|
### Data
|
|
29
29
|
|
|
30
30
|
| Skill | Path | When to Use |
|
|
31
31
|
|-------|------|-------------|
|
|
32
|
-
| Database Design | `database-design/` | Database schema design,
|
|
33
|
-
| Db Diagram | `db-diagram/` |
|
|
32
|
+
| Database Design | `database-design/` | Database schema design, migrations and query optimization for PostgreSQL, MySQL and NoSQL. |
|
|
33
|
+
| Db Diagram | `db-diagram/` | 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. |
|
|
34
34
|
|
|
35
35
|
### Devops
|
|
36
36
|
|
|
37
37
|
| Skill | Path | When to Use |
|
|
38
38
|
|-------|------|-------------|
|
|
39
|
-
| Adopt App | `adopt-app/` | Bring an app that was never scaffolded
|
|
40
|
-
| Ci Cd Pipeline | `ci-cd-pipeline/` | CI/CD
|
|
39
|
+
| Adopt App | `adopt-app/` | Bring an app that was never scaffolded (POC, server folder, checkout with no remote) up to standard — inventory without running it, pass/gap/question verdicts, ordered plan. Use when the user says "this app was never set up properly", "adopt this POC", "onboard this app", "it just runs from a folder on the server", "bring this up to standard", "what would it take to get this into CI", "nobody knows how this is deployed", or "it started as a prototype and now it is production". |
|
|
40
|
+
| Ci Cd Pipeline | `ci-cd-pipeline/` | CI/CD pipelines for GitHub Actions and Azure DevOps: build and deploy workflows, quality gates, environment promotion and release automation. |
|
|
41
41
|
| Gh Cli | `gh-cli/` | GitHub CLI operations — issues, PRs, releases, and repo management |
|
|
42
42
|
| Git Commit | `git-commit/` | Create well-structured conventional commit messages following Conventional Commits standard. Use when committing changes, preparing PRs, or generating changelogs. |
|
|
43
|
-
| Port To Github | `port-to-github/` |
|
|
44
|
-
| Safe Cleanup | `safe-cleanup/` | Use BEFORE deleting
|
|
45
|
-
| Using Git Worktrees | `using-git-worktrees/` | Use when starting feature work that needs isolation from current workspace or before executing implementation
|
|
46
|
-
| Windows Deployment | `windows-deployment/` | Deploy FastAPI + React/Vite apps to Windows Server with NSSM services,
|
|
43
|
+
| Port To Github | `port-to-github/` | 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". |
|
|
44
|
+
| Safe Cleanup | `safe-cleanup/` | Use BEFORE deleting a directory tree, scratchpad or git worktree, or "tidying up" generated folders, especially on Windows, where deleting through a junction or symlink destroys its target; and to verify a venv or node_modules survived. |
|
|
45
|
+
| Using Git Worktrees | `using-git-worktrees/` | Use when starting feature work that needs isolation from the current workspace, or before executing an implementation plan: creates an isolated git worktree safely. |
|
|
46
|
+
| Windows Deployment | `windows-deployment/` | Deploy FastAPI + React/Vite apps to Windows Server with NSSM services, IIS or nginx reverse proxy and git-pull. Use for Windows prod deploys, NSSM, reverse proxy setup, dev/prod config, or prod troubleshooting. |
|
|
47
47
|
|
|
48
48
|
### Docs
|
|
49
49
|
|
|
50
50
|
| Skill | Path | When to Use |
|
|
51
51
|
|-------|------|-------------|
|
|
52
|
-
| Code Documentation | `code-documentation/` |
|
|
53
|
-
| Confluence Hla | `confluence-hla/` |
|
|
52
|
+
| Code Documentation | `code-documentation/` | Write code documentation: API docs, README files, inline comments and developer guides. |
|
|
53
|
+
| Confluence Hla | `confluence-hla/` | High-Level Architecture (HLA) documents in Simplified Technical English as Confluence Storage Format XHTML with PlantUML. Use for Confluence architecture docs or converting markdown architecture. |
|
|
54
54
|
| Data Lineage | `data-lineage/` | Generate End-to-End Data Lineage and Telemetry Specification Markdown and Confluence XHTML for fleet observability. |
|
|
55
|
-
| Explainer Doc | `explainer-doc/` |
|
|
55
|
+
| Explainer Doc | `explainer-doc/` | 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. |
|
|
56
56
|
| Hld | `hld/` | Generate High-Level Design (HLD) Markdown documentation and Confluence XHTML with native PlantUML diagrams. |
|
|
57
57
|
| Lld | `lld/` | Generate Lower-Level Design (LLD) Markdown documentation and Confluence XHTML with native PlantUML diagrams. |
|
|
58
58
|
| Tech Explainer | `tech-explainer/` | >- |
|
|
59
|
-
| Technical Writing | `technical-writing/` |
|
|
59
|
+
| Technical Writing | `technical-writing/` | Documentation best practices for READMEs, API docs, architecture docs, runbooks and developer guides. Use when writing or reviewing docs or setting documentation standards. |
|
|
60
60
|
| Writing Plans | `writing-plans/` | Use when you have a spec or requirements for a multi-step task, before touching code |
|
|
61
61
|
|
|
62
62
|
### Frontend
|
|
63
63
|
|
|
64
64
|
| Skill | Path | When to Use |
|
|
65
65
|
|-------|------|-------------|
|
|
66
|
-
| Css Architecture | `css-architecture/` | CSS architecture
|
|
67
|
-
| Frontend Design | `frontend-design/` | Create distinctive, production-grade frontend interfaces
|
|
66
|
+
| Css Architecture | `css-architecture/` | 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. |
|
|
67
|
+
| Frontend Design | `frontend-design/` | 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. |
|
|
68
68
|
| Mockup | `mockup/` | Create framework-aware UI mockups with feasibility checks. Prevents wasted effort by validating that proposed designs work within the target framework's constraints. |
|
|
69
69
|
| React Best Practices | `react-best-practices/` | Modern React development guidelines covering hooks, component patterns, state management, performance optimization, and TypeScript integration. |
|
|
70
|
-
| React Dev | `react-dev/` |
|
|
71
|
-
| Ui Review | `ui-review/` | Review UI
|
|
72
|
-
| Warm Editorial Ui | `warm-editorial-ui/` | Apply the "Warm Editorial Refinement" design system
|
|
70
|
+
| React Dev | `react-dev/` | Type-safe React 18-19 with TypeScript: components, generic components, hooks, events, Server Components, TanStack Router and React Router. Use when React TypeScript or React 19 is involved. |
|
|
71
|
+
| Ui Review | `ui-review/` | Review a UI against design requirements, WCAG 2.2 AA and brand guidelines. Use when validating UI before release. |
|
|
72
|
+
| Warm Editorial Ui | `warm-editorial-ui/` | Apply the "Warm Editorial Refinement" design system (warm cream/charcoal surfaces, Bahnschrift + Plus Jakarta Sans, layered shadows), the canonical template for new frontend builds. Use for apps, dashboards or UI in the abc-project style, or on "use our design system", "apply our template", "make it look like abc-project", "use the warm editorial style", "use our brand template", "add dark mode", or a new tool for XYZ Brand. |
|
|
73
73
|
|
|
74
74
|
### General
|
|
75
75
|
|
|
@@ -77,6 +77,8 @@
|
|
|
77
77
|
|-------|------|-------------|
|
|
78
78
|
| Add Rules | `add-rules/` | Create canonical rules for ANY folder — write <folder>/AGENTS.md (from the folder template) + a <folder>/CLAUDE.md @import shim. For folders the stack-map generator doesn't cover. |
|
|
79
79
|
| Catchup | `catchup/` | Where were we? A quick list of what this session was doing and what is still open |
|
|
80
|
+
| Cloud Phases | `cloud-phases/` | Run plan phases in Claude Code cloud sessions — write one prompt per phase, push, hand out paste lines, then take the PRs back |
|
|
81
|
+
| Decide | `decide/` | Record a decision in one step — .caddis/decisions/<date>-<slug>.md |
|
|
80
82
|
| Digress | `digress/` | Park the current workstream on the stack and switch to a new task — without losing the original |
|
|
81
83
|
| Excalidraw Db | `excalidraw-db/` | Turn a SQL artifact into an Excalidraw diagram for a design review / ARB pack / slide — higher-level, drag-the-boxes format |
|
|
82
84
|
| Feature Plan | `feature-plan/` | Create a phased, TDD-structured implementation plan that acts as the durable spine for multi-session work |
|
|
@@ -93,6 +95,7 @@
|
|
|
93
95
|
| Park | `park/` | File a future-work item in the one backlog — .caddis/parking-lot/ — or list what is open |
|
|
94
96
|
| Pr Merge | `pr-merge/` | End-to-end pull request and merge lane — push feature branch, open or update PR, monitor CI to green, merge to default branch, and clean up the feature branch. |
|
|
95
97
|
| Prd | `prd/` | Capture requirements through structured discovery and write a PRD |
|
|
98
|
+
| Rca | `rca/` | Record a root cause in one step — .caddis/rca/<date>-<slug>.md — or close one with the fixing commit |
|
|
96
99
|
| Resume | `resume/` | Renamed to /caddis:catchup (alias, removed next release) |
|
|
97
100
|
| Review | `review/` | Renamed to /caddis:review-pr (alias, removed next release) |
|
|
98
101
|
| Review Pr | `review-pr/` | Review someone else's OPEN pull request end to end — what changed, what CI says, what is risky — then approve or request changes. Never approves on its own. |
|
|
@@ -114,26 +117,26 @@
|
|
|
114
117
|
| Skill | Path | When to Use |
|
|
115
118
|
|-------|------|-------------|
|
|
116
119
|
| Draw Io | `draw-io/` | draw.io diagram creation, editing, and review. Use for .drawio XML editing, PNG conversion, layout adjustment, and AWS icon usage. |
|
|
117
|
-
| Mermaid Diagrams | `mermaid-diagrams/` |
|
|
118
|
-
| Particle Art | `particle-art/` |
|
|
120
|
+
| Mermaid Diagrams | `mermaid-diagrams/` | Software diagrams in Mermaid: class, sequence, flowchart, ERD, C4, state, git graph, gantt. Use for domain models, API flows, processes and database schemas. |
|
|
121
|
+
| Particle Art | `particle-art/` | 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". |
|
|
119
122
|
|
|
120
123
|
### Testing
|
|
121
124
|
|
|
122
125
|
| Skill | Path | When to Use |
|
|
123
126
|
|-------|------|-------------|
|
|
124
|
-
| Playwright | `playwright/` |
|
|
127
|
+
| Playwright | `playwright/` | 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. |
|
|
125
128
|
| Tdd Workflow | `tdd-workflow/` | Test-Driven Development workflow — red-green-refactor cycle |
|
|
126
|
-
| Test Strategy | `test-strategy/` |
|
|
127
|
-
| Webapp Testing | `webapp-testing/` |
|
|
129
|
+
| Test Strategy | `test-strategy/` | Plan what to test: test types, coverage goals, test pyramid, quality gates. Produces a prioritized TEST-STRATEGY.md for the Tester agent. |
|
|
130
|
+
| Webapp Testing | `webapp-testing/` | Test local web apps with Playwright: verify frontend behavior, debug UI, capture screenshots and browser logs. |
|
|
128
131
|
|
|
129
132
|
### Workflow
|
|
130
133
|
|
|
131
134
|
| Skill | Path | When to Use |
|
|
132
135
|
|-------|------|-------------|
|
|
133
|
-
| Advisory Hub | `advisory-hub/` |
|
|
136
|
+
| Advisory Hub | `advisory-hub/` | A long-lived "Hub" session re-derives each phase of a multi-session plan instead of trusting its self-report. Use when the user says "advisory hub", "validate this phase", "phase report", "hub verdict", "advisory context", "who checks the implementing session", "the plan turned out to be wrong", "hand off the hub", "re-derive don't trust", or a long plan with expensive-to-reverse work (a migration, a security change, production data correctness) needs independent checks; not for short features. Hub artefacts, including `hub-NN.spawn.md`, go in `.caddis/advisory-hub-reports/`. |
|
|
134
137
|
| Best Practices | `best-practices/` | >- |
|
|
135
138
|
| Brainstorming | `brainstorming/` | You MUST use this before any creative work - creating features, building components, adding functionality, or modifying behavior. Explores user intent, requirements and design before implementation. |
|
|
136
139
|
| Context Curator | `context-curator/` | Compress and prioritize codebase context before handing work to reasoning agents, minimizing token waste while preserving the required decision inputs. |
|
|
137
140
|
| Preflight | `preflight/` | Plan-vs-codebase validation — verifies API contracts, type names, field accuracy, dependencies, and paths before implementation begins |
|
|
138
141
|
| Setup Project Ai | `setup-project-ai/` | Install or refresh the agent-agnostic dev harness in this project (AGENTS.md-canonical rules hierarchy + CLAUDE.md @import shims, subagents, commands, settings) |
|
|
139
|
-
| Skill Creator | `skill-creator/` | Create
|
|
142
|
+
| Skill Creator | `skill-creator/` | Create, edit and improve skills, run evals and benchmarks, and optimize a skill's description for triggering accuracy. |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: adopt-app
|
|
3
|
-
description: Bring an app that was never scaffolded
|
|
3
|
+
description: Bring an app that was never scaffolded (POC, server folder, checkout with no remote) up to standard — inventory without running it, pass/gap/question verdicts, ordered plan. Use when the user says "this app was never set up properly", "adopt this POC", "onboard this app", "it just runs from a folder on the server", "bring this up to standard", "what would it take to get this into CI", "nobody knows how this is deployed", or "it started as a prototype and now it is production".
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# adopt-app
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: advisory-hub
|
|
3
|
-
description:
|
|
3
|
+
description: A long-lived "Hub" session re-derives each phase of a multi-session plan instead of trusting its self-report. Use when the user says "advisory hub", "validate this phase", "phase report", "hub verdict", "advisory context", "who checks the implementing session", "the plan turned out to be wrong", "hand off the hub", "re-derive don't trust", or a long plan with expensive-to-reverse work (a migration, a security change, production data correctness) needs independent checks; not for short features. Hub artefacts, including `hub-NN.spawn.md`, go in `.caddis/advisory-hub-reports/`.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Advisory Hub — cross-session phase validation
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: api-design
|
|
3
|
-
description: REST and GraphQL API design
|
|
3
|
+
description: "REST and GraphQL API design: endpoints, resource schemas, versioning, pagination, error responses, OpenAPI. Use when designing or reviewing API contracts."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# API Design Skill
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: backend-development
|
|
3
|
-
description: Backend API design, database
|
|
3
|
+
description: Backend API design, database schemas, microservices and TDD. Use for backend system architecture.
|
|
4
4
|
source: wshobson/agents
|
|
5
5
|
license: MIT
|
|
6
6
|
---
|
|
@@ -5,9 +5,9 @@ description: Where were we? A quick list of what this session was doing and what
|
|
|
5
5
|
|
|
6
6
|
# /catchup — where are we?
|
|
7
7
|
|
|
8
|
-
If $ARGUMENTS is empty, follow the catchup procedure below. If a name is given,
|
|
9
|
-
the
|
|
10
|
-
|
|
8
|
+
If $ARGUMENTS is empty, follow the catchup procedure below. If a workstream name is given,
|
|
9
|
+
load that workstream's relay (the named-load procedure at the end of this file). Loading
|
|
10
|
+
never removes or changes the relay.
|
|
11
11
|
|
|
12
12
|
Answer one question: **what were we doing, and what is still open?**
|
|
13
13
|
|
|
@@ -62,36 +62,34 @@ on is worse than one sentence admitting there is nothing to recap.
|
|
|
62
62
|
folder, or `claude --resume` to pick an older session. Mention this only if the recap is thin,
|
|
63
63
|
or if they ask for detail the files do not hold.
|
|
64
64
|
- To **write** a durable resume doc rather than read one: `/caddis:handoff`.
|
|
65
|
-
- To **
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
If the parked plan lives in another `repo`, note that the user may need to open that repo first, then
|
|
91
|
-
proceed there.
|
|
65
|
+
- To **switch to a named workstream**: `/caddis:catchup <name>`. This restores or loads the named relay.
|
|
66
|
+
|
|
67
|
+
## Workstreams and open work
|
|
68
|
+
|
|
69
|
+
**No argument:** this is the last step of the catchup procedure above, not a separate one.
|
|
70
|
+
After the list, add the workstream index and the open work:
|
|
71
|
+
1. Refresh and show the index: `python "${CLAUDE_PLUGIN_ROOT}/scripts/caddis_workstreams.py" render-index`,
|
|
72
|
+
then display `.caddis/relay.md`. If it refuses a legacy `.caddis/relay.md`, display that file
|
|
73
|
+
as it is and suggest `/handoff`, which migrates it.
|
|
74
|
+
2. Show open work for the current workstream:
|
|
75
|
+
```
|
|
76
|
+
python "${CLAUDE_PLUGIN_ROOT}/scripts/caddis_todo.py" open-work
|
|
77
|
+
```
|
|
78
|
+
Before saying `Nothing is parked.`, check for an old `/digress` stack: if `.caddis/workstreams.json`
|
|
79
|
+
exists, run `caddis_workstreams.py migrate-legacy` (it keeps a backup and reports conflicts
|
|
80
|
+
instead of overwriting), then show the index again. Only with no relays and no old stack, state:
|
|
81
|
+
`Nothing is parked.`
|
|
82
|
+
|
|
83
|
+
**Named load** (`/catchup <name>`):
|
|
84
|
+
1. Load it: `python "${CLAUDE_PLUGIN_ROOT}/scripts/caddis_workstreams.py" read <name>`.
|
|
85
|
+
2. If it prints nothing, the relay may be on another machine. Ask before fetching, then run
|
|
86
|
+
`python "${CLAUDE_PLUGIN_ROOT}/scripts/caddis_relay_git.py" fetch <name>`. It reads only
|
|
87
|
+
`refs/caddis/relay/<name>`, never checks out or merges, and refuses to replace a different local
|
|
88
|
+
relay. Pass `--replace` only if the user confirms the local one may be overwritten.
|
|
89
|
+
3. Restate where you were and resume the workstream.
|
|
92
90
|
|
|
93
91
|
## Rules
|
|
94
92
|
- **Never** run a destructive or history-rewriting git action (no `git checkout`, `git reset`, `git stash`,
|
|
95
|
-
branch switches). Resuming is metadata-only
|
|
96
|
-
|
|
97
|
-
- Only real paths and verified facts — restate the
|
|
93
|
+
branch switches), even when the loaded workstream names another branch. Resuming is metadata-only:
|
|
94
|
+
this checkout may be shared with other live sessions. Tell the user which branch it is on instead.
|
|
95
|
+
- Only real paths and verified facts — restate the relay as written; do not embellish the resume point.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ci-cd-pipeline
|
|
3
3
|
context: fork
|
|
4
|
-
description: CI/CD
|
|
4
|
+
description: "CI/CD pipelines for GitHub Actions and Azure DevOps: build and deploy workflows, quality gates, environment promotion and release automation."
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# CI/CD Pipeline Skill
|