/portfolio — Cross-Goal Portfolio Report
Standalone, on-demand report. Does not run as part of /goal,
/plan, /loop, or /verify, and does not gate or block any of
them. Read skills/portfolio/manager.md for the lens definition this
skill implements.
Process
- Read
.loop/registry.jsonin full — every goal, every status, not justACTIVE. - Compute priority per goal where the inputs exist:
impact × confidence × alignment ÷ effort(the formula fromROADMAP.md's Resource Allocation section).confidencecomes from the goal's ownclassification_confidence. Whereimpact,alignment, oreffortare missing from the entry, report the goal as "priority: unscored (missing )" rather than fabricating a number. - Flag risk — goals with status
BLOCKEDorESCALATED, and goals with no registry activity in a window that's unusually long relative to that goal's own history (stalled). - Flag blockers — for any goal with a non-empty
depends_on, check whether the dependency is still open; if so, name it as the blocker holding up an otherwise-ready goal. - Report, ordered by priority (unscored goals last, in registry order):
<goal-id> priority=<score or "unscored"> status=<status>
risk: <none | BLOCKED | ESCALATED | stalled (<duration>)>
blocked by: <dependency goal-id, or "none">
No file is written by this skill. The report is the output.
Relationship to Other Skills
/portfolio reads .loop/registry.json, the same file /goal
writes to at Register (step 22) and /loop//verify update as goals
progress. It has no other coupling — it does not read research.md,
contract.json, or any goal's plan.