Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,16 @@
"name": "codearbiter",
"owner": { "name": "arbiterForge" },
"metadata": {
"description": "codeArbiter: an orchestration layer for Claude Code. Single-plugin marketplace."
"description": "codeArbiter: a marketplace of two sibling plugins — the ca governance/orchestration layer for Claude Code, plus ca-sandbox, an infrastructure plugin that runs untrusted repos in ephemeral isolated containers."
},
"plugins": [
{
"name": "ca",
"source": "./plugins/ca"
},
{
"name": "ca-sandbox",
"source": "./plugins/ca-sandbox"
}
]
}
29 changes: 22 additions & 7 deletions .codearbiter/CONTEXT.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,36 @@ stage: 2

# Project: codeArbiter

The orchestration framework itself. This `.codearbiter/` directory is the v2
The orchestration framework itself, plus an infrastructure sibling. This repo is a
**marketplace of two plugins** (ADR-0007): `ca`, the governance/orchestration plugin,
and `ca-sandbox`, an infrastructure plugin. This `.codearbiter/` directory is the v2
project-state store — root-level, outside `.claude/`, so it survives even if the
codeArbiter plugin is uninstalled. The `arbiter: enabled` frontmatter above is the
single activation flag: it gates both the SessionStart persona injection and the
arbiter statusline segments.

## Identity
A Claude Code plugin that routes work through gated skills and reviewer agents,
enforces spec-driven TDD and commit gates, decides via SMARTS, and keeps an
append-only audit trail. Decisive, terse, high-authority.
Two sibling plugins in one marketplace (ADR-0007):

- **`ca` (governance)** — the kernel. A Claude Code plugin that routes work through
gated skills and reviewer agents, enforces spec-driven TDD and commit gates,
decides via SMARTS, and keeps an append-only audit trail. Decisive, terse,
high-authority. Its identity and gates are unchanged by the sibling.
- **`ca-sandbox` (infrastructure)** — a locally-hosted GitHub-Codespace equivalent
that pulls an untrusted repo into an ephemeral, isolated container (no host-FS
access; configurable network), explore, tear down. Infrastructure, not governance —
arbiter knows about it and integrates with it, but it is not part of the governance
kernel. Independent of `ca`: CI is path-scoped and version bumps are per-plugin.

## Scope
Framework source: `ORCHESTRATOR.md`, `skills/`, `commands/`, `agents/`, `hooks/`.
Project state lives here in `.codearbiter/`.
- `ca` framework source: `plugins/ca/` — `ORCHESTRATOR.md`, `skills/`, `commands/`,
`agents/`, `hooks/`, `tools/`.
- `ca-sandbox` infrastructure source: `plugins/ca-sandbox/` — `tools/`, `skills/`,
`commands/`. Adds host deps (Docker, nixpacks) scoped to this plugin only.
- Shared project state lives here in `.codearbiter/`.

