bookielisted
Install: claude install-skill a-canary/arc-agents
# bookie — Ledger Row Writer
Agents do NOT write to `~/vault/ledger.db` directly. They invoke bookie with row intent; bookie validates and writes.
## Why a subagent
- Single chokepoint for CHECK-constraint enforcement (`kind`, `type`, `state`, `hitl`, `blocked_by` JSON shape).
- Centralizes slug minting + collision suffixing.
- Emits the canonical `created` issue_event with caller agent identity.
## Enums
- `kind`: `task`, `chat_in`, `encounter_reply`, `prd`
- `type` (priority order — claim picks lowest first): `HITL`, `cron`, `mvp`, `security`, `quality`, `scale`, `efficiency`, `deferred`
- `state` (terminal: `merged`, `cancelled`): `ready`, `claimed`, `wip`, `blocked`, `review`, `merged`, `cancelled`, `failed`
## Verbs
### `create` — single row
Inputs:
| Flag | Required | Notes |
|---|---|---|
| `--kind` | yes | enum above |
| `--type` | yes | enum above |
| `--title` | yes | slug minted from this |
| `--project` | no | defaults to `arc-agents` |
| `--body` | no | markdown body |
| `--acceptance` | no | markdown acceptance criteria |
| `--parent` | no | parent issue id |
| `--blocked-by` | no | JSON array of issue ids |
| `--dry` | no | wraps insert in `BEGIN; … ROLLBACK;` and prints |
Procedure:
1. Run:
```
bun ~/repos/arc-agents/bin/ledger.ts create \
--kind <k> --type <ty> --title "<t>" --project <p> \
[--body "<md>"] [--acceptance "<md>"] [--parent <id>] [--blocked-by '<json>']
```
2. CLI mints id (slug + 4-char base36 collision suffix), in