@lifeaitools/rdc-skills 0.35.10 → 0.35.13

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.
@@ -1,4 +1,4 @@
1
- interface:
2
- display_name: "Behavior Audit"
3
- short_description: "Audit Claude and Codex behavior against shared rules."
4
- default_prompt: "Run a behavior audit for the last seven days and write the evidence bundle to a report directory."
1
+ interface:
2
+ display_name: "Behavior Audit"
3
+ short_description: "Audit Claude and Codex behavior against shared rules."
4
+ default_prompt: "Run a behavior audit for the last seven days and write the evidence bundle to a report directory."
@@ -76,14 +76,14 @@ Read the task title and description, then:
76
76
  ```sql
77
77
  SELECT get_work_items_by_epic('<epic-id>');
78
78
  ```
79
- - Read `design_review_state` and `status` for every executable child.
80
- - Only `automatic_approved`, `human_approved`, or legacy `not_required` rows may be considered for dispatch.
81
- - For `pending`, `needs_human`, or `rejected`, write an `admission_refocus` receipt, keep the child blocked, and route it to the reviewer/planner. **Do not dispatch it, retry it, or call the epic complete.**
79
+ - Read `design_review_required`, `design_review_state`, and `status` for every executable child.
80
+ - Ordinary rows (`design_review_required = false`) may be considered for dispatch regardless of a legacy state. Only an explicitly opted-in row requires `automatic_approved` or `human_approved`.
81
+ - For an explicitly opted-in row in `pending`, `needs_human`, or `rejected`, write an `admission_refocus` receipt, keep the child blocked, and route it to the reviewer/planner. **Do not dispatch it, retry it, or call the epic complete.**
82
82
 
83
83
  1a. **Run the durable CodeFlow supervisor before each wave and after every gate-changing action.**
84
84
  - Invoke `runOrchestrator()` with the project manifest, `SupabaseStateStore`, and the real phase dispatcher. It is the sole authority for resuming/refocusing a phase DAG; do not reconstruct waves by hand from task prose.
85
- - A returned `admission_refocus` or `pipeline_blocked` is a durable hold, not a failed attempt to work around. Preserve its task state and route the required Design Review or validator closure.
86
- - Only a returned `pipeline_complete` whose phase tasks are all design-review admitted **and** durably `done` permits an epic completion claim. If the project lacks a real dispatcher/manifest, report `BLOCKED: CodeFlow supervisor entrypoint unavailable` rather than emulating completion.
85
+ - A returned `admission_refocus` or `pipeline_blocked` is a durable hold, not a failed attempt to work around. Preserve its task state and route an explicitly requested Design Review or validator closure.
86
+ - Only a returned `pipeline_complete` whose phase tasks are durably `done` permits an epic completion claim. If the project lacks a real dispatcher/manifest, report `BLOCKED: CodeFlow supervisor entrypoint unavailable` rather than emulating completion.
87
87
 
88
88
  **Read the epic's `plan_ref`, `spec_ref`, `architecture_ref`, and `scoping_statement`** (columns on the epic row). `scoping_statement` bounds what this build may touch. If `architecture_ref` is set, this epic crosses an architectural boundary — read that doc now, before classifying or dispatching any task, and carry it into every agent prompt below.
89
89
 
