| name | aggregate-codify-proposals |
| description | Walk the inference-output directory under STM, read every proposal artifact each infer-*-from-code skill produced, and compose the master proposals.yaml index classified by the two-level learning taxonomy (learning_category + sub_category). This is the artifact that /garura:enrich consumes. Used exclusively by the /codify play. |
| version | 0.1.0 |
| user-invocable | false |
| model | sonnet |
| allowed-tools | Read, Write, Grep, Glob |
| deprecated | true |
| deprecated_note | #434 ProductOS realignment — superseded by the command model; retained for Phase E reference, not installed |
aggregate-codify-proposals
Called by the /codify play after all inference agents finish. Produces proposals.yaml — the master index that /garura:enrich reads to promote proposals into product LTM. Every inferred LTM artifact is catalogued here with its tier, taxonomy, evidence, confidence, and target LTM path.
Purpose
Each infer-*-from-code skill writes one artifact under {stm_base}/{issue}/evidence/codify/proposals/<target-path>. Those files are the proposals themselves. This skill walks that tree, reads each file, extracts its metadata block, classifies each proposal against /reap's two-level learning taxonomy, groups by tier, and writes a single master index. The master index is what downstream consumers (the user at the checkpoint; /garura:enrich later) read.
Input
Receive from the /codify play orchestrator via JSON contract.
proposals_root (path, required) — {stm_base}/{issue}/evidence/codify/proposals/. Walked recursively; every file is treated as a proposal artifact.
scan_result_path (path, required) — {stm_base}/{issue}/evidence/codify/scan-result.yaml. Used to read scan metadata (repos, frontend detection, scan status) into the master index.
output_path (path, required) — {stm_base}/{issue}/evidence/codify/proposals.yaml.
incremental_mode (bool, optional, default false) — when true, read skipped_locked from caller and include it in the master index.
skipped_locked (list[path], optional) — list of target LTM paths skipped because they are LOCKED. Only populated when incremental_mode is true.
skipped_phases (list[str], optional) — phases skipped entirely (e.g., ["experience"] when no frontend detected, or ["scope"] under a --target filter).
target_filter (str, optional) — if /codify was invoked with --target, record the filter here for provenance.
Process
1. Validate inputs
- Confirm
proposals_root exists and is a directory. Missing → structured failure with what_failed: proposals_root_missing.
- Confirm
scan_result_path exists and is valid YAML. Missing → structured failure with what_failed: scan_result_missing.