ln-230-story-prioritizer — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited ln-230-story-prioritizer (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Paths: File paths (references/,../ln-*) are relative to this skill directory.
Type: L3 Worker Category: 2XX Planning
Evaluate Stories using RICE scoring with market research. Generate consolidated prioritization table for Epic.
Use this skill when:
Do NOT use when:
| Parameter | Required | Description | Default |
|---|---|---|---|
| epic | Yes | Epic ID or "Epic N" format | - |
| stories | No | Specific Story IDs to prioritize | All in Epic |
| depth | No | Research depth (quick/standard/deep) | "standard" |
depth options:
quick - 2-3 min/Story, 1 WebSearch per typestandard - 5-7 min/Story, 2-3 WebSearches per typedeep - 8-10 min/Story, comprehensive researchdocs/market/[epic-slug]/
└── prioritization.md # Consolidated table + RICE details + sourcesMANDATORY READ: Load references/planning_worker_runtime_contract.md, references/coordinator_summary_contract.md MANDATORY READ: Load references/researchgraph_mcp_usage.md when Stories cite H/G/run IDs or project researchgraph evidence can change priority confidence.
Runtime family: planning-worker-runtime
Identifier:
epic-{epicId}Phases:
PHASE_0_CONFIGPHASE_1_DISCOVERYPHASE_2_LOAD_STORY_METADATAPHASE_3_ANALYZE_STORIESPHASE_4_GENERATE_PRIORITIZATIONPHASE_5_WRITE_SUMMARYPHASE_6_SELF_CHECKSummary contract:
summary_kind=story-prioritization-workerepic_id, depth, stories_analyzed, priority_distribution, top_story_ids, prioritization_path, warningssummaryArtifactPath.hex-skills/runtime-artifacts/runs/{parent_run_id}/story-prioritization-worker/ln-230--{identifier}.jsonTable columns (from user requirements):
| Priority | Customer Problem | Feature | Solution | Rationale | Impact | Market | Sources | Competition |
|---|---|---|---|---|---|---|---|---|
| P0 | User pain point | Story title | Technical approach | Why important | Business impact | $XB | [Link] | Blue 1-3 / Red 4-5 |
| Input | Required | Source | Description |
|---|---|---|---|
epicId | Yes | args, kanban, user | Epic to process |
Resolution: Epic Resolution Chain. Status filter: Active (planned/started)
MANDATORY READ: Load references/environment_state_contract.md, references/storage_mode_detection.md, references/input_resolution_pattern.md
Extract: task_provider = Task Management → Provider
| Tool | Purpose | Example Query |
|---|---|---|
| WebSearch | Market size, competitors | "[domain] market size {current_year}" |
| mcp__Ref | Industry reports | "[domain] market analysis report" |
| hex-research | Local hypothesis, goal, and benchmark evidence | find_hypotheses, inspect_goal, find_runs for explicit H/G/run context |
| Task provider | Load Stories | IF linear: list_issues / ELSE: Glob story.md |
| Glob | Check existing | "docs/market/[epic]/*" |
Objective: Validate input and prepare context.
Process:
get_project(query=epicId)gh issue view {epicId} -R {REPO} --json number,title,bodyRead("docs/tasks/epics/epic-{N}-*/epic.md")docs/tasks/kanban_board.md for Team ID Glob: docs/market/[epic-slug]/prioritization.md mkdir -p docs/market/[epic-slug]/Output: Epic metadata, output path, existing check result
Objective: Build Story queue with metadata only and prepare rough scoring inputs for all Stories.
Process:
IF task_provider == "linear":
list_issues(project=Epic.id, label="user-story")ELSE IF task_provider == "github":
gh api /repos/{O}/{R}/issues/{epic_num}/sub_issues --jq '.[].number'
→ for each: gh issue view {num} -R {REPO} --json number,title,state,labels
→ filter: label "user-story"ELSE (file mode):
Glob("docs/tasks/epics/epic-{N}-*/stories/*/story.md")Output: Story queue (ID + title + minimal context), ~50-80 tokens/Story
Objective: Score all Stories cheaply first, then spend deep research only on candidates where it changes the decision.
Critical: Keep maximum context to one full Story at a time even during deep research.
If a researchgraph layout exists, run local graph checks only for Stories whose priority depends on hypothesis status, goal coverage, benchmark evidence, or implementation readiness. Local graph evidence can change RICE confidence and risk; it does not replace market-size or competitor research.
#### Pass A: Cheap Triage For All Stories
For each Story, load only enough detail to estimate:
##### Step 3.1: Load Story Description
IF task_provider == "linear":
// configured tracker provider: getStory(id=storyId)ELSE IF task_provider == "github":
gh issue view {storyId} -R {REPO} --json number,title,body,state,labelsELSE (file mode):
Read("docs/tasks/epics/epic-{N}-*/stories/us{NNN}-*/story.md")Extract from Story:
##### Step 3.2: Build rough RICE estimate
Use Story + Epic context to assign:
ReachImpactEffortConfidenceMark one of:
full_research_requiredrough_estimate_okborderline_needs_reviewSend to Pass B only if:
#### Pass B: Selective Deep Research
Only for Stories selected in Pass A, run full external research.
##### Step 3.3: Research Market Size
WebSearch queries (based on depth):
"[customer problem domain] market size TAM {current_year}"
"[feature type] industry market forecast"mcp__Ref query:
"[domain] market analysis Gartner Statista"Extract:
Confidence mapping:
##### Step 3.4: Research Competition
WebSearch queries:
"[feature] competitors alternatives {current_year}"
"[solution approach] market leaders"Count competitors and classify:
| Competitors Found | Competition Index | Ocean Type |
|---|---|---|
| 0 | 1 | Blue Ocean |
| 1-2 | 2 | Emerging |
| 3-5 | 3 | Growing |
| 6-10 | 4 | Mature |
| >10 | 5 | Red Ocean |
##### Step 3.5: Calculate final RICE Score
RICE = (Reach x Impact x Confidence) / EffortReach (1-10): Users affected per quarter
| Score | Users | Indicators |
|---|---|---|
| 1-2 | <500 | Niche, single persona |
| 3-4 | 500-2K | Department-level |
| 5-6 | 2K-5K | Organization-wide |
| 7-8 | 5K-10K | Multi-org |
| 9-10 | >10K | Platform-wide |
Impact (0.25-3.0): Business value
| Score | Level | Indicators |
|---|---|---|
| 0.25 | Minimal | Nice-to-have |
| 0.5 | Low | QoL improvement |
| 1.0 | Medium | Efficiency gain |
| 2.0 | High | Revenue driver |
| 3.0 | Massive | Strategic differentiator |
Confidence (0.5-1.0): Data quality (from Step 3.2)
Data Confidence Assessment:
For each RICE factor, assess data confidence level:
| Confidence | Criteria | Score Modifier |
|---|---|---|
| HIGH | Multiple authoritative sources (Gartner, Statista, SEC filings) | Factor used as-is |
| MEDIUM | 1-2 sources, mixed quality (blog + report) | Factor ±25% range shown |
| LOW | No sources, team estimate only | Factor ±50% range shown |
Output: Show confidence per factor in prioritization table + RICE range (optimistic/pessimistic) to make uncertainty explicit.
Effort (1-10): Person-months
| Score | Time | Story Indicators |
|---|---|---|
| 1-2 | <2 weeks | 3 AC, simple CRUD |
| 3-4 | 2-4 weeks | 4 AC, integration |
| 5-6 | 1-2 months | 5 AC, complex logic |
| 7-8 | 2-3 months | External dependencies |
| 9-10 | 3+ months | New infrastructure |
##### Step 3.6: Determine Priority
| Priority | RICE Threshold | Competition Override |
|---|---|---|
| P0 (Critical) | >= 30 | OR Competition = 1 (Blue Ocean monopoly) |
| P1 (High) | >= 15 | OR Competition <= 2 (Emerging market) |
| P2 (Medium) | >= 5 | - |
| P3 (Low) | < 5 | Competition = 5 (Red Ocean) forces P3 |
##### Step 3.7: Store and Clear
full-research or rough-estimateOutput per Story: Complete row for prioritization table with confidence tier
Objective: Create consolidated markdown output.
Process:
Write: docs/market/[epic-slug]/prioritization.mdOutput: Saved prioritization.md
Objective: Display results and recommendations.
Output format:
## Prioritization Complete
**Epic:** [Epic N - Name]
**Stories analyzed:** X
**Time elapsed:** Y minutes
### Priority Distribution:
- P0 (Critical): X Stories - Implement ASAP
- P1 (High): X Stories - Next sprint
- P2 (Medium): X Stories - Backlog
- P3 (Low): X Stories - Consider deferring
### Top 3 Priorities:
1. [Story Title] - RICE: X, Market: $XB, Competition: Blue/Red
### Saved to:
docs/market/[epic-slug]/prioritization.md
### Next Steps:
1. Review table with stakeholders
2. Run ln-300 for P0/P1 Stories first
3. Consider cutting P3 Stories| Depth | Per-Story | Total (10 Stories) |
|---|---|---|
| quick | 2-3 min | 20-30 min |
| standard | 5-7 min | 50-70 min |
| deep | 8-10 min | 80-100 min |
Time management rules:
Loading pattern:
Memory management:
Position in workflow:
ln-210 (Scope → Epics)
↓
ln-220 (Epic → Stories)
↓
ln-230 (RICE per Story → prioritization table) ← THIS SKILL
↓
ln-300 (Story → Tasks)Dependencies:
references/tracker_provider_contract.mdDownstream usage:
Structured worker output:
summaryArtifactPath is providedstory-prioritization-worker summary returnedsummaryArtifactPath is providedBasic usage:
ln-230-story-prioritizer epic="Epic 7"With parameters:
ln-230-story-prioritizer epic="Epic 7: Translation API" depth="deep"Specific Stories:
ln-230-story-prioritizer epic="Epic 7" stories="US001,US002,US003"Example output (docs/market/translation-api/prioritization.md):
| Priority | Customer Problem | Feature | Solution | Rationale | Impact | Market | Sources | Competition |
|---|---|---|---|---|---|---|---|---|
| P0 | "Repeat translations cost GPU" | Translation Memory | Redis cache, 5ms lookup | 70-90% GPU cost reduction | High | $2B+ | M&M | 3 |
| P0 | "Can't translate PDF" | PDF Support | PDF parsing + layout | Enterprise blocker | High | $10B+ | Eden | 5 |
| P1 | "Need video subtitles" | SRT/VTT Support | Timing preservation | Blue Ocean opportunity | Medium | $5.7B | GMI | 2 |
Optional reference: load references/meta_analysis_protocol.md only when the user asks for post-run meta-analysis or protocol-formatted run reflection.
Skill type: planning-worker. When requested, run after all phases complete. Output to chat using the planning-worker format.
references/environment_state_contract.mdreferences/storage_mode_detection.mdreferences/research_tool_fallback.md| File | Purpose |
|---|---|
| prioritization_template.md | Output markdown template |
| rice_scoring_guide.md | RICE factor scales and examples |
| research_queries.md | WebSearch query templates by domain |
| competition_index.md | Blue/Red Ocean classification rules |
Version: 2.0.0 Last Updated: 2026-04-05
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.