@@ -0,0 +1,128 @@
1
+ ---
2
+ name: open
3
+ description: rdc:open ([slug]) — orient before working; answers where you are and what the target is from the registry, then names the harness shape
4
+ ---
5
+
6
+ > **⚠️ OUTPUT CONTRACT (READ FIRST):** `guides/output-contract.md`
7
+ > Checklist-only output. No tool-call narration. No raw MCP/JSON/log dumps.
8
+ > One checklist upfront, updated in place, shown again at end with a 1-line verdict.
9
+
10
+ # rdc:open — you are here, this is the thing, use this shape
11
+
12
+ ## Why this exists
13
+
14
+ Orientation ran **3.4× production work** across a measured 36-hour window —
15
+ 47.6% of tool calls establishing position and identity, 14.1% actually changing
16
+ something. `git rev-parse` alone was 316 calls, 6% of everything.
17
+
18
+ Cross-session rediscovery was **1.4%**. That number is the point: agents are not
19
+ forgetting what they learned, they are working new ground almost every time and
20
+ nothing tells them where they are. This is a surfacing problem, not a memory
21
+ problem, so caching buys nothing and an opening statement buys everything.
22
+
23
+ ## When to Use
24
+
25
+ - **First call of any session that will change something.** Before the first
26
+ read, not after the third `git status`.
27
+ - When you are handed a slug and do not know its runtime, port, or host.
28
+ - After a compaction, when position facts have aged out of context.
29
+ - Before any deploy — `rdc:deploy` assumes you already know the target's shape.
30
+
31
+ Not needed for a pure conversation turn.
32
+
33
+ ## What it answers
34
+
35
+ | Question | Source | Never |
36
+ |---|---|---|
37
+ | which repo / worktree / branch am I in | `git rev-parse`, `git status` | assumed from a hardcoded path |
38
+ | is my tree clean, am I behind | `git status -sb` | inferred from elapsed time |
39
+ | what IS this slug | the registry | guessed from the directory name |
40
+ | runtime, port, PM2 name, host | the registry | inferred from files on disk |
41
+ | who depends on it | the registry | assumed to be nothing |
42
+
43
+ **Two guesses this replaces, both measured wrong in practice:** filesystem
44
+ inference said `node-build` where the registry says `ts-server`; and
45
+ directory-name-as-slug fails outright — `packages/codeflow` is `codeflow-mcp`,
46
+ `apps/admin` is `portal`.
47
+
48
+ ## The registry is the gate — no register, no go
49
+
50
+ `open` resolves a slug against the **database**, never a file. A target that is
51
+ not registered is not "probably fine to work on", it is **unresolved**, and the
52
+ correct output names what is missing rather than guessing a default.
53
+
54
+ This is why `projects.json` was demoted to a generated artifact and
55
+ `repo_registry` became source of truth: a file-based config is a side door
56
+ around the registration gate, and a side door means work can begin on something
57
+ the system never formally established.
58
+
59
+ `open` reports that state honestly rather than papering it:
60
+
61
+ ```
62
+ weDoNotHold: ["product_class"] # regen-root — repo shape known, class not
63
+ weDoNotHold: ["repository"] # prt — slug not resolvable to a repo yet
64
+ status: "unresolved" # never a guessed default
65
+ ```
66
+
67
+ An `unresolved` open is a finding, not a failure. Register the target, then open
68
+ it again.
69
+
70
+ ## What open hands to land and deploy
71
+
72
+ `open` returns the **source key** every downstream verb dispatches on:
73
+
74
+ | field | meaning | example |
75
+ |---|---|---|
76
+ | `workModel` | repo shape | `standalone` · `mono` |
77
+ | `productClass` | what the deliverable is | `package` · `app` · `site` · `mcp` |
78
+ | `delivery` | resolved ship contract | `{production:"registry-release", deploy:false, release:true}` |
79
+ | `sourceBoundary` | where work is permitted | absolute path, or repo-relative subtree |
80
+ | `weDoNotHold` | what is NOT established | `["product_class"]` |
81
+
82
+ Together `workModel.productClass` is the source half of the routing key —
83
+ `standalone.package`, `mono.app`, `mono.site` — which pairs with a destination
84
+ type to select the router (`standalone.package.npm`, `mono.site.netlify`).
85
+
86
+ **Record only WHAT, never HOW.** Persist the slug set being worked on; do not
87
+ copy `delivery`, `productClass`, or boundary facts into a session file. Those
88
+ have exactly one home each, and a copy starts drifting the moment it is written.
89
+ Downstream verbs re-resolve from the registry by slug.
90
+
91
+ ## Steps
92
+
93
+ 1. **Position.** Resolve repo, worktree, branch @ sha, upstream, dirty count.
94
+ Relative paths from here are correct by construction; a hardcoded
95
+ `C:/Dev/regen-root/...` from a lane points at a *different checkout*.
96
+ 2. **Target.** Resolve the slug through the registry, printing runtime, port,
97
+ host, deploy path and dependents. `monorepo_path` NULL means a standalone
98
+ repo, not in this tree.
99
+ 3. **Harness.** Name the shape the target's class implies:
100
+
101
+ | class | build | dev | prod |
102
+ |---|---|---|---|
103
+ | `apps/<name>` | `pnpm --filter @regen/<name> build` | PM2 @ Vultr | Coolify |
104
+ | `packages/<name>` | `pnpm --filter @regen/<name> build` | imported | `npm publish` |
105
+ | `sites/`, `models/` | static/vite | PM2 @ Vultr | Coolify |
106
+ | standalone | its own tooling | — | Coolify |
107
+
108
+ 4. **State the ground in one line** and start. Do not re-derive it later in the
109
+ turn.
110
+
111
+ ## Checklist
112
+
113
+ ```
114
+ [ ] position resolved — repo, worktree, branch, dirty count
115
+ [ ] target resolved from the registry (or: no slug given, position only)
116
+ [ ] unresolved fields named explicitly, never defaulted
117
+ [ ] harness shape named for the target's class
118
+ [ ] blockers noted — behind upstream, dirty tree, service down
119
+ ```
120
+
121
+ ## Related
122
+
123
+ - `rdc:flow` — declares what KIND of work this is. `rdc:open` says where you are;
124
+ `rdc:flow` says what you are doing. Both, in that order.
125
+ - `rdc:status` — open epics and queue. That is the work; this is the ground.
126
+ - `rdc:deploy` — consumes the source key this skill resolves.
127
+ - `$LIFEAI_ENV/docs/GATES-GUARDS-DENIES.md` — when a guard stops you, that names
128
+ the shape that works.
@@ -126,7 +126,7 @@ rdc:plan <epic-id> --unattended
126
126
 
