@lssm-tech/lib.opportunity-runtime
Pure deterministic scoring, gate, simulation, and portfolio projections for autonomous-company opportunities.
This package consumes @lssm-tech/lib.opportunity-spec contracts and provides input-only helpers for normalizing scorecards, computing weighted scores, projecting verdicts, summarizing simulation bottlenecks, and ranking portfolios.
Scope
Use this package to:
- normalize
0..5 scores to 0..100;
- verify the canonical opportunity score weights sum to
100%;
- compute weighted opportunity scores;
- apply hard-gate and evidence-threshold verdict overrides;
- summarize autonomous-operation simulation bottlenecks;
- produce deterministic portfolio selections with explainable reasons.
Boundary
This runtime is side-effect-free. It does not fetch research, synthesize claims with LLMs, call providers, persist data, mutate files, create CompanyOS/Builder workflows, contact customers, or execute production actions. It only projects over caller-provided spec objects.
Public entrypoints
@lssm-tech/lib.opportunity-runtime — root barrel
@lssm-tech/lib.opportunity-runtime/scoring — normalization and weighted scoring helpers
@lssm-tech/lib.opportunity-runtime/gates — verdict and bottleneck projections
@lssm-tech/lib.opportunity-runtime/portfolio — deterministic portfolio ranking
Distribution-first discovery (additive, experimental)
The ./discovery entrypoint screens captured draft records with supplied catalog IDs, profile and as-of date. selfserve-first@1.0.0 applies prerequisite gates before ranking; unavailable dimensions retain null subtotals. Product attractiveness, distribution feasibility, evidence strength and experiment priority remain separate. Families are consolidated before selection, and empty or all-blocked draft inputs return an empty shortlist with explanations.
SALES_ASSISTED_DISCOVERY_PROFILE (sales-assisted@1.0.0) screens 1.1.0 waves with the same ranking recipe; it scores assisted_conversion in place of
selfserve_adoption. discoveryProfileById returns either profile. Planned sales minutes stay assumptions until an observed metric replaces them.
The mature rankOpportunityPortfolio API remains unchanged: it throws on empty input and can return a blocked primary when no candidate is viable. New discovery callers must use the empty-safe draft result rather than interpreting that legacy behavior as eligibility.
The ./economics entrypoint supplies scoped acquisition, contribution, funnel, referral, sponsor/marketplace, cohort and payback projections. Unknown inputs never become zero; scenario estimates and editorial priors never become customer measurements. Cost allocation must count salaries, discounts, rewards and seed acquisition once. Finite horizons and payer-aware denominators prevent inferred renewals, infinite lifetime value and beneficiary-to-paying-customer confusion.
Generation, research, catalog/file access and exports belong to the local runner, not these helpers. No provider or customer-facing action is performed here.
Package verification
bun run test
bun run typecheck
bun run lint:check
bun run build