@lifeaitools/rdc-skills 0.35.21 → 0.35.22
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/.claude-plugin/plugin.json +1 -1
- package/.github/workflows/self-test.yml +34 -34
- package/.rdc/evidence/orchestrator-rework-strikes/a9fad8b4716ee35e5f5d0047.json +1 -0
- package/.rdc/last_seen.json +8 -0
- package/MANIFEST.md +224 -224
- package/guides/agents/backend.md +102 -102
- package/guides/agents/content.md +94 -94
- package/guides/agents/cs2.md +56 -56
- package/guides/agents/data.md +86 -86
- package/guides/agents/design.md +77 -77
- package/guides/agents/frontend.md +91 -91
- package/guides/agents/infrastructure.md +81 -81
- package/guides/agents/setup.md +272 -272
- package/guides/agents/verify.md +119 -119
- package/guides/agents/viz.md +106 -106
- package/guides/orchestration-epic.md +17 -17
- package/package.json +1 -1
- package/scripts/lib/runner.mjs +20 -5
- package/scripts/rdc-design-compare-cli.mjs +256 -0
- package/scripts/self-test.mjs +1459 -1459
- package/skills/behavior-audit/agents/openai.yaml +4 -4
- package/skills/design/SKILL.md +122 -2
- package/skills/tests/onramp.test.json +101 -101
- package/skills/tests/rdc-env.test.json +12 -12
- package/skills/tests/rdc-new-model.test.json +12 -12
- package/skills/tests/rdc-refactor.test.json +29 -29
- package/skills/tests/rdc-regen-media.test.json +29 -29
|
@@ -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."
|
package/skills/design/SKILL.md
CHANGED
|
@@ -36,6 +36,73 @@ RDC-owned design execution for Studio and LIFEAI interfaces. This skill is the S
|
|
|
36
36
|
- `rdc:design critique <target>` — UX/design critique
|
|
37
37
|
- `rdc:design polish <target>` — final visual and interaction pass
|
|
38
38
|
- `rdc:design craft <feature>` — shape and build a token-aware UI feature
|
|
39
|
+
- `rdc:design prototype <description>` — build a new UI surface for visual review
|
|
40
|
+
- `rdc:design compare <brief>` — dispatch the same design brief to a Claude-side pass AND a Codex-side pass in parallel, then synthesize a structured comparison (any mode also accepts a trailing `--compare` flag to run the same dual-dispatch before finalizing that mode's output)
|
|
41
|
+
|
|
42
|
+
## New-Surface Gate — PRODUCT.md / DESIGN.md Before Source Mutation
|
|
43
|
+
|
|
44
|
+
> Promoted from `rdc:onramp` (Phase 1 disk-tree scaffold + Phase 4 brand-book rubric gate),
|
|
45
|
+
> which is the existing model for this pattern — read `skills/onramp/SKILL.md` §Phase 1.5,
|
|
46
|
+
> §Phase 4.6 if this section is ever unclear. Onramp scoped this to `places/<slug>/`; this
|
|
47
|
+
> section is the same mechanism generalized to any new or reshaped product surface. Approved:
|
|
48
|
+
> Dave, direct instruction, 2026-09-05/06 session — "the existing onramp version is the model;
|
|
49
|
+
> it was simply scoped too narrowly."
|
|
50
|
+
|
|
51
|
+
**Applies to:** `craft`, `prototype`, and any other mode about to build a **new or reshaped
|
|
52
|
+
product surface** — a new app/site/package root, a new top-level route, or a rename/merge/
|
|
53
|
+
split of an existing screen map. **Does not apply to** `edit`, `audit`, `critique`, `polish`,
|
|
54
|
+
`tokens`, `palette`, `theme`, or `colorize` against an already-documented surface — those
|
|
55
|
+
operate against an existing PRODUCT.md/DESIGN.md, they don't have to create one first.
|
|
56
|
+
|
|
57
|
+
**Small-fix exemption — same boundary as `rdc:fixit`:** a change touching **fewer than 5
|
|
58
|
+
files** that does **not** introduce a new route, a new top-level screen, or a new app/site
|
|
59
|
+
root is exempt. Anything at or above that, or anything that adds a route/screen/app root
|
|
60
|
+
regardless of file count, is in scope for this gate.
|
|
61
|
+
|
|
62
|
+
### The gate
|
|
63
|
+
|
|
64
|
+
Before writing or editing any source file for an in-scope task:
|
|
65
|
+
|
|
66
|
+
1. **Locate the surface root** — the app/site/package directory, or the repo root for a
|
|
67
|
+
standalone project (e.g. `C:/Dev/rdc-cde/PRODUCT.md`, not a subdirectory).
|
|
68
|
+
2. **Check for `PRODUCT.md` and `DESIGN.md` at that root.**
|
|
69
|
+
3. **If either is absent, or present but stale against the requested surface** (its screen
|
|
70
|
+
map / information hierarchy does not cover the screen, route, or object the task is about
|
|
71
|
+
to add or change) — **refuse to proceed to source mutation.** Create or update the missing
|
|
72
|
+
or stale document(s) first, using the field lists below. This mirrors onramp's Phase 4
|
|
73
|
+
rubric row *"DESIGN.md — 24-spread outline, not a stub"* and the Phase 1 gate *"disk:
|
|
74
|
+
places/<slug>/ exists with all required files"* — a present-but-stub or present-but-stale
|
|
75
|
+
document fails the gate exactly like an absent one.
|
|
76
|
+
4. Only after both documents exist and are current does the mode proceed to `craft`/
|
|
77
|
+
`prototype` source work.
|
|
78
|
+
|
|
79
|
+
### PRODUCT.md — required fields
|
|
80
|
+
|
|
81
|
+
| Field | Content |
|
|
82
|
+
|---|---|
|
|
83
|
+
| Operator | Who runs/uses this surface day to day |
|
|
84
|
+
| Job-to-be-done | The concrete task the surface exists to complete |
|
|
85
|
+
| Durable objects + authority | The entities the UI reads/writes and who/what owns each one |
|
|
86
|
+
| Screen map | Every screen/route/panel, one row each, with its purpose |
|
|
87
|
+
| Acceptance outcomes | What "this surface works" means, observably |
|
|
88
|
+
|
|
89
|
+
### DESIGN.md — required fields
|
|
90
|
+
|
|
91
|
+
| Field | Content |
|
|
92
|
+
|---|---|
|
|
93
|
+
| Dominant visual object | The one element the eye lands on first, per screen |
|
|
94
|
+
| Information hierarchy | What outranks what, and why |
|
|
95
|
+
| Interaction model | How the user acts on the dominant object and its neighbors |
|
|
96
|
+
| Responsive transformation | What changes, collapses, or reflows at narrower widths |
|
|
97
|
+
| Semantic color | Token names mapped to meaning (never raw hex) |
|
|
98
|
+
| References | Existing surfaces/patterns this design borrows from, cited by path |
|
|
99
|
+
| Anti-patterns | What this surface deliberately does NOT do |
|
|
100
|
+
| Visual acceptance criteria | What a reviewer checks to call the visual design done |
|
|
101
|
+
|
|
102
|
+
**Refusal wording** (use verbatim, adapted to the target): *"BLOCKED: `<surface>` has no
|
|
103
|
+
PRODUCT.md/DESIGN.md at its root (or they are stale against this request). Per the
|
|
104
|
+
new-surface gate, I'm writing/updating those first before touching source."* Then write them,
|
|
105
|
+
then proceed.
|
|
39
106
|
|
|
40
107
|
## Required References
|
|
41
108
|
|
|
@@ -168,6 +235,52 @@ Project docs to read for Studio work:
|
|
|
168
235
|
- For Studio: prefer route smoke checks, token API checks, and browser screenshots when UI changed.
|
|
169
236
|
- For CLI prompt work: run `node {RDC_SKILLS_ROOT}/scripts/rdc-design-cli.mjs <command> <brief>` and inspect the generated report under `.rdc/reports/rdc-design-cli/`.
|
|
170
237
|
|
|
238
|
+
## Design Compare — Claude vs Codex, Dispatched in Parallel
|
|
239
|
+
|
|
240
|
+
Two AI engines are already wired for dual-dispatch across this fleet — Claude Code and
|
|
241
|
+
Codex (OpenAI/ChatGPT models) — via `codex exec`. This is not a new integration; it is the
|
|
242
|
+
same mechanism `scripts/lib/runner.mjs` already uses to spawn both `claude --print
|
|
243
|
+
--output-format stream-json` and `codex exec --json` against a prompt, and the same one
|
|
244
|
+
CDE's `apps/implementor-manager/src/codex-cli-implementor.ts` uses for a fresh read-only
|
|
245
|
+
planning turn (`codex exec --sandbox read-only --json --output-schema <schema> <prompt>`).
|
|
246
|
+
|
|
247
|
+
`rdc:design compare <brief>` (or any mode + `--compare`) runs that mechanism against a
|
|
248
|
+
design brief instead of a code-change prompt:
|
|
249
|
+
|
|
250
|
+
```powershell
|
|
251
|
+
node {RDC_SKILLS_ROOT}/scripts/rdc-design-compare-cli.mjs "<design brief>" [--out <dir>]
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
This is a **real dispatch**, not a description of one: the script spawns a fresh
|
|
255
|
+
`claude --print` process and a fresh `codex exec --sandbox read-only --json` process **in
|
|
256
|
+
parallel**, both against the identical brief plus the design skill's own operating
|
|
257
|
+
instructions (same construction as `rdc-design-cli.mjs`'s prompt assembly), and both told
|
|
258
|
+
explicitly not to mutate files — this is a proposal pass, not an edit pass. It waits for
|
|
259
|
+
both, extracts each engine's final message, and writes:
|
|
260
|
+
|
|
261
|
+
```text
|
|
262
|
+
{RDC_SKILLS_ROOT}/.rdc/reports/rdc-design-cli/compare-<timestamp>/
|
|
263
|
+
claude.md — Claude's raw design proposal
|
|
264
|
+
codex.md — Codex's raw design proposal
|
|
265
|
+
report.json — both outputs + timing + exit codes
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
**After the script returns, the calling agent (not the script) writes the comparison** —
|
|
269
|
+
read both `claude.md` and `codex.md` and produce a structured table, never concatenation:
|
|
270
|
+
|
|
271
|
+
| Dimension | Claude proposal | Codex proposal | Verdict |
|
|
272
|
+
|---|---|---|---|
|
|
273
|
+
| Dominant visual object | ... | ... | which fits the brief |
|
|
274
|
+
| Information hierarchy | ... | ... | which fits the brief |
|
|
275
|
+
| Interaction model | ... | ... | which fits the brief |
|
|
276
|
+
| Token/brand-system fit | ... | ... | which reuses existing tokens vs invents new ones |
|
|
277
|
+
| Tradeoffs | ... | ... | cost of each approach |
|
|
278
|
+
|
|
279
|
+
Recommend one, or a hybrid, with the reason stated — never "both are good options."
|
|
280
|
+
|
|
281
|
+
If `codex` is unreachable (binary missing, non-zero exit), report that plainly and fall
|
|
282
|
+
back to a single-engine pass; do not fabricate a second opinion.
|
|
283
|
+
|
|
171
284
|
## Command Menu
|
|
172
285
|
|
|
173
286
|
| Command | Purpose |
|
|
@@ -181,7 +294,9 @@ Project docs to read for Studio work:
|
|
|
181
294
|
| `audit` | Technical and visual audit |
|
|
182
295
|
| `critique` | UX/design review |
|
|
183
296
|
| `polish` | Final detail pass |
|
|
184
|
-
| `craft` | Shape and build a token-aware interface |
|
|
297
|
+
| `craft` | Shape and build a token-aware interface — gated by New-Surface Gate above |
|
|
298
|
+
| `prototype` | Build a new UI surface for visual review — gated by New-Surface Gate above |
|
|
299
|
+
| `compare` | Dispatch the same design brief to Claude AND Codex in parallel, synthesize a comparison |
|
|
185
300
|
|
|
186
301
|
## CLI Helper
|
|
187
302
|
|
|
@@ -191,6 +306,7 @@ Use the local helper to see exactly how much instruction text the skill is gener
|
|
|
191
306
|
node {RDC_SKILLS_ROOT}/scripts/rdc-design-cli.mjs studio "audit the Studio palette page"
|
|
192
307
|
node {RDC_SKILLS_ROOT}/scripts/rdc-design-cli.mjs palette "generate a PRT palette workflow"
|
|
193
308
|
node {RDC_SKILLS_ROOT}/scripts/rdc-design-cli.mjs --json theme "RDC earth-forward light theme"
|
|
309
|
+
node {RDC_SKILLS_ROOT}/scripts/rdc-design-compare-cli.mjs "dashboard hero panel for a stewardship dashboard"
|
|
194
310
|
```
|
|
195
311
|
|
|
196
312
|
The helper writes logs to:
|
|
@@ -199,7 +315,7 @@ The helper writes logs to:
|
|
|
199
315
|
{RDC_SKILLS_ROOT}/.rdc/reports/rdc-design-cli/
|
|
200
316
|
```
|
|
201
317
|
|
|
202
|
-
Each run includes character count, word count, approximate token count, references loaded, and the final prompt text.
|
|
318
|
+
Each run includes character count, word count, approximate token count, references loaded, and the final prompt text. `rdc-design-compare-cli.mjs` writes its dual-engine outputs under `.rdc/reports/rdc-design-cli/compare-<timestamp>/` (see Design Compare above).
|
|
203
319
|
|
|
204
320
|
## Boundaries
|
|
205
321
|
|
|
@@ -209,3 +325,7 @@ Each run includes character count, word count, approximate token count, referenc
|
|
|
209
325
|
- Do not persist Rampa output directly to production without Studio token mapping.
|
|
210
326
|
- Do not fork or ship Palette Designer until its license is verified.
|
|
211
327
|
- Do not use Studio's deprecated `/api/editor/render` route.
|
|
328
|
+
- Do not skip the New-Surface Gate for `craft`/`prototype` work on a new or reshaped
|
|
329
|
+
surface, even when the requester did not mention PRODUCT.md/DESIGN.md.
|
|
330
|
+
- Do not let `compare` mode's Codex-side pass mutate files — it runs `--sandbox read-only`
|
|
331
|
+
by design; if a prompt change would lift that, treat it as an architectural change.
|
|
@@ -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
|
+
}
|