127
127
  Check `PLAN_STATUS.task_count > 0` before continuing.
128
128
  If 0 tasks created: escalate via advisor, then skip if still unresolved.
129
- If `PLAN_STATUS.held_for_design_review > 0`: do not silently promote those tasks to todo. Log the held task IDs and their durable assessment, request human Design Review, and continue only with the independently admitted portion of the epic.
129
+ If `PLAN_STATUS.held_for_design_review > 0`: these are explicitly opted-in Design Review tasks. Do not silently promote them to todo. Log the held task IDs and their durable assessment, request the named review, and continue only with ordinary or already-admitted work.
130
130
 
131
131
  ### 3c. Build
132
132
 
@@ -140,7 +140,7 @@ Agents receive the relevant guide file from `.rdc/guides/` (fallback: `.rdc/guid
140
140
 
141
141
  After each wave: check `BUILD_STATUS`. If `escalated: true`, log the escalation
142
142
  in the overnight doc and continue — don't stop the loop.
143
- After each wave and after every resumed epic, require the `runOrchestrator()` receipt from `rdc:build`. `admission_refocus` or `pipeline_blocked` means the epic is held for durable Design Review or validator closure; log that state and do not hand-reconstruct a dispatch wave.
143
+ After each wave and after every resumed epic, require the `runOrchestrator()` receipt from `rdc:build`. `admission_refocus` or `pipeline_blocked` means the epic is held for an explicitly requested Design Review or validator closure; log that state and do not hand-reconstruct a dispatch wave.
144
144
 
145
145
  **Mandatory code-review gate inherited from rdc:build (Step 9b).** Every wave inside `rdc:build` runs a `pr-review-toolkit:code-reviewer` pass before the next wave dispatches. Critical/high findings reopen the affected work items to `todo` and the next wave fixes them. Overnight does not skip or weaken this gate. If a wave's code-review escalates twice, advisor decides; otherwise the loop continues.
146
146
 
@@ -151,7 +151,7 @@ rdc:review --unattended
151
151
  ```
152
152
 
153
153
  Check `REVIEW_STATUS.verdict`:
154
- - `"CLEAN"`: re-run the durable CodeFlow supervisor. Mark an epic `done` only when its receipt is `pipeline_complete` and every executable child is design-review admitted and validator-closed (`status = done`); otherwise preserve the epic/task hold and log `admission_refocus` or `pipeline_blocked`.
154
+ - `"CLEAN"`: re-run the durable CodeFlow supervisor. Mark an epic `done` only when its receipt is `pipeline_complete` and every executable child is validator-closed (`status = done`); otherwise preserve the epic/task hold and log `admission_refocus` or `pipeline_blocked`.
155
155
  - `"HAS_ISSUES"` with `escalations > 0`: log issues, push what's clean, continue
156
156
  - `"HAS_ISSUES"` with `escalations = 0` (all auto-fixed): push, continue
157
157
 
@@ -244,7 +244,7 @@ Provide the advisor with:
244
244
  - NEVER let agents overlap on the same files
245
245
  - Push after every epic, not just at the end
246
246
  - Update Supabase work items in real time throughout
247
- - **A clean review never overrides a durable Design Review hold, an incomplete checklist, or missing validator closure**
247
+ - **A clean review never overrides an explicitly requested Design Review hold, an incomplete checklist, or missing validator closure**
248
248
  - Max 2 hours per epic — if exceeded, skip and log `TIMEOUT`
249
249
  - If credential daemon goes down mid-session: write current state to overnight doc, push, exit gracefully
250
250
  - If git push fails: log the failure, attempt rebase, retry once — do not force push
@@ -268,21 +268,21 @@ description: rdc:plan (topic) — produce architecture, decisions and an epic wi
268
268
  p_scoping_statement := '<one paragraph: what is explicitly in scope and what is explicitly out of scope for this epic>'
269
269
  );
