Create and manage features under epics. Break epics into specific, testable, implementable capabilities. Every feature must belong to an epic.
Break epics into specific, testable, implementable features. Every feature MUST belong to an epic.
/pm-feature myriplay crawl <epic-uuid>
/pm-feature myriplay add <epic-uuid>
/pm-feature myriplay list
/pm-feature myriplay list epic=<uuid>
/pm-feature myriplay show <uuid>
/pm-feature myriplay edit <uuid>
Path: .claude/db/marketing.sqlite | PRAGMA foreign_keys=ON;
Uses existing product_features table with added columns: epic_id (required), base_version.
/pm-iterator instead of listing values inlineproduct_features with epic_id, base_version = parent epic's current version, human_approved = 0product_feature_versionsproduct_feature_tagshuman_approved = 1, base_version = parent epic's current versionCreated feature: <uuid> "short_desc"version on product_featuresbase_version = current parent epic version (clears staleness)product_feature_versionsupdated_at = CURRENT_TIMESTAMP-- List features for a product
SELECT pf.id, pf.short_desc, pf.version, pf.target_release, pf.status,
pf.epic_id, pf.base_version, e.name AS epic_name, e.version AS epic_version,
GROUP_CONCAT(t.name, ', ') AS tags
FROM product_features pf
JOIN our_products op ON op.id = pf.product_id
LEFT JOIN epics e ON e.id = pf.epic_id
LEFT JOIN product_feature_tags pft ON pft.feature_id = pf.id
LEFT JOIN tags t ON t.id = pft.tag_id
WHERE op.code = :product_code
GROUP BY pf.id ORDER BY pf.target_release, pf.short_desc;
-- Features for a specific epic
SELECT pf.id, pf.short_desc, pf.version, pf.base_version
FROM product_features pf WHERE pf.epic_id = :epic_uuid;
When describing features that apply across a set, check existing iterators:
SELECT i.name, i.description, GROUP_CONCAT(iv.value, ', ') AS values
FROM iterators i JOIN iterator_values iv ON iv.iterator_id = i.id
WHERE i.product_id = :pid GROUP BY i.id;
Reference iterators by name in descriptions. Propose new ones via /pm-iterator when repeated lists appear.
epic_id. No standalone features.base_version = parent epic's version at time of creation/confirmation.