with one click
create-ruleset-groups
Propose and Write Ruleset Groups for a Domain
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
Propose and Write Ruleset Groups for a Domain
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
Emit Catala
Create Sample Tests
Draft or Update Test Cases
Expand Test Coverage
Extract Test Cases from Policy Documents
Generate a Demo App (Catala-Python Backend)
| name | create-ruleset-groups |
| description | Propose and Write Ruleset Groups for a Domain |
Scan the per-file files under policy_facets/computations/ for stage signals, propose ruleset_groups, and write them to guidance/ruleset-groups.yaml. The deterministic (1a) explicit-stage: scan, the UPDATE-m merge precedence, and the display_name-derived catch-all all run in xlator scan-ruleset-groups; this skill owns the domain menu, the UPDATE-mode [a/r/m] prompt, the optional AI heading-text top-up (1b) when the tool flags it, and the manifest record call.
A "Ruleset Group" is synonymous with a "ruleset group".
/create-ruleset-groups <domain>
Read ../../core/output-fencing.md now.
$DOMAINS_DIR/*/ as a numbered menu and prompt:
:::user_input
Available domains:
<domain>. Then continue.The tool re-validates every other pre-flight condition (domain folder, metadata.yaml, skeleton.yaml, and a non-empty policy_facets/computations/) and exits 2 with a clear stderr message if any required file is missing. Relay the stderr verbatim inside :::error and stop.
Check whether $DOMAINS_DIR/<domain>/specs/guidance/ruleset-groups.yaml exists:
Absent → CREATE mode. Tool mode: create. Proceed to Process.
Present → UPDATE mode. Display the existing list and prompt: :::user_input ruleset_groups already defined:
[a]ccept / [r]eplace / [m]erge? :::
a → Exit without invoking the tool. Emit:
:::next_step
Next: Run /create-ruleset-modules to detect ruleset module candidates.
:::r → Tool mode: replace. Proceed to Process.m → Tool mode: merge. Proceed to Process.Run the deterministic scan tool:
xlator scan-ruleset-groups <domain> --mode <create|replace|merge>
Parse the tool's stdout. The first line is a single-line JSON header; the line --- SCAN-RULESET-GROUPS-HEADER-END --- divides the header from the human-readable proposal table.
Optional heuristic (1b) heading-text top-up. When the JSON header has heading_text_fallback_recommended == true, the tool has produced nothing the skill can use:
$DOMAINS_DIR/<domain>/policy_facets/computations/**/*.md.yaml. For each section, inspect its heading: for stage-naming patterns ("Income Test", "Household Size Verification", "Categorical Eligibility").{name: <snake_case>, description: <heading text>}. Examples: "Income Test" → {name: "income_test", description: "Income Test"}.tempfile.NamedTemporaryFile(suffix='.json')).xlator scan-ruleset-groups <domain> --mode <same-mode> --heading-derived-candidates <tmpfile>
Relay the proposal table (everything after the sentinel divider) verbatim inside :::detail.
Print: :::important $DOMAINS_DIR//specs/guidance/ruleset-groups.yaml [CREATED] :::
Record the guidance-tier manifest so /check-freshness can later detect drift between policy_facets/ and this skill's outputs:
xlator record-tier-manifest <domain> --tier guidance
If the command exits non-zero, emit :::error with the captured stderr and stop — do not proceed to :::next_step.
Suggest next steps: :::next_step Next: Run /create-ruleset-modules to detect ruleset module candidates. :::
| File | Action |
|---|---|
$DOMAINS_DIR/<domain>/specs/guidance/ruleset-groups.yaml | Created (first run) or merged (subsequent runs) |
stage: income_test and stage: income collapse to one canonical income group) and analyst-edit stickiness on merge collisions for stage-derived candidates — do not bypass either by hand-editing the file mid-run.heading_text_fallback_recommended == true in the JSON header. Do not AI-scan headings when the tool has already produced candidates.[a]ccept, exit without invoking the tool — do not overwrite existing ruleset-groups.yaml content.