Portfolio Review
Review and update venture portfolio data. Collects live signals, compares against current records, and presents changes for Captain approval.
Status Taxonomy
| Status | BVM Stages | Badge | Criteria |
|---|---|---|---|
building | IDEATION, DESIGN, PROTOTYPE | gray | Code exists. No production deployment serving real users. |
beta | MARKET TEST | yellow | Production URL returns HTTP 200. Real users have access (even invite-only). |
live | SCALE, MAINTAIN | green | Generally available. No invite gate. Active users. |
paused | PIVOT/KILL | orange | Development stopped. Under evaluation. Captain decides. |
sunset | post-KILL | muted | Shut down. Historical record. |
internal | any | blue | Studio tooling. Not a user-facing product. |
Transition Evidence
- •
building->beta: Production URL returns HTTP 200 AND at least one non-founder user has access - •
beta->live: Invite gate removed. In beta 2+ weeks with no critical bugs - •Any ->
paused/sunset: Captain explicitly decides (never automated)
Execution
Step 1: Collect Signals
For each venture in config/ventures.json where portfolio.showInPortfolio is true:
- •GitHub activity - Use
gh api repos/{org}/{venture-code}-consoleto get last push date and open issue/PR count - •Production URL - If
portfolio.urlis set, runcurl -s -o /dev/null -w "%{http_code}" {url}to check HTTP status - •VCMS executive summaries - Use
crane_notesMCP tool withtag: "executive-summary"to get current stage descriptions - •Cloudflare resources - Use
workers_listandd1_databases_listMCP tools to inventory deployed infrastructure
Also check ventures with showInPortfolio: false (like vc and smd) but only for basic health.
Step 2: Detect Drift
Compare collected signals against current portfolio data. Flag:
- •Status says
liveorbetabut URL returns non-200 or is missing - •Status says
buildingbut URL is healthy (might be ready forbeta) - •No commits in 30+ days for a
buildingventure - •BVM stage in VCMS doesn't match
bvmStagein ventures.json - •
portfolio.urlbeing removed but URL still returns HTTP 200
Step 2b: Collect Code Health
For each venture, search VCMS for the most recent code-review scorecard:
crane_notes(tag: "code-review", venture: "{VENTURE_CODE}", limit: 1)
Extract the overall grade and review date. If no scorecard exists, mark as "-". If the review is older than 30 days, mark the grade with "(stale)".
Step 3: Present Review Table
Display collected data in a table:
### Portfolio Review - {date}
| Venture | Status | Proposed | BVM Stage | Code Health | Last Commit | URL Health | Signals |
|---------|--------|----------|-----------|-------------|-------------|------------|---------|
| Kid Expenses | building | building | PROTOTYPE | B | 2d ago | n/a | 3 open issues |
If any drift was detected, display it prominently:
### Drift Detected - Silicon Crane: No commits in 30+ days - consider `paused`?
Step 4: Captain Approval
Ask the user: "Approve these portfolio statuses?"
Options:
- •"Approve all" - Accept all proposed statuses as shown
- •"Review individually" - Walk through each venture one by one
- •"Skip" - No changes this review
If "Review individually": for each venture, show current vs proposed status and ask the user to confirm or override.
Step 5: Publish Updates
After Captain approves:
Step A: Update crane-console
- •Update
config/ventures.json:- •Set
lastPortfolioReviewto today's date (YYYY-MM-DD) - •Update any portfolio fields the Captain changed (status, bvmStage, description, url, etc.)
- •Set
- •Commit:
chore: portfolio review {date} - •Push to main
Step B: Update vc-web
- •Read the updated
config/ventures.json - •Update
vc-web/src/data/ventures.ts:- •Sync venture statuses, descriptions, techStack, and URLs
- •Update
lastRevieweddate - •Only include ventures where
showInPortfolio: true
- •Commit:
chore: sync portfolio data from review {date} - •Push to main
After both git pushes complete, record the completion in the Cadence Engine:
crane_schedule(action: "complete", name: "portfolio-review", result: "success", summary: "Portfolio reviewed and published")
Step 6: Align VCMS (if needed)
If any BVM stage or description changed, update the corresponding VCMS executive summary using crane_note MCP tool with action update.
Notes
- •Never auto-promote to
pausedorsunset- those are Captain-only decisions - •Signals are ephemeral - collected live, displayed once, not persisted
- •
config/ventures.jsonis the single source of truth for portfolio data - •
vc-web/src/data/ventures.tsis a derivative that can be regenerated anytime