@arbiterforge/ca-pi 0.6.0
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/LICENSE +661 -0
- package/README.md +558 -0
- package/package.json +35 -0
- package/plugins/ca-pi/CHANGELOG.md +1030 -0
- package/plugins/ca-pi/COMMANDS.md +90 -0
- package/plugins/ca-pi/ORCHESTRATOR.md +159 -0
- package/plugins/ca-pi/SKILLS.md +47 -0
- package/plugins/ca-pi/SPRINT.md +142 -0
- package/plugins/ca-pi/agents/INDEX.md +31 -0
- package/plugins/ca-pi/agents/architecture-drift-reviewer.md +86 -0
- package/plugins/ca-pi/agents/auth-crypto-reviewer.md +60 -0
- package/plugins/ca-pi/agents/backend-author.md +60 -0
- package/plugins/ca-pi/agents/checkpoint-aggregator.md +111 -0
- package/plugins/ca-pi/agents/coverage-auditor.md +71 -0
- package/plugins/ca-pi/agents/decision-challenger.md +116 -0
- package/plugins/ca-pi/agents/dependency-reviewer.md +79 -0
- package/plugins/ca-pi/agents/design-quality-reviewer.md +80 -0
- package/plugins/ca-pi/agents/finding-triage.md +86 -0
- package/plugins/ca-pi/agents/frontend-author.md +64 -0
- package/plugins/ca-pi/agents/grader.md +173 -0
- package/plugins/ca-pi/agents/infra-author.md +64 -0
- package/plugins/ca-pi/agents/map-deps.md +35 -0
- package/plugins/ca-pi/agents/map-structure.md +37 -0
- package/plugins/ca-pi/agents/migration-reviewer.md +65 -0
- package/plugins/ca-pi/agents/scout.md +127 -0
- package/plugins/ca-pi/agents/security-reviewer.md +72 -0
- package/plugins/ca-pi/agents/tribunal-lens-reviewer.md +65 -0
- package/plugins/ca-pi/extensions/codearbiter-child.js +1885 -0
- package/plugins/ca-pi/extensions/codearbiter.js +9802 -0
- package/plugins/ca-pi/generated/command-catalog.json +197 -0
- package/plugins/ca-pi/generated/roles.json +213 -0
- package/plugins/ca-pi/helpers/windows-supervisor.js +205 -0
- package/plugins/ca-pi/hooks/_activationlib.py +196 -0
- package/plugins/ca-pi/hooks/_arbiterstatelib.py +208 -0
- package/plugins/ca-pi/hooks/_babysitlib.py +76 -0
- package/plugins/ca-pi/hooks/_bashguardlib.py +1667 -0
- package/plugins/ca-pi/hooks/_boxlib.py +131 -0
- package/plugins/ca-pi/hooks/_colorlib.py +304 -0
- package/plugins/ca-pi/hooks/_durabilitylib.py +186 -0
- package/plugins/ca-pi/hooks/_entrylib.py +41 -0
- package/plugins/ca-pi/hooks/_fmtlib.py +161 -0
- package/plugins/ca-pi/hooks/_gitexec.py +45 -0
- package/plugins/ca-pi/hooks/_githooks.py +920 -0
- package/plugins/ca-pi/hooks/_gitlib.py +110 -0
- package/plugins/ca-pi/hooks/_hooklib.py +595 -0
- package/plugins/ca-pi/hooks/_host.py +115 -0
- package/plugins/ca-pi/hooks/_intentlib.py +242 -0
- package/plugins/ca-pi/hooks/_ledgerlib.py +1035 -0
- package/plugins/ca-pi/hooks/_metricslib.py +709 -0
- package/plugins/ca-pi/hooks/_pathnorm.py +74 -0
- package/plugins/ca-pi/hooks/_planfilelib.py +664 -0
- package/plugins/ca-pi/hooks/_previewlib.py +193 -0
- package/plugins/ca-pi/hooks/_protectedlib.py +312 -0
- package/plugins/ca-pi/hooks/_protectedstatelib.py +411 -0
- package/plugins/ca-pi/hooks/_provenancelib.py +971 -0
- package/plugins/ca-pi/hooks/_prunelib.py +1398 -0
- package/plugins/ca-pi/hooks/_prunepolicy.py +235 -0
- package/plugins/ca-pi/hooks/_readinjectlib.py +1080 -0
- package/plugins/ca-pi/hooks/_releaselib.py +2657 -0
- package/plugins/ca-pi/hooks/_scopelib.py +262 -0
- package/plugins/ca-pi/hooks/_segmentslib.py +278 -0
- package/plugins/ca-pi/hooks/_sensitivelib.py +270 -0
- package/plugins/ca-pi/hooks/_sessionlib.py +78 -0
- package/plugins/ca-pi/hooks/_sloplib.py +244 -0
- package/plugins/ca-pi/hooks/_standuplib.py +214 -0
- package/plugins/ca-pi/hooks/_subagentslib.py +219 -0
- package/plugins/ca-pi/hooks/_taskboardlib.py +1088 -0
- package/plugins/ca-pi/hooks/_updatelib.py +278 -0
- package/plugins/ca-pi/hooks/babysit.py +47 -0
- package/plugins/ca-pi/hooks/boardsync.py +129 -0
- package/plugins/ca-pi/hooks/doctor.py +420 -0
- package/plugins/ca-pi/hooks/git-enforce.py +325 -0
- package/plugins/ca-pi/hooks/hostapi.py +460 -0
- package/plugins/ca-pi/hooks/init-codearbiter.py +225 -0
- package/plugins/ca-pi/hooks/metrics.py +62 -0
- package/plugins/ca-pi/hooks/migration-pass.py +129 -0
- package/plugins/ca-pi/hooks/pi-bridge.py +543 -0
- package/plugins/ca-pi/hooks/post-write-edit.py +231 -0
- package/plugins/ca-pi/hooks/pre-bash.py +90 -0
- package/plugins/ca-pi/hooks/pre-edit.py +284 -0
- package/plugins/ca-pi/hooks/pre-read.py +81 -0
- package/plugins/ca-pi/hooks/pre-write.py +217 -0
- package/plugins/ca-pi/hooks/preview.py +69 -0
- package/plugins/ca-pi/hooks/prune-transcript.py +232 -0
- package/plugins/ca-pi/hooks/releasehash.py +216 -0
- package/plugins/ca-pi/hooks/security-pass.py +139 -0
- package/plugins/ca-pi/hooks/session-start.py +1218 -0
- package/plugins/ca-pi/hooks/statusline.py +736 -0
- package/plugins/ca-pi/hooks/taskwrite.py +351 -0
- package/plugins/ca-pi/hooks/update-refresh.py +51 -0
- package/plugins/ca-pi/hooks/wire-statusline.py +435 -0
- package/plugins/ca-pi/includes/anti-slop-design/INDEX.md +55 -0
- package/plugins/ca-pi/includes/anti-slop-design/color.md +43 -0
- package/plugins/ca-pi/includes/anti-slop-design/core.md +244 -0
- package/plugins/ca-pi/includes/anti-slop-design/images.md +32 -0
- package/plugins/ca-pi/includes/anti-slop-design/layout.md +45 -0
- package/plugins/ca-pi/includes/anti-slop-design/medium-cli.md +39 -0
- package/plugins/ca-pi/includes/anti-slop-design/medium-dataviz.md +43 -0
- package/plugins/ca-pi/includes/anti-slop-design/medium-diagram.md +35 -0
- package/plugins/ca-pi/includes/anti-slop-design/medium-documents.md +70 -0
- package/plugins/ca-pi/includes/anti-slop-design/medium-slides.md +30 -0
- package/plugins/ca-pi/includes/anti-slop-design/medium-web.md +39 -0
- package/plugins/ca-pi/includes/anti-slop-design/typography.md +51 -0
- package/plugins/ca-pi/includes/author-tdd-workflow.md +14 -0
- package/plugins/ca-pi/includes/compaction-charter.md +16 -0
- package/plugins/ca-pi/includes/cut-docs.md +16 -0
- package/plugins/ca-pi/includes/dev-mode.md +30 -0
- package/plugins/ca-pi/includes/farm.md +237 -0
- package/plugins/ca-pi/includes/fresh-verification.md +14 -0
- package/plugins/ca-pi/includes/harvest.md +69 -0
- package/plugins/ca-pi/includes/maturity-coverage.md +102 -0
- package/plugins/ca-pi/includes/pi-host-notes.md +69 -0
- package/plugins/ca-pi/includes/redirect.md +69 -0
- package/plugins/ca-pi/includes/reference-map.md +22 -0
- package/plugins/ca-pi/includes/review-matrix.md +14 -0
- package/plugins/ca-pi/includes/reviewer-contract.md +53 -0
- package/plugins/ca-pi/includes/routing-table.md +47 -0
- package/plugins/ca-pi/includes/security-gate-record.md +22 -0
- package/plugins/ca-pi/includes/smarts/core.md +90 -0
- package/plugins/ca-pi/includes/smarts/decision-log-format.md +56 -0
- package/plugins/ca-pi/routines/INDEX.md +32 -0
- package/plugins/ca-pi/routines/brainstorming/SKILL.md +122 -0
- package/plugins/ca-pi/routines/commit-gate/SKILL.md +151 -0
- package/plugins/ca-pi/routines/context-check/SKILL.md +85 -0
- package/plugins/ca-pi/routines/context-creation/SKILL.md +171 -0
- package/plugins/ca-pi/routines/crypto-compliance/SKILL.md +41 -0
- package/plugins/ca-pi/routines/debug/SKILL.md +99 -0
- package/plugins/ca-pi/routines/decision-lifecycle/SKILL.md +104 -0
- package/plugins/ca-pi/routines/decision-lifecycle/references/adr-template.md +74 -0
- package/plugins/ca-pi/routines/decision-variance/SKILL.md +147 -0
- package/plugins/ca-pi/routines/decompose/SKILL.md +168 -0
- package/plugins/ca-pi/routines/dispatching-parallel-agents/SKILL.md +76 -0
- package/plugins/ca-pi/routines/executing-plans/SKILL.md +83 -0
- package/plugins/ca-pi/routines/finishing-a-development-branch/SKILL.md +91 -0
- package/plugins/ca-pi/routines/post-merge-cleanup/SKILL.md +233 -0
- package/plugins/ca-pi/routines/refactor/SKILL.md +91 -0
- package/plugins/ca-pi/routines/release/SKILL.md +315 -0
- package/plugins/ca-pi/routines/secret-handling/SKILL.md +67 -0
- package/plugins/ca-pi/routines/security-architecture/SKILL.md +63 -0
- package/plugins/ca-pi/routines/skill-author/SKILL.md +108 -0
- package/plugins/ca-pi/routines/skill-author/references/skill-template.md +58 -0
- package/plugins/ca-pi/routines/subagent-driven-development/SKILL.md +149 -0
- package/plugins/ca-pi/routines/subagent-driven-development/references/farm-dispatch.md +145 -0
- package/plugins/ca-pi/routines/tdd/SKILL.md +139 -0
- package/plugins/ca-pi/routines/tribunal/SKILL.md +109 -0
- package/plugins/ca-pi/routines/tribunal/references/ai-markers.md +29 -0
- package/plugins/ca-pi/routines/tribunal/references/cost-and-models.md +64 -0
- package/plugins/ca-pi/routines/tribunal/references/finding-record.md +27 -0
- package/plugins/ca-pi/routines/tribunal/references/issue-filing.md +47 -0
- package/plugins/ca-pi/routines/tribunal/references/lenses/appsec.md +22 -0
- package/plugins/ca-pi/routines/tribunal/references/lenses/architecture.md +23 -0
- package/plugins/ca-pi/routines/tribunal/references/lenses/coverage.md +20 -0
- package/plugins/ca-pi/routines/tribunal/references/lenses/infra.md +24 -0
- package/plugins/ca-pi/routines/tribunal/references/lenses/migration.md +22 -0
- package/plugins/ca-pi/routines/tribunal/references/lenses/observability.md +21 -0
- package/plugins/ca-pi/routines/tribunal/references/lenses/performance.md +22 -0
- package/plugins/ca-pi/routines/tribunal/references/lenses/reliability.md +23 -0
- package/plugins/ca-pi/routines/tribunal/references/lenses/secrets-supply.md +22 -0
- package/plugins/ca-pi/routines/tribunal/references/lenses/test-fidelity.md +24 -0
- package/plugins/ca-pi/routines/tribunal/references/lenses/typesafety.md +21 -0
- package/plugins/ca-pi/routines/tribunal/references/report.md +19 -0
- package/plugins/ca-pi/routines/tribunal/references/schemas.md +58 -0
- package/plugins/ca-pi/routines/tribunal/references/telemetry.md +28 -0
- package/plugins/ca-pi/routines/tribunal/references/triage.md +53 -0
- package/plugins/ca-pi/routines/using-git-worktrees/SKILL.md +85 -0
- package/plugins/ca-pi/routines/writing-plans/SKILL.md +129 -0
- package/plugins/ca-pi/routines/writing-plans/references/farm-plan.md +50 -0
- package/plugins/ca-pi/skills/ca-add-dep/SKILL.md +88 -0
- package/plugins/ca-pi/skills/ca-adr/SKILL.md +30 -0
- package/plugins/ca-pi/skills/ca-adr-status/SKILL.md +30 -0
- package/plugins/ca-pi/skills/ca-arbiter/SKILL.md +36 -0
- package/plugins/ca-pi/skills/ca-audit/SKILL.md +51 -0
- package/plugins/ca-pi/skills/ca-btw/SKILL.md +23 -0
- package/plugins/ca-pi/skills/ca-checkpoint/SKILL.md +50 -0
- package/plugins/ca-pi/skills/ca-chore/SKILL.md +58 -0
- package/plugins/ca-pi/skills/ca-cleanup/SKILL.md +55 -0
- package/plugins/ca-pi/skills/ca-commands/SKILL.md +21 -0
- package/plugins/ca-pi/skills/ca-commit/SKILL.md +27 -0
- package/plugins/ca-pi/skills/ca-conflict/SKILL.md +61 -0
- package/plugins/ca-pi/skills/ca-context-check/SKILL.md +32 -0
- package/plugins/ca-pi/skills/ca-create-context/SKILL.md +32 -0
- package/plugins/ca-pi/skills/ca-debug/SKILL.md +42 -0
- package/plugins/ca-pi/skills/ca-decompose/SKILL.md +30 -0
- package/plugins/ca-pi/skills/ca-dev/SKILL.md +42 -0
- package/plugins/ca-pi/skills/ca-doctor/SKILL.md +44 -0
- package/plugins/ca-pi/skills/ca-feature/SKILL.md +105 -0
- package/plugins/ca-pi/skills/ca-fix/SKILL.md +42 -0
- package/plugins/ca-pi/skills/ca-init/SKILL.md +56 -0
- package/plugins/ca-pi/skills/ca-metrics/SKILL.md +80 -0
- package/plugins/ca-pi/skills/ca-new-skill/SKILL.md +34 -0
- package/plugins/ca-pi/skills/ca-override/SKILL.md +72 -0
- package/plugins/ca-pi/skills/ca-pr/SKILL.md +61 -0
- package/plugins/ca-pi/skills/ca-preview/SKILL.md +86 -0
- package/plugins/ca-pi/skills/ca-prune/SKILL.md +100 -0
- package/plugins/ca-pi/skills/ca-reconcile/SKILL.md +43 -0
- package/plugins/ca-pi/skills/ca-refactor/SKILL.md +43 -0
- package/plugins/ca-pi/skills/ca-release/SKILL.md +57 -0
- package/plugins/ca-pi/skills/ca-review/SKILL.md +63 -0
- package/plugins/ca-pi/skills/ca-spike/SKILL.md +41 -0
- package/plugins/ca-pi/skills/ca-sprint/SKILL.md +44 -0
- package/plugins/ca-pi/skills/ca-standup/SKILL.md +112 -0
- package/plugins/ca-pi/skills/ca-status/SKILL.md +56 -0
- package/plugins/ca-pi/skills/ca-task/SKILL.md +61 -0
- package/plugins/ca-pi/skills/ca-threat-model/SKILL.md +45 -0
- package/plugins/ca-pi/skills/ca-tribunal/SKILL.md +44 -0
- package/plugins/ca-pi/skills/ca-watch/SKILL.md +78 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ca-reconcile
|
|
3
|
+
description: SMARTS arbitration — reconcile architectural artifacts against the scaffold and prior decisions; every variance resolved by an explicit, user-attributed choice.
|
|
4
|
+
argument-hint: "(none) | \"<ADR-id | artifact | scope>\""
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /ca-reconcile — architectural arbitration
|
|
8
|
+
|
|
9
|
+
Reconciles the project's architectural artifacts against the scaffold and prior decisions, or challenges a specific ADR that is wrong, stale, or in conflict with another. Presents SMARTS analyses and recommendations but never arbitrates — every variance is resolved by an explicit user choice recorded in the decision log with user attribution. With no argument it runs a full reconciliation pass; an argument scopes it to a named ADR, conflict, or artifact.
|
|
10
|
+
|
|
11
|
+
## Routes to
|
|
12
|
+
|
|
13
|
+
The `decision-variance` skill (`<plugin-root>/routines/decision-variance/SKILL.md`). It locates
|
|
14
|
+
the three architectural artifacts by exact filename — `01-architecture-breakdown.md`,
|
|
15
|
+
`02-phased-build-plan.md`, `03-task-backlog.md` (under `<project-root>/.codearbiter/plans/`) —
|
|
16
|
+
and indexes the append-only decision log at
|
|
17
|
+
`<project-root>/.codearbiter/decisions/decision-log.md`. It MAY dispatch the
|
|
18
|
+
`decision-challenger` agent (`<plugin-root>/agents/decision-challenger.md`) to stress-test an
|
|
19
|
+
in-scope ADR — optional, not forced. Each variance ends in one of three user-chosen outcomes:
|
|
20
|
+
|
|
21
|
+
1. **Ratify** — the existing decision stands; the SMARTS analysis and re-affirmation are logged.
|
|
22
|
+
2. **Supersede** — a new decision is recorded by appending a log entry whose `Supersedes:` references
|
|
23
|
+
the prior one; a replacement ADR is authored via `/ca-adr`.
|
|
24
|
+
3. **Surface as `[CONFIRM-NN]`** — unresolvable now; a numbered placeholder is added to
|
|
25
|
+
`<project-root>/.codearbiter/open-questions.md`.
|
|
26
|
+
|
|
27
|
+
## When NOT to use
|
|
28
|
+
|
|
29
|
+
- Author a brand-new ADR with no prior conflict → `/ca-adr`.
|
|
30
|
+
- Check ADR health (aged, unchallenged, unresolved CONFIRM-NN) → `/ca-adr-status`.
|
|
31
|
+
- A general architectural discussion without recording a decision → `/ca-btw`.
|
|
32
|
+
- A rule conflict between project docs and code → `/ca-conflict`.
|
|
33
|
+
- Routine git text-merge conflicts — this is architectural reconciliation, not merge resolution.
|
|
34
|
+
|
|
35
|
+
## Hard gate
|
|
36
|
+
|
|
37
|
+
MUST NOT record an arbitration decision without an explicit user choice; decline "you decide" /
|
|
38
|
+
"use your best judgment" with a structural refusal (the only delegation is the user verbatim accepting
|
|
39
|
+
the recommendation, logged as such in `Decided by:`). MUST match the three artifacts by exact
|
|
40
|
+
filename. The decision log is append-only — MUST NOT edit or rebuild a prior entry; supersede by
|
|
41
|
+
appending. MUST NOT modify the artifacts, scaffold, or code to "fix" a variance. MUST NOT author an
|
|
42
|
+
ADR as the disposition of a routine finding — ADRs are authored only via `/ca-adr` with user
|
|
43
|
+
attribution.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ca-refactor
|
|
3
|
+
description: Restructure code with behavioral parity proven through unmodified pre-existing tests, then refactor. No behavior change.
|
|
4
|
+
argument-hint: "<surface and motivation>"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /ca-refactor — behavior-preserving restructure
|
|
8
|
+
|
|
9
|
+
The only permitted entry to refactor work. A refactor that cannot prove parity through unmodified pre-existing tests is a feature change in disguise and routes to `/ca-feature`. Two required parts: the **surface** (exact files, functions, classes, or methods — vague surfaces like "the auth module" are rejected) and the **motivation** (why the restructure is worth doing).
|
|
10
|
+
|
|
11
|
+
## Flow
|
|
12
|
+
|
|
13
|
+
Routes to the `refactor` skill — six phases:
|
|
14
|
+
|
|
15
|
+
1. **Surface identification** — lock the exact files, symbols, and public signatures.
|
|
16
|
+
2. **Parity coverage proof** — demonstrate pre-existing tests already cover the named surface, with at
|
|
17
|
+
least one direct test per public method.
|
|
18
|
+
3. **Red parity tests (conditional)** — if the refactor exposes a new test seam, route to `tdd` (`<plugin-root>/routines/tdd/SKILL.md`)
|
|
19
|
+
Phase 1 to write failing tests pinning the seam's contract first.
|
|
20
|
+
4. **Implementation** — apply the restructure mechanically within the surface table; no new behavior,
|
|
21
|
+
branches, error paths, or side effects.
|
|
22
|
+
5. **Parity verification** — the full pre-existing suite passes with zero edits to any pre-existing
|
|
23
|
+
test file.
|
|
24
|
+
6. **Lint / coverage gate** — lint, type-check, and coverage clear; surface coverage MUST NOT regress.
|
|
25
|
+
|
|
26
|
+
## Routes to
|
|
27
|
+
|
|
28
|
+
`refactor` (`<plugin-root>/routines/refactor/SKILL.md`) — all six phases.
|
|
29
|
+
|
|
30
|
+
## When NOT to use
|
|
31
|
+
|
|
32
|
+
- New behavior — a new branch, error path, side effect, public method beyond a Phase 3 seam, or a
|
|
33
|
+
change to what any input maps to → `/ca-feature`.
|
|
34
|
+
- A change motivated by "the current behavior is wrong" → `/ca-fix`.
|
|
35
|
+
- Questions or discussion → `/ca-btw`.
|
|
36
|
+
- Persisting an already-completed refactor → `/ca-commit`.
|
|
37
|
+
|
|
38
|
+
## Hard gate
|
|
39
|
+
|
|
40
|
+
No refactor proceeds without behavioral-parity coverage proof in Phase 2; if the surface is
|
|
41
|
+
under-covered, the skill halts and routes to `tdd` Phase 1 to backfill before resuming. A Phase 4 diff
|
|
42
|
+
that would classify as `feat`, or a Phase 5 verification that depends on edits to a pre-existing test,
|
|
43
|
+
terminates the refactor and re-routes to `/ca-feature` or `/ca-fix`.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ca-release
|
|
3
|
+
description: Cut a release the only sanctioned way — SemVer bump from the commit log, a CHANGELOG section, an annotated tag. Takes the declared target's name as its only argument, or --dry-run to preview one with no write. The only path to a version tag.
|
|
4
|
+
argument-hint: "[target] | --dry-run"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /ca-release — tagged release
|
|
8
|
+
|
|
9
|
+
The only permitted path to a version tag. A release is a deployment-readiness assertion: the codebase at this SHA satisfies the bar for shipping. `/ca-release` aggregates existing compliance — it does not duplicate it.
|
|
10
|
+
|
|
11
|
+
## Flow
|
|
12
|
+
|
|
13
|
+
Routes to the `release` skill, which resolves everything about the release from the project's **declared target file**, `<project-root>/.codearbiter/release-targets.md` — the tag prefix, the manifests, the changelog, the payload scope, and the optional checks. Nothing about any target is written here.
|
|
14
|
+
|
|
15
|
+
`/ca-release` takes the target's name as its only argument. When the declared file names exactly one target, a bare `/ca-release` uses it; when it names more, the argument is required and the skill STOPs rather than guessing. A project with no declared file at all enters the skill's own back-fill lane, which proposes a row and writes nothing without explicit confirmation.
|
|
16
|
+
|
|
17
|
+
1. **Pre-flight** — declared row resolved, working tree clean, not on the default branch, suite green, no blocking `[CONFIRM-NN]` open. Resolve `LAST_TAG` within that target's own tag series and scope the commit window to the row's declared payload, so a sibling target's commit never bumps this one or lands in its changelog.
|
|
18
|
+
2. **Version** — classify the window by Conventional Commits type and apply the highest-precedence bump, against a base that accounts for both the last tag and every declared manifest. Every bumping commit must carry a `CHANGELOG:` footer; a missing one BLOCKs and is never auto-filled.
|
|
19
|
+
3. **Surfaces** — roll the section into the declared changelog, update every declared manifest, and run the row's declared `pre-tag` checks. Those checks are check-only: one that mutates the tree BLOCKs.
|
|
20
|
+
4. **Tag** — commit the release edits, then compose the annotated tag. Never push it or publish a Release without explicit user authorization — publication is a separate decision.
|
|
21
|
+
|
|
22
|
+
## Dry run
|
|
23
|
+
|
|
24
|
+
`/ca-release --dry-run [target]` runs Flow steps 1 and 2 above — Pre-flight in full, then Version's
|
|
25
|
+
read-only derivation: resolving the row, deriving the bump, classifying the window, and verifying
|
|
26
|
+
`CHANGELOG:` footer completeness — then stops before step 3 and reports exactly what a real run would
|
|
27
|
+
do: the target, the derived version and its rationale, the per-commit classification, and any blocker
|
|
28
|
+
Pre-flight or Version would itself have hit. Steps 3 (Surfaces) and 4 (Tag) never run: no changelog
|
|
29
|
+
edit, no manifest bump, no commit, no declared `pre-tag` check execution, no tag. The report also
|
|
30
|
+
prints the resolved row's fields verbatim, which doubles as a way to validate a freshly authored
|
|
31
|
+
`<project-root>/.codearbiter/release-targets.md` without tagging anything. Declared `pre-tag` checks
|
|
32
|
+
are listed, not run — they assert against the manifests AFTER the bump this mode never performs, so
|
|
33
|
+
running them early would report false failures against files `--dry-run` deliberately leaves
|
|
34
|
+
untouched, not a preview of anything real. `release`'s own SKILL.md is authoritative for the exact
|
|
35
|
+
stopping point.
|
|
36
|
+
|
|
37
|
+
## Arguments
|
|
38
|
+
|
|
39
|
+
- **`[target]`** — the name of a row in the declared target file (e.g. the name in `[ca]`). Optional only when exactly one target is declared. An unrecognised name STOPs; it is never resolved to a guess.
|
|
40
|
+
- **`--dry-run`** — preview a release with no write; see "Dry run" above. Combines with `[target]` exactly as a real run does — required only when more than one target is declared.
|
|
41
|
+
|
|
42
|
+
There is no version or `--auto` argument. The version is always derived from the commit log and the declared manifests — supplying one by hand is the thing this lane exists to prevent.
|
|
43
|
+
|
|
44
|
+
## Routes to
|
|
45
|
+
|
|
46
|
+
`release` (`<plugin-root>/routines/release/SKILL.md`), which is authoritative for the phase contents and gates summarized above.
|
|
47
|
+
|
|
48
|
+
## When NOT to use
|
|
49
|
+
|
|
50
|
+
- Tagging an in-progress branch → land work first via `/ca-feature` / `/ca-fix`.
|
|
51
|
+
- Pushing an already-composed tag → that is a separate user-authorized step.
|
|
52
|
+
- A changelog only → it is a phase output, not a standalone deliverable.
|
|
53
|
+
- Creating a declared target file ahead of a release → that is `context-creation`'s job, or the skill's back-fill lane at release time.
|
|
54
|
+
|
|
55
|
+
## Hard gate
|
|
56
|
+
|
|
57
|
+
MUST NOT compose a tag on a red suite. MUST NOT guess the version — it is derived from the commit log and the declared manifests. MUST NOT auto-fill a missing `CHANGELOG:` footer. MUST NOT resolve an unrecognised or ambiguous target to a guess. MUST NOT write to the default branch or force-push. MUST NOT push the tag or publish a Release without explicit user authorization. MUST NOT write, commit, or tag anything under `--dry-run` — it stops before Version step 3's writes even reach the working tree. Any BLOCK may be bypassed only via `/ca-override`.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ca-review
|
|
3
|
+
description: Review a diff with the reviewer fleet, funneled to one triaged verdict. Targets the current working diff, a path, or an inbound GitHub PR.
|
|
4
|
+
argument-hint: "[path | #<pr> | <pr-url>] (defaults to the current diff)"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /ca-review — diff review
|
|
8
|
+
|
|
9
|
+
Read-only review of a change. Routes to `dispatching-parallel-agents` (`<plugin-root>/routines/dispatching-parallel-agents/SKILL.md`): dispatches the reviewer fleet by path matrix, dedupes, then funnels through `finding-triage` → `checkpoint-aggregator` to a single verdict. No code is modified.
|
|
10
|
+
|
|
11
|
+
**The change under review does not have to be yours.** `/ca-review #123` reviews an inbound pull request through the same fleet, the same matrix, and the same triage. That is the point of issue #80: a tool that only reviews the diff you just wrote is a linter for authors, not a gate for a team, and reviewing code you did NOT write is where a governance gate earns its keep.
|
|
12
|
+
|
|
13
|
+
It is an ARGUMENT, not a second command. The scope resolver already took one, the fleet is scope-agnostic, and every phase downstream operates on a diff regardless of where it came from — so a `/ca-review-pr` would be a whole public surface (catalog, three host projections, README counts, sidebar) whose only distinguishing feature is where the diff was fetched from.
|
|
14
|
+
|
|
15
|
+
## Flow
|
|
16
|
+
|
|
17
|
+
1. Resolve scope from `$ARGUMENTS`:
|
|
18
|
+
- **empty** → the current working diff (unchanged default).
|
|
19
|
+
- **a path** → that path (unchanged).
|
|
20
|
+
- **`#<number>`, a bare number, or a GitHub PR URL** → an INBOUND PR. Fetch its diff with
|
|
21
|
+
`gh pr diff <number>` and review that. If `gh` is missing or unauthenticated, STOP and say so —
|
|
22
|
+
do NOT silently fall back to the working diff, which would report a verdict on the wrong change
|
|
23
|
+
under the PR's name.
|
|
24
|
+
|
|
25
|
+
For a PR target, resolve the diff ONCE and review that text. Do not re-fetch per reviewer: the
|
|
26
|
+
fleet runs in parallel, and a PR updated mid-review would otherwise have different reviewers
|
|
27
|
+
reading different code and a triage that reconciles findings from two versions.
|
|
28
|
+
2. Build the unit list by path matrix; each matched reviewer is one read-only unit:
|
|
29
|
+
|
|
30
|
+
| Reviewer | Dispatched when scope touches |
|
|
31
|
+
|---|---|
|
|
32
|
+
| `security-reviewer` | auth, middleware, secrets, deploy/CI, any security-sensitive path |
|
|
33
|
+
| `auth-crypto-reviewer` | authn, crypto, key handling, secrets |
|
|
34
|
+
| `dependency-reviewer` | `package.json`, lockfiles, base images, dependency manifests |
|
|
35
|
+
| `migration-reviewer` | DB migration file add/modify |
|
|
36
|
+
| `coverage-auditor` | any source change (test coverage vs. obligations) |
|
|
37
|
+
| `architecture-drift-reviewer` | code that may diverge from accepted ADRs in `.codearbiter/decisions/` |
|
|
38
|
+
|
|
39
|
+
3. Route to `dispatching-parallel-agents` with that unit list (read-only batch — no collision check).
|
|
40
|
+
It dedupes overlapping findings, then funnels through `finding-triage` (severity + inline
|
|
41
|
+
`[NEEDS-TRIAGE]` on out-of-scope items) → `checkpoint-aggregator` (single verdict).
|
|
42
|
+
4. Surface the aggregated verdict: findings by severity, file:line, remediation, and the applicable
|
|
43
|
+
control from `<project-root>/.codearbiter/security-controls.md` for security findings.
|
|
44
|
+
5. **For a PR target, posting the verdict is a separate, confirmed step.** Report locally first; post only on explicit instruction, with `gh pr review <number> --comment --body-file <file>`. A review comment on someone else's PR is outward-facing and effectively public the moment it lands — it notifies subscribers and cannot be un-sent. Never `--request-changes` or `--approve` from here: those carry merge authority, and this command produces a finding list, not a maintainer's decision.
|
|
45
|
+
|
|
46
|
+
## Severity
|
|
47
|
+
|
|
48
|
+
- **CRITICAL** — exploitable vuln, secret exposure, banned primitive, data-integrity breach.
|
|
49
|
+
- **HIGH** — significant compliance gap or unsafe pattern.
|
|
50
|
+
- **MEDIUM** — standards deviation or coverage gap.
|
|
51
|
+
- **LOW** — informational or style.
|
|
52
|
+
|
|
53
|
+
## Hard gate
|
|
54
|
+
|
|
55
|
+
Read-only — MUST NOT modify a file, and MUST NOT check out, merge, or otherwise move the repository to the PR's branch: reviewing an inbound PR means reading its DIFF, not adopting its code, and a checkout would run its content through hooks that trust the working tree. BLOCK on any CRITICAL or HIGH finding on your OWN change: it must be resolved before `/ca-pr`. On an inbound PR there is nothing local to block — the verdict is the deliverable. MUST NOT consume raw reviewer output — only the `finding-triage` → `checkpoint-aggregator`
|
|
56
|
+
verdict. MUST NOT resolve a `[CONFIRM-NN]` surfaced during review by guessing.
|
|
57
|
+
|
|
58
|
+
## When NOT to use
|
|
59
|
+
|
|
60
|
+
- Opening a PR (reviews dispatch automatically) → `/ca-pr`.
|
|
61
|
+
- A periodic full-codebase sweep → `/ca-checkpoint`.
|
|
62
|
+
- A pre-implementation threat model → `/ca-threat-model`.
|
|
63
|
+
- A question about the code → `/ca-btw`.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ca-spike
|
|
3
|
+
description: Exploratory spike on a throwaway branch — answer a named question with disposable code. Never merges; exits to a findings note or /ca-feature.
|
|
4
|
+
argument-hint: "<question to answer> [timebox]"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /ca-spike — exploratory spike
|
|
8
|
+
|
|
9
|
+
The sanctioned lane for "I need to write code to find out." Spike code is disposable by contract:
|
|
10
|
+
it never merges, never PRs, and never becomes the implementation. What survives a spike is the
|
|
11
|
+
*answer*, written down — the code is burned.
|
|
12
|
+
|
|
13
|
+
## Flow
|
|
14
|
+
|
|
15
|
+
1. **Name the question** — a spike without a falsifiable question is just freelancing. Restate
|
|
16
|
+
`$ARGUMENTS` as the question the spike answers and the timebox (default: one session). STOP for
|
|
17
|
+
the user's confirmation.
|
|
18
|
+
2. **Branch** — create `spike/<slug>` from the current branch. All spike work stays on it.
|
|
19
|
+
3. **Explore** — no `tdd`, no plan, no review fleet. Two rules survive even here: no secret leaves
|
|
20
|
+
the approved store, and no irreversible operation (prod data, destructive migration) runs from a
|
|
21
|
+
spike.
|
|
22
|
+
4. **Exit — exactly one of:**
|
|
23
|
+
- **Answered** → write the findings to `<project-root>/.codearbiter/spikes/<slug>.md`
|
|
24
|
+
(the question, what was tried, the answer, what it implies), then delete the branch. If the
|
|
25
|
+
answer warrants building, hand the findings to `/ca-feature` — the spike file seeds
|
|
26
|
+
`brainstorming` (`<plugin-root>/routines/brainstorming/SKILL.md`); the spike code is reference material, never the implementation.
|
|
27
|
+
- **Timebox expired, no answer** → record that too (a dead end is a finding), delete the branch.
|
|
28
|
+
|
|
29
|
+
## Hard gate
|
|
30
|
+
|
|
31
|
+
MUST NOT merge or PR a `spike/*` branch — its only exits are a findings file and deletion. MUST NOT
|
|
32
|
+
copy spike code into an implementation branch wholesale; implementation re-enters through
|
|
33
|
+
`/ca-feature` and `tdd`. Secret-handling and irreversibility rules hold even in a spike. Commits on
|
|
34
|
+
a `spike/*` branch are exempt from `commit-gate` — the exemption is safe precisely because nothing
|
|
35
|
+
on the branch can ever land.
|
|
36
|
+
|
|
37
|
+
## When NOT to use
|
|
38
|
+
|
|
39
|
+
- You already know what to build → `/ca-feature`.
|
|
40
|
+
- Diagnosing a defect → `/ca-debug` (investigation with a structured exit).
|
|
41
|
+
- A question answerable by reading code or docs → `/ca-btw`.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ca-sprint
|
|
3
|
+
description: Autonomous sprint — one interactive spec gate, then plan-to-PR execution with every auto-decision SMARTS-scored and logged. Hard gates remain true stops.
|
|
4
|
+
argument-hint: "[goal] [--farm]"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /ca-sprint — autonomous sprint
|
|
8
|
+
|
|
9
|
+
The autonomy mode. Brainstorm a sprint spec with the user — the one interactive gate — then execute
|
|
10
|
+
the approved plan end-to-end without per-batch checkpoints, deciding "as the user" via SMARTS on
|
|
11
|
+
every non-hard-gate point. Every auto-decision lands in `.codearbiter/sprint-log.md` (append-only)
|
|
12
|
+
with a confidence flag; the `low`-confidence entries are exactly what the user reviews afterward.
|
|
13
|
+
Nothing is hidden behind autonomy.
|
|
14
|
+
|
|
15
|
+
## Flow
|
|
16
|
+
|
|
17
|
+
Load and follow `<plugin-root>/SPRINT.md` — it is the procedure. In brief:
|
|
18
|
+
|
|
19
|
+
1. **Sprint spec (STOP)** — `brainstorming` scoped to a sprint, then `writing-plans`. Explicit user
|
|
20
|
+
approval of spec AND plan before autonomy begins.
|
|
21
|
+
2. **Autonomous execution (BLOCK)** — `subagent-driven-development` runs the plan; test-first via
|
|
22
|
+
`tdd`, two-pass reviewed, fresh-run verified. SMARTS decides non-hard-gate points; everything logs.
|
|
23
|
+
3. **Land & summarize (BLOCK)** — `commit-gate`, then `finishing-a-development-branch`, which
|
|
24
|
+
auto-selects open-PR. `/ca-sprint` never merges and never discards; the merge decision is the user's.
|
|
25
|
+
|
|
26
|
+
Hard gates — `security-controls`, crypto/secrets/auth, irreversible ops, `/override`, an
|
|
27
|
+
unresolvable `[CONFIRM-NN]`, merge-to-default — are NEVER auto-decided. They halt and surface.
|
|
28
|
+
|
|
29
|
+
## Arguments
|
|
30
|
+
|
|
31
|
+
- **`"goal"`** — seed for the sprint-spec brainstorm.
|
|
32
|
+
- **`--farm`** — cost-arbitrage backend: cheap workers implement under the same gates; Claude still
|
|
33
|
+
authors spec, failing tests, plan, and reviews everything. Pre-flights `FARM_API_KEY`.
|
|
34
|
+
|
|
35
|
+
## Routes to
|
|
36
|
+
|
|
37
|
+
`<plugin-root>/SPRINT.md` (mode body), which routes through `brainstorming`,
|
|
38
|
+
`writing-plans`, `subagent-driven-development`, `commit-gate`, `finishing-a-development-branch`.
|
|
39
|
+
|
|
40
|
+
## When NOT to use
|
|
41
|
+
|
|
42
|
+
- A single feature with human checkpoints → `/ca-feature`.
|
|
43
|
+
- Work whose spec cannot be made concrete up front — the one interactive gate is load-bearing;
|
|
44
|
+
a thin spec makes hard-gate stops frequent instead of rare.
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ca-standup
|
|
3
|
+
description: Daily repo hygiene — review the day's repo state, then perform the cleanups under per-action confirmation. Fast-forward only, never destructive without a yes.
|
|
4
|
+
argument-hint: (none)
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /ca-standup — daily hygiene
|
|
8
|
+
|
|
9
|
+
The best-practice checklist you run when you sit down to code, made routine and
|
|
10
|
+
gated. The SessionStart briefing *reports* hygiene state read-only; this command is
|
|
11
|
+
where the *actions* happen — each one confirmed individually, none taken unbidden.
|
|
12
|
+
Arbiter gathers and proposes; you decide every mutation.
|
|
13
|
+
|
|
14
|
+
## Flow
|
|
15
|
+
|
|
16
|
+
The orchestrator reads the current repo state (reusing the briefing's read-only
|
|
17
|
+
computation — branch, ahead/behind, dirty tree, stashes, prune-candidate branches,
|
|
18
|
+
stale worktrees) and presents it, then offers each applicable action in turn. Skip
|
|
19
|
+
an action that has no candidates; never bundle confirmations across different
|
|
20
|
+
actions or items — branch deletions always stay per-item, and the sole exception
|
|
21
|
+
is step 3's explicitly enumerated worktree group, which is still one confirmation
|
|
22
|
+
that names every member, never an implied yes.
|
|
23
|
+
|
|
24
|
+
1. **Fetch + fast-forward pull** — kick `git fetch`, then offer a **`--ff-only`**
|
|
25
|
+
pull of the current branch. Eligibility is the briefing summary's
|
|
26
|
+
`ff_pull_eligible` flag (SH-6: clean working tree AND behind upstream) — the same
|
|
27
|
+
pure helper the SessionStart briefing computes, not a condition re-derived here.
|
|
28
|
+
On a dirty tree the pull is withheld and the dirty state is reported instead. A
|
|
29
|
+
diverged branch (would need a merge) is refused with a diverged-branch message —
|
|
30
|
+
never a merge commit.
|
|
31
|
+
2. **Prune merged local branches** — list local branches already merged on remote
|
|
32
|
+
(the `: gone]` upstream set), excluding the current branch and the default
|
|
33
|
+
(`main`). Delete a listed branch only after an explicit per-branch confirmation;
|
|
34
|
+
declining leaves it in place.
|
|
35
|
+
|
|
36
|
+
A `: gone]` branch that was squash-merged will typically **refuse** plain
|
|
37
|
+
`git branch -d` — its upstream is already pruned, so `-d` has nothing to test
|
|
38
|
+
reachability against. Before reporting that as a stop, check for a merged PR
|
|
39
|
+
record: `gh pr list --head <branch> --state merged --json headRefOid`. When a
|
|
40
|
+
`MERGED` PR's `headRefOid` equals that branch's local tip, containment is
|
|
41
|
+
proven and `git branch -D` is permitted — with the proof stated and the
|
|
42
|
+
branch named in the confirmation — mirroring the `post-merge-cleanup` Phase 5
|
|
43
|
+
contract. Without that proof, a refusal stays a report-and-stop; never guess.
|
|
44
|
+
3. **Remove stale worktrees** — list stale/merged worktrees (branch gone-or-merged,
|
|
45
|
+
or path missing on disk), never the main worktree. Present the full stale list
|
|
46
|
+
together with each item's evidence, then offer removal as an explicitly
|
|
47
|
+
**enumerated group** — one confirmation that names every member — as well as
|
|
48
|
+
per-item confirmation for anyone who wants to keep some. Declining the group
|
|
49
|
+
falls back to per-item confirmation, and declining any item leaves it intact.
|
|
50
|
+
4. **Surface stashes / dirty / un-pushed** — list stashes, uncommitted changes, and
|
|
51
|
+
un-pushed commits, each with a suggested next step (`/ca-commit`, `git push`,
|
|
52
|
+
`git stash show`). Report-and-route only: never discard a stash, reset, or push.
|
|
53
|
+
5. **Advisory board-drift sweep** — run `git log` over the recent merge window
|
|
54
|
+
(since the last `ca`-scoped tag, or a rolling 30-day window when no tag exists)
|
|
55
|
+
and pipe that text to `"$PY" "<plugin-root>/hooks/boardsync.py" reconcile`. Resolve `$PY`
|
|
56
|
+
once by presence — `PY=python3; { command -v python3 >/dev/null 2>&1 && python3 --version >/dev/null 2>&1; } || PY=python`
|
|
57
|
+
— never `python3 X || python X`, which reruns X on any nonzero exit (#577); this resolution
|
|
58
|
+
covers step 6's helper call too.
|
|
59
|
+
Display the advisory drift report as-is: DRIFTED tasks (work merged but board
|
|
60
|
+
state not `[x]`) and informational UNKNOWN ids (in the log but absent from the
|
|
61
|
+
board). This step is read-only and best-effort — the dotted-id grep can miss a
|
|
62
|
+
task never named in a commit. The board is never mutated here; `open-tasks.md`
|
|
63
|
+
is never written. Any drifted task must be resolved explicitly through
|
|
64
|
+
`/ca-task done <id>` — the only blessed board writer. State this clearly to the
|
|
65
|
+
user; do not auto-flip.
|
|
66
|
+
|
|
67
|
+
6. **Archival sweep — proposed per item, never batched** (B-24). Long-done tasks
|
|
68
|
+
accumulate on the board and inflate the in-flight count until it stops meaning
|
|
69
|
+
anything. List the done items older than the cutoff, then ask about **each one
|
|
70
|
+
separately** and archive only the ones the user says yes to:
|
|
71
|
+
`"$PY" "<plugin-root>/hooks/taskwrite.py" archive <id>`.
|
|
72
|
+
|
|
73
|
+
One confirmation per item, one helper call per item — the two map 1:1 on
|
|
74
|
+
purpose. A batched "archive all 12?" turns twelve decisions into one, and the
|
|
75
|
+
helper's own per-item ordering (append to `done-tasks.md` first, then remove
|
|
76
|
+
from `open-tasks.md`) is what makes an interrupted sweep recoverable; a batch
|
|
77
|
+
loop that answered once would throw that away.
|
|
78
|
+
|
|
79
|
+
An item marked `[x]` with **no `(done YYYY-MM-DD)` stamp** cannot be aged, so
|
|
80
|
+
it is never in the proposed set. Offer it only if the user asks, and only with
|
|
81
|
+
`--allow-undated` — both `/ca-task done` and the board classifier require
|
|
82
|
+
the stamp, so an unstamped entry is legacy or override-era and its real age is
|
|
83
|
+
unknown.
|
|
84
|
+
|
|
85
|
+
Declining is always available and costs nothing: an unarchived task stays
|
|
86
|
+
exactly where it is. Never archive without a yes.
|
|
87
|
+
|
|
88
|
+
Present a one-line summary of what was done and what was declined.
|
|
89
|
+
|
|
90
|
+
## When NOT to use
|
|
91
|
+
|
|
92
|
+
- A read-only state snapshot without acting → `/ca-status`.
|
|
93
|
+
- Install health (interpreter, payload, hooks) → `/ca-doctor`.
|
|
94
|
+
- Committing staged work → `/ca-commit`.
|
|
95
|
+
|
|
96
|
+
## Hard gate
|
|
97
|
+
|
|
98
|
+
- MUST pull with `--ff-only` and ONLY on a clean working tree — never a merge
|
|
99
|
+
commit, never on a dirty tree, never a rebase.
|
|
100
|
+
- MUST exclude the current branch and the default branch from branch pruning, and
|
|
101
|
+
the main worktree from worktree cleanup.
|
|
102
|
+
- MUST confirm branch deletions individually — no batched or implied yes.
|
|
103
|
+
Worktree removals MAY be confirmed as one explicitly enumerated group (naming
|
|
104
|
+
every member) or individually; either way there is no implied yes, and
|
|
105
|
+
declining the group falls back to per-item confirmation rather than removing
|
|
106
|
+
anything.
|
|
107
|
+
- MUST treat stash / dirty / un-pushed state as report-and-route only — never
|
|
108
|
+
discard, reset, force, or push on the user's behalf.
|
|
109
|
+
- MUST NOT write to or force-push the default branch.
|
|
110
|
+
- MUST NOT auto-flip any board entry during the drift sweep — the sweep is advisory
|
|
111
|
+
and read-only; resolving a drifted task is the user's decision and routes
|
|
112
|
+
exclusively through `/ca-task done <id>`.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ca-status
|
|
3
|
+
description: Show the project's current state at a glance — stage, open tasks, open questions, overrides since the last checkpoint, current branch. Read-only.
|
|
4
|
+
argument-hint: (none)
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /ca-status — state snapshot
|
|
8
|
+
|
|
9
|
+
A read-only summary of `.codearbiter/` state. No skill is routed to; no file is modified.
|
|
10
|
+
|
|
11
|
+
## Flow
|
|
12
|
+
|
|
13
|
+
The orchestrator reads and presents:
|
|
14
|
+
|
|
15
|
+
1. **Stage** — the `stage:` maturity value from `<project-root>/.codearbiter/CONTEXT.md` frontmatter.
|
|
16
|
+
2. **Pipelines** — every slug in `<project-root>/.codearbiter/specs/` and `plans/`, with how
|
|
17
|
+
far each got: spec awaiting approval, spec approved / no plan, plan in progress (`ACCEPTED` count
|
|
18
|
+
vs. total from the plan's status column), or complete. An interrupted pipeline is resumable via
|
|
19
|
+
`/ca-feature` — say so on its line.
|
|
20
|
+
3. **Open tasks** — the in-flight count from `<project-root>/.codearbiter/open-tasks.md`
|
|
21
|
+
(top-level `- ` bullets excluding done `- [x]`; the same `_taskboardlib` count the
|
|
22
|
+
SessionStart hook uses).
|
|
23
|
+
4. **Open questions** — the count of unresolved `[CONFIRM-NN]` placeholders in
|
|
24
|
+
`<project-root>/.codearbiter/open-questions.md`.
|
|
25
|
+
5. **Overrides since last checkpoint** — entries in `<project-root>/.codearbiter/overrides.log`
|
|
26
|
+
newer than the marker in `<project-root>/.codearbiter/last-checkpoint`.
|
|
27
|
+
6. **Current branch** — from git.
|
|
28
|
+
|
|
29
|
+
## Output
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
## Project status — YYYY-MM-DD
|
|
33
|
+
|
|
34
|
+
Stage: N
|
|
35
|
+
Branch: <current branch>
|
|
36
|
+
Pipelines:
|
|
37
|
+
<slug> plan 3/7 ACCEPTED — resume with /ca-feature "<slug>"
|
|
38
|
+
<slug> spec approved, no plan
|
|
39
|
+
Open tasks: N
|
|
40
|
+
Open questions: N ([CONFIRM-NN] unresolved)
|
|
41
|
+
Overrides since last checkpoint: N
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
No specs and no plans → `Pipelines: none`.
|
|
45
|
+
|
|
46
|
+
If `[CONFIRM-NN]` placeholders are open, surface them — do not resolve them here.
|
|
47
|
+
|
|
48
|
+
## When NOT to use
|
|
49
|
+
|
|
50
|
+
- A full cross-cutting review → `/ca-checkpoint`.
|
|
51
|
+
- A specific question → `/ca-btw`.
|
|
52
|
+
|
|
53
|
+
## Hard gate
|
|
54
|
+
|
|
55
|
+
Read-only. MUST NOT modify any file. MUST NOT resolve a `[CONFIRM-NN]` it surfaces. No skill is routed
|
|
56
|
+
to by this command.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ca-task
|
|
3
|
+
description: The sanctioned task-board mutator — add a queued task, start one (flips to in-progress and stamps the date, minting a dotted ID on pick-up), or mark an in-progress task done. The only blessed write to open-tasks.md.
|
|
4
|
+
argument-hint: "add \"<desc>\" | start <id|\"title\"> | done <id|\"title\">"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /ca-task — task-board writer
|
|
8
|
+
|
|
9
|
+
The one blessed way to mutate `<project-root>/.codearbiter/open-tasks.md`
|
|
10
|
+
(resolves D-1). Hand-editing the board is no longer the only path; this command keeps
|
|
11
|
+
every entry schema-conformant and every transition dated. The board LOGIC lives in the
|
|
12
|
+
pure `_taskboardlib` transforms; this command runs the thin writer
|
|
13
|
+
`<plugin-root>/hooks/taskwrite.py`.
|
|
14
|
+
|
|
15
|
+
## Verbs
|
|
16
|
+
|
|
17
|
+
Always put `--` before user text (a desc or title) so a value beginning with `-` is not
|
|
18
|
+
parsed as a flag. Resolve the interpreter once by presence — `PY=python3; { command -v python3 >/dev/null 2>&1 && python3 --version >/dev/null 2>&1; } || PY=python`
|
|
19
|
+
— never `python3 … || python …`, which reruns the helper on any nonzero exit and reports the
|
|
20
|
+
second run's code instead of the first's (#577) — then invoke `"$PY"` below.
|
|
21
|
+
|
|
22
|
+
- **add** — append a queued task. ID-less by default; pass `--id <group>.<type>` to mint
|
|
23
|
+
a dotted ID now, `--from <origin>` for a harvest back-ref, `--boundaries a,b` for the
|
|
24
|
+
security/trust boundaries it touches. The description must be nonblank and
|
|
25
|
+
single-line; origin and boundary values must also stay on one line.
|
|
26
|
+
- `"$PY" "<plugin-root>/hooks/taskwrite.py" add [--id group.type] [--from origin] [--boundaries a,b] -- "<desc>"`
|
|
27
|
+
- **start** — flip a task to in-progress and **stamp the started date** (so it can never
|
|
28
|
+
be a dateless `[~]`). On an ID-less item, pass `--as <group>.<type>` to mint its dotted
|
|
29
|
+
ID at pick-up. `--date YYYY-MM-DD` overrides today.
|
|
30
|
+
- `"$PY" "<plugin-root>/hooks/taskwrite.py" start [--as group.type] [--date YYYY-MM-DD] -- "<id|title>"`
|
|
31
|
+
- **done** — flip an in-progress task to done and stamp the done date (`--date`
|
|
32
|
+
overrides today). A queued task must be `start`ed first.
|
|
33
|
+
- `"$PY" "<plugin-root>/hooks/taskwrite.py" done [--date YYYY-MM-DD] -- "<id|title>"`
|
|
34
|
+
|
|
35
|
+
A missing target, an already-matching state, an out-of-order transition, a malformed
|
|
36
|
+
add field or `--date`, or an invalid `GROUP.TYPE` namespace is reported and writes
|
|
37
|
+
nothing (exit 1).
|
|
38
|
+
A queued `done` identifies the task as queued and tells the caller to `start` it first.
|
|
39
|
+
**Targeting by title is best-effort:**
|
|
40
|
+
prefer the dotted ID, and
|
|
41
|
+
note that if two ID-less items share a title, `start`/`done` act on the first — give one
|
|
42
|
+
an ID (`/ca-task start --as <group>.<type> -- "<title>"`) to disambiguate.
|
|
43
|
+
|
|
44
|
+
## When NOT to use
|
|
45
|
+
|
|
46
|
+
- Promoting workflow follow-ups in bulk → that is the harvest
|
|
47
|
+
(`<plugin-root>/includes/harvest.md`), which calls this writer for you.
|
|
48
|
+
- Reading the board / counts → `/ca-status` (read-only).
|
|
49
|
+
- Archiving long-settled done items → deferred (D-2); done items stay in-place for now.
|
|
50
|
+
- Filing a separate `chore(board)` PR just to flip a task state → task-board transitions
|
|
51
|
+
(`[x]` done-flip, `[~]` start-flip, new `[ ]` add) ride the **work commit** via
|
|
52
|
+
commit-gate, co-located atomically with the code that completes, starts, or spawns the
|
|
53
|
+
task (ADR-0008). A lagging board-only PR is the anti-pattern this design eliminates.
|
|
54
|
+
|
|
55
|
+
## Hard gate
|
|
56
|
+
|
|
57
|
+
- MUST write the board only through `taskwrite.py` (the pure transforms), never a
|
|
58
|
+
free-hand Edit that can malform the schema.
|
|
59
|
+
- `start` MUST stamp a started date — never leave a dateless `[~]`.
|
|
60
|
+
- `done` MUST target an in-progress task — a queued task must go through `start` first.
|
|
61
|
+
- MUST NOT delete a task to "complete" it — mark it `done` so the record survives.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ca-threat-model
|
|
3
|
+
description: Opt-in lightweight STRIDE pass for a sensitive feature before implementation. Not a routine gate — invoke it when a change warrants security thought.
|
|
4
|
+
argument-hint: "<scope description>"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /ca-threat-model — STRIDE pass (opt-in)
|
|
8
|
+
|
|
9
|
+
Optional, lightweight pre-implementation security review for a sensitive change — new external endpoints, new secrets-handling paths, new auth/authz flows. **Opt-in, not a routine gate**: nothing routes here automatically. Invoke it when a change warrants the thought; skip it otherwise. Read-only — modifies no file. Describe what the component does, what data it handles, and which actors interact with it.
|
|
10
|
+
|
|
11
|
+
## Routes to
|
|
12
|
+
|
|
13
|
+
`security-architecture` (`<plugin-root>/routines/security-architecture/SKILL.md`). The skill reads:
|
|
14
|
+
|
|
15
|
+
- `<project-root>/.codearbiter/security-controls.md` — compliance requirements.
|
|
16
|
+
- `<project-root>/.codearbiter/decisions/` — existing security-relevant ADRs.
|
|
17
|
+
|
|
18
|
+
## Output
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
## Scope
|
|
22
|
+
<what is being analyzed>
|
|
23
|
+
|
|
24
|
+
## STRIDE findings
|
|
25
|
+
| Threat | Category | Likelihood | Impact | Control |
|
|
26
|
+
|--------|-------------|------------|--------|------------------------------|
|
|
27
|
+
| ... | S/T/R/I/D/E | H/M/L | H/M/L | <control or NONE — needs one> |
|
|
28
|
+
|
|
29
|
+
## Recommended controls before implementation
|
|
30
|
+
- <control 1>
|
|
31
|
+
|
|
32
|
+
## Clearance
|
|
33
|
+
CLEAR TO IMPLEMENT | BLOCKED — resolve findings first
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## When NOT to use
|
|
37
|
+
|
|
38
|
+
- Reviewing already-written code → `/ca-review`.
|
|
39
|
+
- A full cross-cutting review → `/ca-checkpoint`.
|
|
40
|
+
- A security question → `/ca-btw`.
|
|
41
|
+
|
|
42
|
+
## Hard gate
|
|
43
|
+
|
|
44
|
+
Read-only — modifies no file. This is an advisory pass, not a routine gate; it never runs unless
|
|
45
|
+
invoked.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ca-tribunal
|
|
3
|
+
description: Deep, rarely-convened whole-codebase audit — eleven specialist lenses, a resumable on-disk audit log, findings filed as GitHub issues on approval. Expensive; estimates cost and STOPs before running. Never a required gate.
|
|
4
|
+
argument-hint: "[scope-path] [--tag <label>]"
|
|
5
|
+
---
|
|
6
|
+
# /ca-tribunal — deep codebase audit
|
|
7
|
+
|
|
8
|
+
The deepest, most expensive review codeArbiter offers, convened rarely and on demand. Routes to the tribunal skill. Eleven lenses judge the codebase; every finding persists to its own file (plus append-only triage/run logs) under `.codearbiter/reports/<run-id>/`, so an interrupted run resumes from disk. Never a required gate — critical/high are blocking-severity findings, not a pipeline halt.
|
|
9
|
+
|
|
10
|
+
Cost first — this lane routinely costs millions of tokens on a large repo. Phase 0 sizes the codebase, prints a token-cost band, recommends the highest-reasoning model, and STOPs for your acknowledgement before dispatching anything. Nothing runs unacknowledged.
|
|
11
|
+
|
|
12
|
+
## Flow
|
|
13
|
+
|
|
14
|
+
Load and follow the tribunal skill (`<plugin-root>/routines/tribunal/SKILL.md`). In brief:
|
|
15
|
+
|
|
16
|
+
Phase 0 (STOP) — cost estimate, model recommendation, resume check.
|
|
17
|
+
Phase 1 (BLOCK) — map the codebase; risk-rank and mark trust boundaries; record AI-authorship markers and iteration depth.
|
|
18
|
+
Phase 2 (BLOCK) — dispatch `tribunal-lens-reviewer` once per active lens in priority waves (≤5 in flight); each dispatch writes one file per finding under its own `findings/<lens>/` dir.
|
|
19
|
+
Phase 3 (BLOCK) — triage per wave from disk: dedup, independent calibration, decision vocabulary.
|
|
20
|
+
Phase 4 (BLOCK) — project the human-readable report from the logs.
|
|
21
|
+
Phase 5 (BLOCK) — on explicit selection, file findings as GitHub issues; idempotent against the tracker.
|
|
22
|
+
Phase 6 (STOP) — optional, opt-in KPI telemetry to the public codeArbiter repo.
|
|
23
|
+
|
|
24
|
+
## Arguments
|
|
25
|
+
|
|
26
|
+
`"scope-path"` — focus the audit on a subtree (default: repository root). The full lens roster still runs; only the scope narrows.
|
|
27
|
+
|
|
28
|
+
`--tag <label>` — freeform run label recorded in telemetry (see `references/telemetry.md`).
|
|
29
|
+
|
|
30
|
+
## Routes to
|
|
31
|
+
|
|
32
|
+
`<plugin-root>/routines/tribunal/SKILL.md` — dispatches `tribunal-lens-reviewer` once per active lens (and, on a large repo, the optional map-structure / map-deps mappers).
|
|
33
|
+
|
|
34
|
+
## When NOT to use
|
|
35
|
+
|
|
36
|
+
- A review of the current diff → `/ca-review` (gate-blocking, fast).
|
|
37
|
+
- A lean periodic sweep → `/ca-checkpoint` (cheap, frequent; tribunal is its rare, deep counterpart).
|
|
38
|
+
- An adversarial STRIDE pass on one sensitive feature → `/ca-threat-model`.
|
|
39
|
+
- A governance packet for a window → `/ca-audit`.
|
|
40
|
+
- Anything on a schedule or in a hot loop — tribunal is a rare, deliberate, expensive convening, not a routine gate.
|
|
41
|
+
|
|
42
|
+
## Hard gate
|
|
43
|
+
|
|
44
|
+
MUST NOT dispatch any lens before you acknowledge the Phase 0 cost estimate. MUST NOT act as a required gate or block a merge/commit. MUST NOT file an issue or send telemetry without explicit authorization. Read-only on project code until the filing gate; findings file as GitHub issues, never the task board.
|