From 1df58e8bb738753c36fb193c5968813697ce0f23 Mon Sep 17 00:00:00 2001 From: saagpatel Date: Sun, 12 Jul 2026 07:59:50 -0700 Subject: [PATCH] fix: surface active Oddworks finish lanes --- config/portfolio-catalog.yaml | 70 +++++++++++++++++++++++++------- src/portfolio_truth_reconcile.py | 6 ++- tests/test_portfolio_truth.py | 24 +++++++++++ 3 files changed, 85 insertions(+), 15 deletions(-) diff --git a/config/portfolio-catalog.yaml b/config/portfolio-catalog.yaml index cb0f85d..047654a 100644 --- a/config/portfolio-catalog.yaml +++ b/config/portfolio-catalog.yaml @@ -397,10 +397,16 @@ repos: category: vanity Phantom Frequencies: owner: d + purpose: compact authored supernatural-radio game being finished as an Oddworks release lifecycle_state: active - review_cadence: monthly - operating_path: maintain - tool_provenance: claude-code + criticality: high + review_cadence: weekly + operating_path: finish + category: commercial + tool_provenance: codex + maturity_program: finish + target_maturity: operating + notes: Release-candidate branch and playtest packet exist; human cohort, signing, and publication gates remain open. Oddworks reactivated this lane on 2026-07-12. RedditSentimentAnalyzer: owner: d lifecycle_state: active @@ -410,10 +416,16 @@ repos: tool_provenance: claude-code SignalDecay: owner: d + purpose: one-room 8-12 minute tactile signal-tuning game for the Oddworks label lifecycle_state: active - review_cadence: monthly - operating_path: maintain - tool_provenance: claude-code + criticality: high + review_cadence: weekly + operating_path: finish + category: commercial + tool_provenance: codex + maturity_program: finish + target_maturity: operating + notes: Verified one-room packaged candidate exists; naive-player duration, tuning, retention, signing, and publication gates remain open. Oddworks reactivated this lane on 2026-07-12. desktop_terrarium: owner: d lifecycle_state: maintenance @@ -632,10 +644,16 @@ repos: notes: Archived from active operator attention on 2026-06-13. The corrupt local checkout was preserved at /Users/d/Projects/GhostRoutes.corrupt-20260613T124820Z and /Users/d/Projects/GhostRoutes was restored from a fresh origin clone. Keep this repo archived/deferred unless explicitly reactivated. Liminal: owner: d + purpose: focused atmospheric iOS experience being finished as an Oddworks release lifecycle_state: active + criticality: high review_cadence: weekly - operating_path: maintain - tool_provenance: claude-code + operating_path: finish + category: commercial + tool_provenance: codex + maturity_program: finish + target_maturity: operating + notes: Verified unsigned device Release bundle and external cohort packet exist; physical-device, human-proof, signing, and publication gates remain open. Oddworks reactivated this lane on 2026-07-12. Nocturne: owner: d lifecycle_state: active @@ -777,11 +795,16 @@ repos: confirm purpose/criticality.' DeepTank: owner: d + purpose: authored aquatic simulation game being evaluated and finished for the Oddworks label lifecycle_state: active + criticality: high review_cadence: weekly - operating_path: maintain - notes: 'Auto-seeded 2026-06-02 from derived signals (path_confidence: medium); - confirm purpose/criticality.' + operating_path: finish + category: commercial + tool_provenance: codex + maturity_program: finish + target_maturity: operating + notes: Active Oddworks lane, but implementation is lease-protected by a dirty worktree with broad src-tauri deletions; preserve it until the existing owner clears or hands off the lease. DesktopPEt: owner: d lifecycle_state: active @@ -1075,10 +1098,29 @@ repos: category: vanity BattleGrid: owner: d + purpose: focused tactical grid game being evaluated and finished for the Oddworks label lifecycle_state: active - review_cadence: monthly - operating_path: maintain - category: fun + criticality: high + review_cadence: weekly + operating_path: finish + category: commercial + tool_provenance: codex + maturity_program: finish + target_maturity: operating + notes: Active Oddworks lane, but implementation is lease-protected by a dirty feature branch that is behind origin; preserve it until the existing owner clears or hands off the lease. + OddworksCabinet: + owner: d + purpose: evidence-first gallery and release surface for small authored Oddworks experiences + lifecycle_state: active + criticality: high + review_cadence: weekly + operating_path: finish + category: commercial + tool_provenance: codex + maturity_program: finish + target_maturity: operating + automation_eligible: false + notes: Verified private candidate exists with genuine Liminal and SignalDecay media and explicit candidate status; public deployment remains gated until release approval. LegalDocsReview: owner: d lifecycle_state: active diff --git a/src/portfolio_truth_reconcile.py b/src/portfolio_truth_reconcile.py index 34d1fb9..fff1e23 100644 --- a/src/portfolio_truth_reconcile.py +++ b/src/portfolio_truth_reconcile.py @@ -1063,7 +1063,11 @@ def _attention_state_for( if operating_path == "experiment" or lifecycle_state == "experimental": return "experiment" if activity_status == "stale": - return "parked" + # A declared finish path is itself an unresolved operator decision. It can + # remain valid while the default branch is stale (for example, when work is + # on a release branch or waiting at a human/publication gate), so do not + # silently collapse it back into the parked pool. + return "decision-needed" if operating_path == "finish" else "parked" if ( path_override == "investigate" or not operating_path diff --git a/tests/test_portfolio_truth.py b/tests/test_portfolio_truth.py index 871e092..7cfd939 100644 --- a/tests/test_portfolio_truth.py +++ b/tests/test_portfolio_truth.py @@ -573,6 +573,30 @@ def test_attention_state_classifier_separates_activity_from_operator_attention() ) == "archived" ) + assert ( + _attention_state_for( + activity_status="stale", + archived=False, + lifecycle_state="active", + operating_path="finish", + category="commercial", + path_override="", + risk_entry={"security_risk": False}, + ) + == "decision-needed" + ) + assert ( + _attention_state_for( + activity_status="stale", + archived=False, + lifecycle_state="active", + operating_path="maintain", + category="commercial", + path_override="", + risk_entry={"security_risk": False}, + ) + == "parked" + ) @pytest.mark.parametrize(