270
270
  ```
271
- - Attach a **Design Review contract** to every executable work package. It must contain registered architecture-evidence reference(s), declared target boundary, and a concrete alignment claim; independently observable acceptance criteria plus required `decomp-*` and `test-*` rows; and estimated files/LOC, declared surfaces, and change kind.
272
- - One executable task per work package only through `upsert_admitted_work_item(...)`, never a direct `work_items` write. Supply a stable source fingerprint, the task checklist, and the Design Review contract. `insert_work_item` remains valid for the parent epic only.
273
- - Do not invent architecture evidence. Missing or unregistered evidence, broad refactors, multi-surface work, or disproportionate contracts intentionally route to human Design Review.
274
- - Read the durable result for each package: `dispatchable: true` / `automatic_approved` may become `todo`; `dispatchable: false` / `needs_human` or `pending` stays `blocked`, gets `needs-human-design-review`, and is reported as held.
271
+ - One executable task per work package only through `upsert_admitted_work_item(...)`, never a direct `work_items` write. Supply a stable source fingerprint and the task checklist. `insert_work_item` remains valid for the parent epic only.
272
+ - **Default:** pass `p_design_review := NULL`. Ordinary work is created `todo` / `not_required` and proceeds to the post-build `rdc:review` gate.
273
+ - **Only when Dave explicitly requests Design Review for a named work package:** attach a Design Review contract with registered architecture-evidence reference(s), declared target boundary, a concrete alignment claim, independently observable acceptance criteria, and estimated files/LOC, declared surfaces, and change kind. Do not infer this request from scope, risk, architecture, or missing evidence.
274
+ - Read the durable result only for an explicitly opted-in package: `dispatchable: true` / `automatic_approved` may become `todo`; `dispatchable: false` / `needs_human` or `pending` stays `blocked`, gets `needs-human-design-review`, and is reported as held.
275
275
  - **Additionally, write decomposition rows as checklist items** on each task, using id format `decomp-<surface>-<slug>`.
276
276
  The task checklist MUST include both the atomic `decomp-*` rows and the `test-*` verification rows.
277
277
  The `decomp-*` row text must include the route/file, action, expected result, and evidence artifact.
278
278
  - **Write test plan items as checklist items** on each task, using id format `test-<type>-<slug>`.
279
- - **If (and only if) the epic's `architecture_ref` is set** (this work package crosses an architectural boundary), ALSO write one required `architecture-fidelity-<slug>` checklist row on that task: text names the specific architecture doc + the boundary being touched, e.g. `"implementation matches docs/systems/codeflow/ARCHITECTURE.md § local-index registration"`. This is checked at CLOSE time by `update_work_item_status(..., 'done')`, independently of the Design Review contract's own `dispatchable`/`needs_human` admission check above — the exit gate hard-rejects closure on any task under an architecture_ref epic that lacks this row. Do not add it to tasks under an epic with no `architecture_ref`; that would hold ordinary work for a review it doesn't need.
279
+ - **If (and only if) the epic's `architecture_ref` is set** (this work package crosses an architectural boundary), ALSO write one required `architecture-fidelity-<slug>` checklist row on that task: text names the specific architecture doc + the boundary being touched, e.g. `"implementation matches docs/systems/codeflow/ARCHITECTURE.md § local-index registration"`. This is checked at CLOSE time by `update_work_item_status(..., 'done')`; it is evidence for `rdc:review`, not an admission hold. Do not add it to tasks under an epic with no `architecture_ref`.
280
280
  ```sql
281
281
  SELECT upsert_admitted_work_item(
282
282
  p_source_fingerprint := 'plan:<epic-id>:wp-2-ast-scanner:v1',
283
283
  p_parent_id := '<epic_id>',
284
284
  p_title := 'WP-2: AST Scanner',
285
- p_description := 'Bounded scanner work package with its durable Design Review contract.',
285
+ p_description := 'Bounded scanner work package with its implementation and verification checklist.',
286
286
  p_checklist := '[
287
287
  {"id":"decomp-api-scan-success","text":"api: GET /api/layout/scan?dir=apps/studio/src returns 200 JSON with roots[] and warnings[]; evidence: route probe output","required":true,"checked":false},
288
288
  {"id":"test-assert-scanner-filters","text":"assert: scanFile returns only container components","required":true,"checked":false},
@@ -292,11 +292,7 @@ description: rdc:plan (topic) — produce architecture, decisions and an epic wi
292
292
  {"id":"tsc-clean","text":"npx tsc --noEmit passes","required":true,"checked":false}
293
293
  -- Only add an architecture-fidelity-* row here too if this task's epic has architecture_ref set.
294
294
  ]'::jsonb,
