Skip to content

Research Idea Portfolio Contract

The Research Idea portfolio contract is the shared source for Idea Graph and Idea Timeline. It projects every topic-scoped canonical Research Idea without inspecting the producing extension or parsing DeepSci or Kaoju payloads in the browser.

Canonical Node Fields

A canonical portfolio node includes idea_id, display_key, title, summary, exploration_state, decision_state, evidence_state, archive_state, visibility, needs_classification, backend_selected, decision_summary, transition_refs, decision_record_ids, generation_ids, steering_eligibility, and lazy detail_refs. The five facets are independent:

Facet Values
exploration_state unknown, unexplored, exploring, explored
decision_state unknown, open, shortlisted, selected, deferred, closed
evidence_state unknown, unassessed, inconclusive, supported, mixed, refuted
archive_state active, archived
visibility primary, supporting, hidden

unknown is a canonical value, not permission to infer a value from status, prose, record kind, lineage, or timestamps. needs_classification lists each unknown exploration, decision, or evidence facet. The compatibility status field may remain present, but clients must not use it for portfolio predicates.

CanonicalIdeaPortfolioNodeContract requires all five facets. TopicGraphNodeContract remains permissive for explicitly diagnosed legacy fallback nodes. The backend must label fallback mode and must not silently omit canonical fields.

Fixed Presets

Preset Canonical Predicate
current Active Primary Ideas with decision unknown, open, shortlisted, or selected
all-proposed Every non-hidden idea, including supporting and archived ideas
open-for-exploration Active non-hidden ideas with decision open, shortlisted, or selected
unexplored Non-hidden ideas with exploration unexplored
exploring Non-hidden ideas with exploration exploring
explored Non-hidden ideas with exploration explored
selected Non-hidden ideas with decision selected
deferred Non-hidden ideas with decision deferred
closed Non-hidden ideas with decision closed
needs-classification Non-hidden ideas with any unknown exploration, decision, or evidence facet

Explicit exploration, decision, evidence, archive, visibility, generation, and Decision Record filters refine the preset with AND semantics. Multiple comma-separated values within one facet have OR semantics. Relation, text, and paging filters follow the order reported in applied_predicate.composition_order.

Portfolio Metadata

portfolio includes the selected preset, available_presets, explicit_filters, applied_predicate, source_counts, visible_counts, omitted_cross_boundary_edge_count, and source_topology_complete. Source and visible counts include per-value counts for all five facets. Filtered edges remain only when both endpoints are visible.

Project Web may apply the same predicate locally only when it has a complete bounded source graph. The shared fixture at tests/fixtures/research_idea_portfolio.json proves Python and TypeScript parity for mixed-paradigm and Kaoju-only portfolios. Browser filter state is stored per topic and view; it is not canonical state and cannot change the topic index revision.

Legacy and Lazy Boundaries

An idea-bearing legacy record without canonical projection produces idea_bearing_record_unprojected with previewable repair metadata. It does not produce transient payload-parsed idea nodes. Graph and timeline payloads omit full source JSON, rendered Markdown, record bodies, and transition rationale bodies. Clients load those through idea detail, decision context, record detail, and file routes.