## NOT this project
Not a vendored/multi-platform framework. Not an enterprise compliance suite.
Claude Code only. Solo developer. See `legacy/ASSESSMENT.md` for the v2 cut list.
Claude Code only. Solo developer. `ca-sandbox` is the deliberate, recorded
infrastructure exception (ADR-0007), not a precedent for arbitrary co-location of a
third plugin. See `legacy/ASSESSMENT.md` for the v2 cut list.
58 changes: 58 additions & 0 deletions .codearbiter/decisions/0007-second-plugin-ca-sandbox.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
---
status: accepted
date: 2026-06-20
title: Host a second sibling plugin (ca-sandbox) in the codeArbiter repo/marketplace
decided-by: SUaDtL@users.noreply.github.com
supersedes: none
governs: .claude-plugin/marketplace.json, .codearbiter/CONTEXT.md, plugins/ca-sandbox/*
---

# ADR-0007 — Host a second sibling plugin (ca-sandbox) in the codeArbiter repo/marketplace

## Status
Accepted — ratified 2026-06-20 by SUaDtL@users.noreply.github.com.

## Context
The 2026-06-20 brainstorm produced `ca-sandbox`: a locally-hosted GitHub-Codespace equivalent that
pulls an untrusted repo into an ephemeral, isolated container (no host-FS access; configurable
network). This is **infrastructure**, not governance — it sits at the edge of codeArbiter's stated
identity. `CONTEXT.md` frames this repo as "the orchestration framework itself" and `marketplace.json`
describes a "Single-plugin marketplace." Shipping ca-sandbox therefore expands the repo's identity, and
the maintainer chose to do so rather than spin up a separate repo, because the marketplace `plugins`
array already supports multiple entries and ca-sandbox integrates tightly with arbiter (its exec seam
is the natural home for the farm dispatcher's deferred `item-3` process-level sandbox).

## Decision
codeArbiter's repo and marketplace host a **second, sibling plugin `plugins/ca-sandbox/`**, distinct
from the `ca` governance plugin. The two plugins are independent: CI is **path-scoped** so that a
change touching only sandbox paths skips every `ca` check (refs graph, version-bump guard, tools
tests) and a change touching only `ca` paths skips every ca-sandbox check. The `ca` governance
plugin's identity and gates are unchanged; ca-sandbox is infrastructure that arbiter knows about and
integrates with, not part of the governance kernel.

## Alternatives considered
- **Separate repository, referenced by the marketplace** — declined. Cleaner identity separation, but
a second repo to manage for a solo dev and looser coupling to `farm.ts` (the intended `item-3`
integration point).
- **A tool inside the `ca` plugin** (`plugins/ca/tools/sandbox`) — declined. It would fold
infrastructure into the governance plugin, blurring the "orchestration, not infrastructure"
boundary and coupling the two release cadences.
- **Standalone script, not a plugin** — declined. Loses marketplace distribution and the gated
skill/command surface the feature warrants.

## Consequences
Easier: ca-sandbox ships through the existing marketplace, develops alongside arbiter, and has a clean
seam for the farm `item-3` sandbox. The `ca` plugin stays focused. Harder: the repo's identity is now
"a marketplace of a governance plugin plus an infrastructure sibling," which `CONTEXT.md` and the
marketplace description must state explicitly. CI must learn two plugins via path-scoped jobs, and the
version-bump guard must apply per-plugin. ca-sandbox adds host dependencies (Docker, nixpacks) that
`ca` never required — these are scoped to the sandbox plugin and must be detected-and-messaged, not
assumed.

## Risks
Scope creep: a second plugin invites a third, eroding the framework's focus. Mitigation: ca-sandbox is
the deliberate, recorded exception, not a precedent for arbitrary co-location. Path-scoped CI is the
load-bearing assumption — if it is mis-wired, a sandbox change could silently ship `ca` unvalidated (or
vice versa); the CI work must prove isolation. This decision is proven wrong if the two plugins'
coupling forces constant cross-plugin changes (showing they were never truly independent), at which
point either merging them or splitting to separate repos reopens.
45 changes: 45 additions & 0 deletions .codearbiter/decisions/decision-log.md
Original file line number Diff line number Diff line change
Expand Up @@ -214,3 +214,48 @@ carry the authoritative `status: accepted` frontmatter and a ratification line i
same decisions, not a new decision.

---

## DECISION-0007 — ADR-0007 — Host a second sibling plugin (ca-sandbox) in the repo/marketplace

**Date:** 2026-06-20
**Status:** proposed
**Supersedes:** none
**Decided by:** SUaDtL@users.noreply.github.com
**Decision category:** architecture/governance
**Artifact-section-hash:** n/a

### Variance summary
- **Artifact position:** CONTEXT.md frames the repo as "the orchestration framework itself"; marketplace.json says "Single-plugin marketplace."
- **Scaffold position:** The marketplace `plugins` array supports multiple entries; the ca-sandbox brainstorm needs a home and integrates with farm.ts.
- **Status type:** open-decision-closure

### Decision
Host `ca-sandbox` as a second, sibling plugin (`plugins/ca-sandbox/`) in this repo/marketplace,
distinct from the `ca` governance plugin, with path-scoped CI so neither plugin's changes trigger the
other's checks. ca-sandbox is infrastructure arbiter integrates with, not part of the governance
kernel; the `ca` plugin's identity and gates are unchanged.

### SMARTS rationale
Maintainable + Scalable-at-current-scale favored co-location over a separate repo (one less repo for a
solo dev; tight `farm.ts` item-3 coupling) while path-scoped CI preserves independence. Securable held
the line that the governance plugin's gates must not absorb infrastructure concerns — hence sibling,
not embedded.

### Implementation implication
Update `.codearbiter/CONTEXT.md` and `.claude-plugin/marketplace.json` descriptions to state the
two-plugin shape; add the `{ "name": "ca-sandbox", "source": "./plugins/ca-sandbox" }` marketplace
entry; parameterize/duplicate CI (check-plugin-refs, version-bump, tools tests) per-plugin by path.
Re-evaluation trigger: if the two plugins require constant cross-plugin changes, reopen to merge or
split to separate repos.

---

## Ratification — 2026-06-20

DECISION-0007 advanced from `proposed` to **`accepted`** on explicit user instruction
(SUaDtL@users.noreply.github.com), ratified 2026-06-20. The ADR file
(`0007-second-plugin-ca-sandbox.md`) carries the authoritative `status: accepted` frontmatter and a
ratification line in its `## Status` section. No content was superseded — ratification is the
maturation of this decision, not a new one.

---
Loading
Loading