295
- p_design_review := '{
296
- "architecture":{"alignment_claim":"Scanner change stays within the declared analysis boundary.","evidence_refs":["<registered-reference>"],"target_boundaries":["<declared-boundary>"]},
297
- "acceptance":{"criteria":["scanner focused test passes"]},
298
- "proportionality":{"estimated_files":2,"estimated_loc":180,"declared_surfaces":["<surface>"],"change_kind":"feature"}
299
- }'::jsonb
295
+ p_design_review := NULL -- Add a contract only for an explicitly requested Design Review.
300
296
  );
301
297
  ```
302
298
  - Agents MUST tick each `decomp-*`, `test-*`, and (when present) `architecture-fidelity-*` checklist item as they implement/verify it via `update_checklist_item(..., p_actor_session_id := '<agent-session-id>', p_actor_role := 'agent')`
@@ -326,7 +322,7 @@ choose the most conservative/reversible approach and document the decision.
326
322
  - Each work package must be independently executable by an agent
327
323
  - No file overlap between work packages
328
324
  - Include test requirements in every work package
329
- - **No executable work item is dispatchable without a durable Design Review decision; a planner cannot self-approve with prose-only evidence**
325
+ - **Design Review is never inferred.** It is added only for a named work package when Dave explicitly requests it; ordinary work reaches `rdc:review` after implementation.
330
326
  - Reference affected CLAUDE.md files in each work package description
331
327
  - Reference the relevant guide file from `.rdc/guides/` (fallback: `.rdc/guides/`) for agent context
332
328
  - **If a work package involves creating a new deployed app:** the task description MUST say "Use `rdc:deploy new <slug>` — do NOT create the Coolify app manually. Read `docs/runbooks/coolify-app-templates.json` first." Assign it to an `infra` agent. This is a hard rule — manually created apps have consistently been misconfigured.
@@ -1,101 +1,101 @@
1
- {
2
- "manifest_version": 1,
3
- "skill": "rdc:onramp",
4
- "description": "Tier-2 self-test for rdc:onramp enrollment skill",
5
- "tier": 2,
6
- "sandbox": true,
7
- "env": {
8
- "RDC_TEST": "1"
9
- },
10
- "invocation": {
11
- "slug": "onramp-selftest",
12
- "name": "Onramp Self Test",
13
- "flags": ["--archetype", "working-landscapes", "--dry-run"]
14
- },
15
- "fixture": {
16
- "prompt": "rdc:onramp onramp-selftest --name \"Onramp Self Test\" --archetype working-landscapes --dry-run",
17
- "env": { "RDC_\u0054EST": "1" },
18
- "slow": true
19
- },
20
- "assertions": {
21
- "exit_code": 0,
22
- "stdout_contains": ["Preflight", "Resolve drift"]
23
- },
24
- "acceptance": {
25
- "output_contains": ["Preflight", "Resolve drift", "disk-ahead", "already-enrolled"],
26
- "output_not_contains": ["hand-edit _context.md", "raw insert"]
27
- },
28
- "legacy_assertions": [
29
- {
30
- "type": "exit_code",
31
- "expect": 0,
32
- "description": "Skill exits cleanly under RDC_TEST with --dry-run"
33
- },
34
- {
35
- "type": "stdout_contains",
36
- "pattern": "Preflight",
37
- "description": "Checklist begins with Preflight step"
38
- },
39
- {
40
- "type": "stdout_contains",
41
- "pattern": "Resolve drift",
42
- "description": "Drift resolution step is emitted"
43
- },
44
- {
45
- "type": "stdout_contains",
46
- "pattern": "\\[RDC_TEST\\]",
47
- "description": "Sandbox short-circuit marker present — confirms external calls were skipped"
48
- },
49
- {
50
- "type": "file_absent",
51
- "path": "places/onramp-selftest/_context.md",
52
- "description": "Scaffolder MUST NOT write _context.md — projection-drift violation gate"
53
- }
54
- ],
55
- "door_contracts": [
56
- {
57
- "name": "enroll_place_signature",
58
- "description": "enroll_place RPC must accept (text, text, jsonb, text) and return jsonb",
59
- "type": "rpc_introspection",
60
- "project_id": "uvojezuorjgqzmhhgluu",
61
- "query": "SELECT p.proname, pg_get_function_identity_arguments(p.oid) AS args, pg_get_function_result(p.oid) AS returns FROM pg_proc p WHERE p.proname = 'enroll_place';",
62
- "expect_args_contains": ["text", "jsonb"],
63
- "expect_returns": "jsonb"
64
- },
65
- {
66
- "name": "insert_work_item_accepts_project_node_id",
67
- "description": "insert_work_item must accept p_project_node_id parameter",
68
- "type": "rpc_introspection",
69
- "project_id": "uvojezuorjgqzmhhgluu",
70
- "query": "SELECT proname, pg_get_function_identity_arguments(oid) FROM pg_proc WHERE proname = 'insert_work_item';",
71
- "expect_args_contains": ["p_project_node_id"]
72
- }
73
- ],
74
- "disk_ahead_test": {
75
- "description": "disk-ahead state must STOP and open a reconciliation work item",
76
- "setup": "mkdir -p places/disk-ahead-test",
77
- "invocation_slug": "disk-ahead-test",
78
- "invocation_name": "Disk Ahead Test",
79
- "assertions": [
80
- {
81
- "type": "stdout_contains",
82
- "pattern": "disk-ahead",
83
- "description": "Skill identifies the disk-ahead state"
84
- },
85
- {
86
- "type": "stdout_contains",
87
- "pattern": "STOP",
88
- "description": "Skill STOPs on disk-ahead"
89
- },
90
- {
91
- "type": "exit_nonzero",
92
- "description": "Skill exits non-zero on disk-ahead (not a clean enrollment)"
93
- }
94
- ],
95
- "teardown": "rmdir places/disk-ahead-test 2>/dev/null || true"
96
- },
97
- "idempotency_test": {
98
- "description": "Running rdc:onramp twice for already-enrolled should produce zero new writes",
99
- "note": "Under RDC_TEST=1 this is verified by checking that [RDC_TEST] skipping markers appear (not real insert calls) and the checklist reports already-enrolled"
100
- }
101
- }
1
+ {
2
+ "manifest_version": 1,
3
+ "skill": "rdc:onramp",
4
+ "description": "Tier-2 self-test for rdc:onramp enrollment skill",
5
+ "tier": 2,
6
+ "sandbox": true,
7
+ "env": {
8
+ "RDC_TEST": "1"
9
+ },
10
+ "invocation": {
11
+ "slug": "onramp-selftest",
12
+ "name": "Onramp Self Test",
13
+ "flags": ["--archetype", "working-landscapes", "--dry-run"]
14
+ },
15
+ "fixture": {
16
+ "prompt": "rdc:onramp onramp-selftest --name \"Onramp Self Test\" --archetype working-landscapes --dry-run",
17
+ "env": { "RDC_\u0054EST": "1" },
18
+ "slow": true
19
+ },
20
+ "assertions": {
21
+ "exit_code": 0,
22
+ "stdout_contains": ["Preflight", "Resolve drift"]
23
+ },
24
+ "acceptance": {
25
+ "output_contains": ["Preflight", "Resolve drift", "disk-ahead", "already-enrolled"],
26
+ "output_not_contains": ["hand-edit _context.md", "raw insert"]
27
+ },
28
+ "legacy_assertions": [
29
+ {
30
+ "type": "exit_code",
31
+ "expect": 0,
32
+ "description": "Skill exits cleanly under RDC_TEST with --dry-run"
33
+ },
34
+ {
35
+ "type": "stdout_contains",
36
+ "pattern": "Preflight",
37
+ "description": "Checklist begins with Preflight step"
38
+ },
39
+ {
40
+ "type": "stdout_contains",
41
+ "pattern": "Resolve drift",
42
+ "description": "Drift resolution step is emitted"
43
+ },
44
+ {
45
+ "type": "stdout_contains",
46
+ "pattern": "\\[RDC_TEST\\]",
47
+ "description": "Sandbox short-circuit marker present — confirms external calls were skipped"
48
+ },
49
+ {
50
+ "type": "file_absent",
51
+ "path": "places/onramp-selftest/_context.md",
52
+ "description": "Scaffolder MUST NOT write _context.md — projection-drift violation gate"
53
+ }
54
+ ],
55
+ "door_contracts": [
56
+ {
57
+ "name": "enroll_place_signature",
58
+ "description": "enroll_place RPC must accept (text, text, jsonb, text) and return jsonb",
59
+ "type": "rpc_introspection",
60
+ "project_id": "uvojezuorjgqzmhhgluu",
61
+ "query": "SELECT p.proname, pg_get_function_identity_arguments(p.oid) AS args, pg_get_function_result(p.oid) AS returns FROM pg_proc p WHERE p.proname = 'enroll_place';",
62
+ "expect_args_contains": ["text", "jsonb"],
63
+ "expect_returns": "jsonb"
64
+ },
65
+ {
66
+ "name": "insert_work_item_accepts_project_node_id",
67
+ "description": "insert_work_item must accept p_project_node_id parameter",
68
+ "type": "rpc_introspection",
69
+ "project_id": "uvojezuorjgqzmhhgluu",
70
+ "query": "SELECT proname, pg_get_function_identity_arguments(oid) FROM pg_proc WHERE proname = 'insert_work_item';",
71
+ "expect_args_contains": ["p_project_node_id"]
72
+ }
73
+ ],
74
+ "disk_ahead_test": {
75
+ "description": "disk-ahead state must STOP and open a reconciliation work item",
76
+ "setup": "mkdir -p places/disk-ahead-test",
77
+ "invocation_slug": "disk-ahead-test",
78
+ "invocation_name": "Disk Ahead Test",
79
+ "assertions": [
80
+ {
81
+ "type": "stdout_contains",
82
+ "pattern": "disk-ahead",
83
+ "description": "Skill identifies the disk-ahead state"
84
+ },
85
+ {
86
+ "type": "stdout_contains",
87
+ "pattern": "STOP",
88
+ "description": "Skill STOPs on disk-ahead"
89
+ },
90
+ {
91
+ "type": "exit_nonzero",
92
+ "description": "Skill exits non-zero on disk-ahead (not a clean enrollment)"
93
+ }
94
+ ],
95
+ "teardown": "rmdir places/disk-ahead-test 2>/dev/null || true"
96
+ },
97
+ "idempotency_test": {
98
+ "description": "Running rdc:onramp twice for already-enrolled should produce zero new writes",
99
+ "note": "Under RDC_TEST=1 this is verified by checking that [RDC_TEST] skipping markers appear (not real insert calls) and the checklist reports already-enrolled"
100
+ }
101
+ }
@@ -1,12 +1,12 @@
1
- {
2
- "manifest_version": 1,
3
- "skill": "rdc:env",
4
- "description": "Environment status is read-only and reports installed version.",
5
- "fixture": { "prompt": "rdc:env status", "env": { "RDC_\u0054EST": "1" }, "slow": false },
6
- "assertions": { "exit_code": 0, "stdout_contains": ["Environment"] },
7
- "acceptance": {
8
- "output_contains": ["version", "status"],
9
- "output_not_contains": ["force", "delete environment"]
10
- },
11
- "teardown": { "reset_branch": true }
12
- }
1
+ {
2
+ "manifest_version": 1,
3
+ "skill": "rdc:env",
4
+ "description": "Environment status is read-only and reports installed version.",
5
+ "fixture": { "prompt": "rdc:env status", "env": { "RDC_\u0054EST": "1" }, "slow": false },
6
+ "assertions": { "exit_code": 0, "stdout_contains": ["Environment"] },
7
+ "acceptance": {
8
+ "output_contains": ["version", "status"],
9
+ "output_not_contains": ["force", "delete environment"]
10
+ },
11
+ "teardown": { "reset_branch": true }
12
+ }
@@ -1,12 +1,12 @@
1
- {
2
- "manifest_version": 1,
3
- "skill": "rdc:new-model",
4
- "description": "New-model registration begins with the canonical gate.",
5
- "fixture": { "prompt": "rdc:new-model example-model", "env": { "RDC_\u0054EST": "1" }, "slow": true },
6
- "assertions": { "exit_code": 0, "stdout_contains": ["New Model"] },
7
- "acceptance": {
8
- "output_contains": ["canonical", "registration"],
9
- "output_not_contains": ["raw insert", "skip gate"]
10
- },
11
- "teardown": { "reset_branch": true }
12
- }
1
+ {
2
+ "manifest_version": 1,
3
+ "skill": "rdc:new-model",
4
+ "description": "New-model registration begins with the canonical gate.",
5
+ "fixture": { "prompt": "rdc:new-model example-model", "env": { "RDC_\u0054EST": "1" }, "slow": true },
6
+ "assertions": { "exit_code": 0, "stdout_contains": ["New Model"] },
7
+ "acceptance": {
8
+ "output_contains": ["canonical", "registration"],
9
+ "output_not_contains": ["raw insert", "skip gate"]
10
+ },
11
+ "teardown": { "reset_branch": true }
12
+ }
@@ -1,29 +1,29 @@
1
- {
2
- "manifest_version": 1,
3
- "skill": "rdc:refactor",
4
- "description": "Refactor preserves evidence and isolates all dispatched writers.",
5
- "fixture": {
6
- "prompt": "rdc:refactor hook-scope --takeover \"corrective consolidation\"",
7
- "env": { "RDC_\u0054EST": "1" },
8
- "slow": true
9
- },
10
- "assertions": {
11
- "exit_code": 0,
12
- "commits_made": { "min": 0 },
13
- "stdout_contains": ["RDC Refactor"]
14
- },
15
- "acceptance": {
16
- "output_contains": [
17
- "consolidate_work_items_into_epic",
18
- "unique leased worktree",
19
- "collaboration manifest",
20
- "validator"
21
- ],
22
- "output_not_contains": [
23
- "raw update",
24
- "shared working directory",
25
- "archive all"
26
- ]
27
- },
28
- "teardown": { "reset_branch": true }
29
- }
1
+ {
2
+ "manifest_version": 1,
3
+ "skill": "rdc:refactor",
4
+ "description": "Refactor preserves evidence and isolates all dispatched writers.",
5
+ "fixture": {
6
+ "prompt": "rdc:refactor hook-scope --takeover \"corrective consolidation\"",
7
+ "env": { "RDC_\u0054EST": "1" },
8
+ "slow": true
9
+ },
10
+ "assertions": {
11
+ "exit_code": 0,
12
+ "commits_made": { "min": 0 },
13
+ "stdout_contains": ["RDC Refactor"]
14
+ },
15
+ "acceptance": {
16
+ "output_contains": [
17
+ "consolidate_work_items_into_epic",
18
+ "unique leased worktree",
19
+ "collaboration manifest",
20
+ "validator"
21
+ ],
22
+ "output_not_contains": [
23
+ "raw update",
24
+ "shared working directory",
25
+ "archive all"
26
+ ]
27
+ },
28
+ "teardown": { "reset_branch": true }
29
+ }
@@ -1,29 +1,29 @@
1
- {
2
- "manifest_version": 1,
3
- "skill": "rdc:regen-media",
4
- "description": "Regen Media uses local keyless Codex gpt-image-2 as the primary image-generation path and avoids live generation under RDC_TEST.",
5
- "fixture": {
6
- "prompt": "rdc:regen-media generate a 2048x1152 homepage hero image",
7
- "env": { "RDC_TEST": "1" }
8
- },
9
- "assertions": {
10
- "exit_code": 0,
11
- "commits_made": { "min": 0 },
12
- "stdout_contains": ["image_gen", "gpt-image-2"]
13
- },
14
- "acceptance": {
15
- "output_contains": [
16
- "image_gen",
17
- "gpt-image-2",
18
- "--enable image_generation",
19
- "RDC_TEST"
20
- ],
21
- "output_not_contains": [
22
- "OPENAI_API_KEY=",
23
- "generate_gpt_image is the default",
24
- "upload completed",
25
- "raw MCP"
26
- ]
27
- },
28
- "teardown": { "reset_branch": true }
29
- }
1
+ {
2
+ "manifest_version": 1,
3
+ "skill": "rdc:regen-media",
4
+ "description": "Regen Media uses local keyless Codex gpt-image-2 as the primary image-generation path and avoids live generation under RDC_TEST.",
5
+ "fixture": {
6
+ "prompt": "rdc:regen-media generate a 2048x1152 homepage hero image",
7
+ "env": { "RDC_TEST": "1" }
8
+ },
9
+ "assertions": {
10
+ "exit_code": 0,
11
+ "commits_made": { "min": 0 },
12
+ "stdout_contains": ["image_gen", "gpt-image-2"]
13
+ },
14
+ "acceptance": {
15
+ "output_contains": [
16
+ "image_gen",
17
+ "gpt-image-2",
18
+ "--enable image_generation",
19
+ "RDC_TEST"
20
+ ],
21
+ "output_not_contains": [
22
+ "OPENAI_API_KEY=",
23
+ "generate_gpt_image is the default",
24
+ "upload completed",
25
+ "raw MCP"
26
+ ]
27
+ },
28
+ "teardown": { "reset_branch": true }
29
+ }