product-line
Manage the portfolio of product paths — review, activate, archive, restore, promote, fork, and check revisit triggers across the product-path manifest
- License 许可
- MIT
- 最近更新
- 2026-11-10
- Stars
- ★ 1
- Forks
- 0
01 前言 Front Matter
- name
- product-line
- type
- ops
- version
- v0.7
- description
- Manage the portfolio of product paths — review, activate, archive, restore, promote, fork, and check revisit triggers across the product-path manifest
- visual_tier
- visual
- argument-hint
- review | activate <path-id> | archive <path-id> | restore <path-id> | promote <path-id> | fork <label> [--from <skill>] | triggers
- context_intake
- artifact_only
- required_conventions
- [ "alignment-page" ]
02 资源文件 2
- 参考文档ALIGNMENT-PAGE.md52.4 KB
- 参考文档CHANGELOG.md1.4 KB
03 SKILL.md 正文
Pack Availability Guard
When recommending a skill from another pack, verify the target pack is installed via .agents/project.json enabled_packs. If it is not enabled, recommend npx skillpacks install <pack> from the project shell. After install, tell Codex users to start a fresh Codex CLI session if the $ skill list remains stale. Only the currently running skill and skills verified available in the active session or project-local install state are directly recommendable. For unavailable pack skills, recommend npx skillpacks install <pack-or-skill>; for unavailable base skills, recommend npx skillpacks init before the skill.
Product Line — Product Path Portfolio Management
Invoke as $product-line.
Manage product paths tracked in research/.progress.yaml. Product paths are research divergences — different products, apps, ICPs, expansion candidates, pivots, or competitive gaps — not git branches. Each path tracks its scope directory, status, evidence, pipeline stage, and revisit conditions.
Use activate when a deferred or revisit candidate path should become active research again. Use promote only when a research path graduates to an apps/{slug}/ code/app scope.
Prerequisites
research/.progress.yaml must exist for all modes except fork (which can create it). If missing, tell the user: "No product-path manifest found. Run $idea-scope-brief or $customer-discovery first — they create the manifest when multiple product directions emerge."
Manifest Schema
The canonical manifest lives at research/.progress.yaml:
active_paths:
- "cost-intel"
max_concurrent: 1
product_paths:
- id: "cost-intel"
label: "Cost Intel"
scope_path: "research/cost-intel/"
status: active # active | deferred | archived | promoted | revisit_candidate
source_skill: "icp"
reason: "Why this path exists"
archive_reason: null
archived_at: null
promoted_at: null
evidence_refs: []
revisit_trigger: null
next_skill: "$competitive-analysis"
pipeline_stage: "icp"
last_touched: "YYYY-MM-DD"
Backward Compatibility
- Read legacy
active_pathasactive_paths: [<value>]whenactive_pathsis absent. - Read legacy
status: abandonedasstatus: archived. - On writes, remove
active_path, write pluralactive_paths, and preferstatus: archivedinstead ofabandoned. - Treat
status: promotedas graduated to code/app scope, not reactivated research. - Exclude
research/_archive/paths from active-path selection and directory suggestions.
Modes
1. review — Portfolio Dashboard
Invocation: $product-line review
Present a dashboard comparing all paths:
| Path | Status | Scope | Pipeline Stage | Last Touched | Evidence Maturity | Revisit Trigger |
|---|
Group by active, deferred, revisit_candidate, archived, and promoted. For deferred and revisit_candidate paths, highlight the revisit trigger. For archived paths, show archive_reason and archived_at. For promoted paths, show promoted_at and the expected apps/{slug}/ scope.
Evidence maturity is derived from files under scope_path or evidence_refs:
- Early — only concept brief or initial ICP
- Developing — ICP plus competitive analysis, positioning, or journey map
- Mature — journey map plus metrics, GTM, monetization, or experiments
- Graduated — promoted to an app/code scope
When 3+ deferred or revisit-candidate paths exist with no recent activation, recommend $product-line triggers.
2. activate <path-id> — Reactivate Research
Invocation: $product-line activate <path-id>
- Validate the path exists and has status
deferredorrevisit_candidate. - Check
max_concurrentagainst the current active-path count. If at capacity, ask whether to deactivate another path or increasemax_concurrent. - Ensure
scope_pathis not underresearch/_archive/. If it is archived, tell the user to run$product-line restore <path-id>first. - Scan existing research files to infer
pipeline_stage. - Update the manifest:
- Set
status: active - Add the path ID to
active_paths - Set
last_touchedto today - Set
pipeline_stagefrom the scan when clearer than the existing value
- Set
- Recommend the next skill from
next_skillor the inferred pipeline stage.
3. archive <path-id> — Archive A Research Path
Invocation: $product-line archive <path-id>
- Validate the path exists and is not already
archivedor legacyabandoned. - Ask for a concise archive rationale.
- If
scope_pathisresearch/{slug}/and the directory exists, createresearch/_archive/as needed and move it toresearch/_archive/{slug}/. - Update the manifest:
- Set
status: archived - Remove the path ID from
active_paths - Set
scope_pathtoresearch/_archive/{slug}/when the directory was moved - Set
archive_reason,archived_at, andlast_touched
- Set
- Present confirmation with the archived directory and rationale.
4. restore <path-id> — Restore An Archived Path
Invocation: $product-line restore <path-id>
- Validate the path exists and has status
archivedor legacyabandoned. - If
scope_pathisresearch/_archive/{slug}/and the directory exists, move it back toresearch/{slug}/. - Ask whether to restore as
deferred(default) oractive. If active, enforcemax_concurrent. - Update the manifest:
- Set
status: deferredby default, oractiveonly when approved - Add to
active_pathsonly when restored as active - Set
scope_pathback toresearch/{slug}/ - Clear
archived_at; keep the old archive rationale inreasonor history, but setarchive_reason: null - Set
last_touchedto today
- Set
- Recommend
$product-line activate <path-id>if restored as deferred.
5. promote <path-id> — Graduate To App Scope
Invocation: $product-line promote <path-id>
Use this only when research is ready to become or connect to an app under apps/{slug}/.
- Validate the path exists and is not
archivedor legacyabandoned. - Derive
{slug}from the path ID orscope_path. - Confirm or create
apps/{slug}/during the monorepo scaffolding flow. If scaffolding requires another skill, recommend$scaffoldor the appropriate monorepo command instead of inventing app files here. - Keep research docs under
research/{slug}/as product evidence unless a separate scaffolder explicitly moves or links docs. - Update the manifest:
- Set
status: promoted - Remove the path ID from
active_paths - Set
promoted_atandlast_touchedto today - Keep
scope_pathpointing at the research evidence path
- Set
- Present the app graduation result and the next implementation/scaffolding command.
6. fork <label> [--from <skill>] — Create A New Path
Invocation: $product-line fork "Enterprise vertical" --from competitive-analysis
- Generate a stable product-path ID from the label.
- Confirm that the slug is the intended product/app name, not merely an ICP, audience, or segment label.
- Ask for supporting evidence, revisit trigger, and initial status (
activeordeferred). - Create or update
research/.progress.yamlwith the full schema fields. - Use
scope_path: research/{slug}/. - If status is
active, enforcemax_concurrentand createresearch/{slug}/. - If status is
deferred, create the manifest entry without forcing downstream research.
7. triggers — Check Revisit Conditions
Invocation: $product-line triggers
Scan paths with status: deferred or status: revisit_candidate and evaluate their revisit_trigger conditions:
- File-based triggers — check whether the referenced file exists.
- Evidence-based triggers — check active research files for relevant evidence.
- Time-based triggers — compare against today's date.
- External triggers — flag as requiring manual confirmation.
Classify each trigger as fired, pending, or manual. For fired triggers, recommend $product-line activate <path-id>.
Output
Update research/.progress.yaml. archive and restore may also move product-path directories between research/{slug}/ and research/_archive/{slug}/. promote may confirm or route creation of apps/{slug}/, but it does not move research docs.
Constraints
- Do not run downstream research or implementation skills.
- Do not treat archived, legacy abandoned, deferred, revisit-candidate, or promoted paths as active research targets.
- Do not use
promoteto mean "make active"; useactivate. - Do not use
archivewithout a documented rationale. - Respect
max_concurrentfor active paths. - Use product-path terminology. Never use "branch" to mean a product path.
Alignment Page
Follow the shared alignment-page convention via the packaged convention resolver; output path is alignment/product-line-{topic}.html. By default, report results inline and write only this skill's normal durable artifacts; create an alignment page only when explicitly requested or when a concrete clarification/review need cannot be handled cleanly inline.
Default Shipping Contract
Follow the shared shipping contract convention in CLAUDE.md.
04 同仓库更多 Skills
source-checkout-allowed
Valid source-checkout-only fixture.
deck-install-valid
Valid deck install fixture.
codex-pack-guard-valid
Valid Codex Pack Availability Guard fixture.
codex-missing-skill-valid
Valid Codex missing skill fallback fixture.
codex-base-skill-fallback-valid
Valid Codex base skill fallback fixture.
claude-pack-guard-valid
Valid Claude Pack Availability Guard fixture.