alphacouncil-agent 0.9.2 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/commands/alpha.md +22 -3
- package/.claude-plugin/marketplace.json +3 -3
- package/.claude-plugin/plugin.json +2 -2
- package/.codex-plugin/plugin.json +4 -4
- package/.grok/commands/alpha.md +22 -3
- package/.opencode/command/alpha.md +22 -3
- package/AGENTS.md +42 -4
- package/CHANGELOG.md +164 -0
- package/CLAUDE.md +59 -7
- package/README.ja.md +25 -11
- package/README.md +44 -12
- package/README.zh-CN.md +37 -12
- package/commands/alpha.md +22 -3
- package/data/authored/core-seats.mjs +808 -0
- package/data/authored/growth-seats.mjs +581 -0
- package/data/authored/index.mjs +114 -0
- package/data/authored/quant-seats.mjs +564 -0
- package/data/authored/value-seats.mjs +663 -0
- package/data/build-profile.v1.json +2 -1
- package/data/council-evaluation-protocol.v1.json +7 -4
- package/data/master-selector-method-locales.v1.mjs +296 -0
- package/data/persona-v3-ai-assisted-solo-profile.v1.json +2 -2
- package/data/persona-v3-build-specs.v1.mjs +60 -3
- package/docs/INSTALL.md +43 -6
- package/docs/personas.md +2 -1
- package/docs/plans/v1.0-roadmap.md +487 -0
- package/docs/releases/v0.9.3.md +86 -0
- package/docs/releases/v0.9.4.md +79 -0
- package/docs/releases/v0.9.5.md +96 -0
- package/docs/releases/v1.0.0.md +164 -0
- package/docs/report-contract.md +75 -2
- package/knowledge/ai-assisted-solo/experiments/runs/a.json +13 -13
- package/knowledge/ai-assisted-solo/experiments/runs/b.json +2 -2
- package/knowledge/ai-assisted-solo/experiments/runs/c.json +2 -2
- package/knowledge/ai-assisted-solo/experiments/runs/d13.json +126 -126
- package/knowledge/ai-assisted-solo/experiments/runs/d26.json +274 -254
- package/knowledge/ai-assisted-solo/experiments/runs/e-d13.json +129 -129
- package/knowledge/ai-assisted-solo/experiments/runs/e-d26.json +277 -257
- package/knowledge/ai-assisted-solo/experiments/runs/h_ai_reference.json +278 -258
- package/knowledge/ai-assisted-solo/experiments/simulation-input.json +7278 -556
- package/knowledge/ai-assisted-solo/experiments/simulation-manifest.json +22 -22
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_ackman/reviews/{change_value_bridge.ai-review.json → market_capitalisation.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_ackman/reviews/{power_map.ai-review.json → owner_earnings_yield.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_aschenbrenner/reviews/{compute_power_bridge.ai-review.json → market_capitalisation.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_aschenbrenner/reviews/{timeline_reverse_valuation.ai-review.json → price_implied_cash_yield.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_asness/reviews/{crowding_cost_stress.ai-review.json → nominal_earnings_yield_gap.ai-review.json} +49 -49
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_asness/reviews/{factor_decomposer.ai-review.json → real_earnings_yield_gap.ai-review.json} +49 -49
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_bogle/reviews/expected_return_over_long_bond.ai-review.json +277 -0
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_bogle/reviews/fundamental_expected_return.ai-review.json +277 -0
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_buffett/reviews/{incremental_returns.ai-review.json → market_capitalisation.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_buffett/reviews/{owner_earnings_rebuilder.ai-review.json → owner_earnings_yield.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_burry/reviews/{mispricing_carry.ai-review.json → net_current_asset_surplus_per_share.ai-review.json} +49 -49
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_burry/reviews/{capital_structure_reader.ai-review.json → net_current_asset_value_per_share.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_cathie_wood/reviews/{cost_adoption_curve.ai-review.json → current_cash_yield.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_cathie_wood/reviews/{capture_valuation_bridge.ai-review.json → market_capitalisation.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_dalio/reviews/{debt_driver_stress.ai-review.json → policy_real_rate.ai-review.json} +49 -49
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_dalio/reviews/{regime_classifier.ai-review.json → real_curve_slope.ai-review.json} +49 -49
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_damodaran/reviews/{reverse_valuation.ai-review.json → implied_equity_risk_premium.ai-review.json} +49 -49
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_damodaran/reviews/{story_dcf.ai-review.json → premium_versus_long_run_average.ai-review.json} +49 -49
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_druckenmiller/reviews/{liquidity_revision_map.ai-review.json → liquidity_curve_impulse.ai-review.json} +49 -49
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_druckenmiller/reviews/{inflection_payoff.ai-review.json → policy_real_rate.ai-review.json} +49 -49
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_duan_yongping/reviews/{opportunity_cost.ai-review.json → five_year_opportunity_cost.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_duan_yongping/reviews/{user_value_evidence.ai-review.json → margin_retention.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_fisher/reviews/{research_productivity.ai-review.json → margin_retention.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_fisher/reviews/{scuttlebutt_graph.ai-review.json → reinvestment_spread.ai-review.json} +49 -49
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_forensic_short/reviews/{borrow_catalyst.ai-review.json → cash_conversion_gap.ai-review.json} +49 -49
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_forensic_short/reviews/{accounting_rebuilder.ai-review.json → cash_cover_of_leverage.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_graham/reviews/{asset_floor.ai-review.json → defensive_hurdle_base.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_graham/reviews/{normalized_earnings.ai-review.json → half_normalised_earnings_yield.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_jhunjhunwala/reviews/{penetration_liquidity.ai-review.json → cash_quality_gap.ai-review.json} +49 -49
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_jhunjhunwala/reviews/{promoter_governance.ai-review.json → real_structural_growth.ai-review.json} +49 -49
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_klarman/reviews/{recovery_waterfall.ai-review.json → downside_asset_coverage.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_klarman/reviews/{cash_catalyst_compare.ai-review.json → market_capitalisation.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_li_lu/reviews/{promise_integrity_ledger.ai-review.json → cash_backed_decade_return.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_li_lu/reviews/{ten_year_return_bridge.ai-review.json → decade_return_over_long_bond.ai-review.json} +49 -49
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_lynch/reviews/{story_numbers_check.ai-review.json → growth_justified_capitalisation.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_lynch/reviews/{category_classifier.ai-review.json → market_capitalisation.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_marks/reviews/{cycle_temperature.ai-review.json → credit_cycle_position.ai-review.json} +49 -49
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_marks/reviews/{implied_expectations.ai-review.json → equity_over_corporate_debt.ai-review.json} +49 -49
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_munger/reviews/{failure_path_graph.ai-review.json → debt_service_cushion.ai-review.json} +49 -49
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_munger/reviews/{incentive_map.ai-review.json → reported_earnings_cash_gap.ai-review.json} +49 -49
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_natenberg/reviews/{surface_builder.ai-review.json → normalised_skew.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_natenberg/reviews/{greeks_payoff.ai-review.json → round_trip_cost.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_pabrai/reviews/{downside_floor.ai-review.json → downside_floor_coverage.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_pabrai/reviews/{discrete_payoff.ai-review.json → market_capitalisation.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_simons/reviews/{oos_cost_test.ai-review.json → absolute_session_move.ai-review.json} +42 -42
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_simons/reviews/{leakage_audit.ai-review.json → session_move_over_implied.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_sinclair/reviews/{realized_vol_forecast.ai-review.json → round_trip_cost.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_sinclair/reviews/{net_edge_sizer.ai-review.json → volatility_per_unit_of_width.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_soros/reviews/{reversal_monitor.ai-review.json → credit_cycle_position.ai-review.json} +49 -49
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_soros/reviews/{reflexivity_graph.ai-review.json → financing_burden.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_taleb/reviews/{tail_friction.ai-review.json → debt_service_cushion.ai-review.json} +49 -49
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_taleb/reviews/{payoff_ruin.ai-review.json → normalised_skew.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_thorp/reviews/{edge_recalculator.ai-review.json → edge_per_unit_of_volatility.ai-review.json} +46 -46
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/master_thorp/reviews/{fractional_kelly.ai-review.json → net_edge.ai-review.json} +49 -49
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-formula-reviews/review-manifest.json +288 -270
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-semantic-adjudications/index.json +2 -2
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-semantic-extractions/index.json +2 -2
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-semantic-skeptic-reviews/index.json +2 -2
- package/knowledge/ai-assisted-solo/reviews/persona-v3-ai-source-prereviews/index.json +6 -2
- package/knowledge/solo-test/masters/master_ackman/decision_policy.json +122 -11
- package/knowledge/solo-test/masters/master_ackman/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_ackman/manifest.json +27 -10
- package/knowledge/solo-test/masters/master_ackman/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_ackman/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_ackman/tools.json +56 -30
- package/knowledge/solo-test/masters/master_aschenbrenner/decision_policy.json +101 -10
- package/knowledge/solo-test/masters/master_aschenbrenner/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_aschenbrenner/manifest.json +26 -8
- package/knowledge/solo-test/masters/master_aschenbrenner/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_aschenbrenner/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_aschenbrenner/tools.json +56 -30
- package/knowledge/solo-test/masters/master_asness/decision_policy.json +89 -10
- package/knowledge/solo-test/masters/master_asness/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_asness/manifest.json +25 -8
- package/knowledge/solo-test/masters/master_asness/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_asness/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_asness/tools.json +56 -30
- package/knowledge/solo-test/masters/master_bogle/counterfactuals.jsonl +0 -0
- package/knowledge/solo-test/masters/master_bogle/decision_cases.jsonl +0 -0
- package/knowledge/solo-test/masters/master_bogle/decision_policy.json +170 -0
- package/knowledge/solo-test/masters/master_bogle/doctrine.jsonl +14 -0
- package/knowledge/solo-test/masters/master_bogle/evaluation/calibration_cases.jsonl +0 -0
- package/knowledge/solo-test/masters/master_bogle/evaluation/experiments.json +5 -0
- package/knowledge/solo-test/masters/master_bogle/evaluation/golden_cases.jsonl +0 -0
- package/knowledge/solo-test/masters/master_bogle/evaluation/pairwise_cases.jsonl +0 -0
- package/knowledge/solo-test/masters/master_bogle/failures.jsonl +0 -0
- package/knowledge/solo-test/masters/master_bogle/manifest.json +141 -0
- package/knowledge/solo-test/masters/master_bogle/memory_policy.json +5 -0
- package/knowledge/solo-test/masters/master_bogle/provisional-index.json +41 -0
- package/knowledge/solo-test/masters/master_bogle/research_policy.json +11 -0
- package/knowledge/solo-test/masters/master_bogle/sources.jsonl +1 -0
- package/knowledge/solo-test/masters/master_bogle/tools.json +120 -0
- package/knowledge/solo-test/masters/master_bogle/voice.en.md +7 -0
- package/knowledge/solo-test/masters/master_bogle/voice.zh.md +7 -0
- package/knowledge/solo-test/masters/master_buffett/decision_policy.json +102 -11
- package/knowledge/solo-test/masters/master_buffett/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_buffett/manifest.json +24 -8
- package/knowledge/solo-test/masters/master_buffett/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_buffett/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_buffett/tools.json +55 -29
- package/knowledge/solo-test/masters/master_burry/decision_policy.json +102 -12
- package/knowledge/solo-test/masters/master_burry/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_burry/manifest.json +26 -10
- package/knowledge/solo-test/masters/master_burry/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_burry/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_burry/tools.json +56 -30
- package/knowledge/solo-test/masters/master_cathie_wood/decision_policy.json +74 -12
- package/knowledge/solo-test/masters/master_cathie_wood/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_cathie_wood/manifest.json +26 -10
- package/knowledge/solo-test/masters/master_cathie_wood/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_cathie_wood/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_cathie_wood/tools.json +56 -30
- package/knowledge/solo-test/masters/master_dalio/decision_policy.json +123 -16
- package/knowledge/solo-test/masters/master_dalio/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_dalio/manifest.json +24 -8
- package/knowledge/solo-test/masters/master_dalio/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_dalio/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_dalio/tools.json +56 -30
- package/knowledge/solo-test/masters/master_damodaran/decision_policy.json +58 -10
- package/knowledge/solo-test/masters/master_damodaran/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_damodaran/manifest.json +23 -8
- package/knowledge/solo-test/masters/master_damodaran/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_damodaran/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_damodaran/tools.json +54 -28
- package/knowledge/solo-test/masters/master_druckenmiller/decision_policy.json +89 -10
- package/knowledge/solo-test/masters/master_druckenmiller/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_druckenmiller/manifest.json +25 -8
- package/knowledge/solo-test/masters/master_druckenmiller/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_druckenmiller/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_druckenmiller/tools.json +55 -29
- package/knowledge/solo-test/masters/master_duan_yongping/decision_policy.json +138 -13
- package/knowledge/solo-test/masters/master_duan_yongping/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_duan_yongping/manifest.json +31 -11
- package/knowledge/solo-test/masters/master_duan_yongping/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_duan_yongping/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_duan_yongping/tools.json +82 -30
- package/knowledge/solo-test/masters/master_fisher/decision_policy.json +102 -11
- package/knowledge/solo-test/masters/master_fisher/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_fisher/manifest.json +27 -10
- package/knowledge/solo-test/masters/master_fisher/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_fisher/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_fisher/tools.json +58 -32
- package/knowledge/solo-test/masters/master_forensic_short/decision_policy.json +93 -14
- package/knowledge/solo-test/masters/master_forensic_short/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_forensic_short/manifest.json +20 -8
- package/knowledge/solo-test/masters/master_forensic_short/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_forensic_short/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_forensic_short/tools.json +53 -27
- package/knowledge/solo-test/masters/master_graham/decision_policy.json +103 -12
- package/knowledge/solo-test/masters/master_graham/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_graham/manifest.json +26 -8
- package/knowledge/solo-test/masters/master_graham/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_graham/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_graham/tools.json +67 -28
- package/knowledge/solo-test/masters/master_jhunjhunwala/decision_policy.json +77 -12
- package/knowledge/solo-test/masters/master_jhunjhunwala/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_jhunjhunwala/manifest.json +25 -10
- package/knowledge/solo-test/masters/master_jhunjhunwala/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_jhunjhunwala/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_jhunjhunwala/tools.json +54 -28
- package/knowledge/solo-test/masters/master_klarman/decision_policy.json +105 -14
- package/knowledge/solo-test/masters/master_klarman/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_klarman/manifest.json +22 -6
- package/knowledge/solo-test/masters/master_klarman/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_klarman/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_klarman/tools.json +55 -29
- package/knowledge/solo-test/masters/master_li_lu/decision_policy.json +101 -10
- package/knowledge/solo-test/masters/master_li_lu/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_li_lu/manifest.json +27 -10
- package/knowledge/solo-test/masters/master_li_lu/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_li_lu/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_li_lu/tools.json +58 -32
- package/knowledge/solo-test/masters/master_lynch/decision_policy.json +127 -16
- package/knowledge/solo-test/masters/master_lynch/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_lynch/manifest.json +28 -10
- package/knowledge/solo-test/masters/master_lynch/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_lynch/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_lynch/tools.json +67 -28
- package/knowledge/solo-test/masters/master_marks/decision_policy.json +71 -9
- package/knowledge/solo-test/masters/master_marks/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_marks/manifest.json +25 -10
- package/knowledge/solo-test/masters/master_marks/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_marks/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_marks/tools.json +54 -28
- package/knowledge/solo-test/masters/master_munger/decision_policy.json +141 -16
- package/knowledge/solo-test/masters/master_munger/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_munger/manifest.json +24 -10
- package/knowledge/solo-test/masters/master_munger/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_munger/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_munger/tools.json +52 -26
- package/knowledge/solo-test/masters/master_natenberg/decision_policy.json +59 -11
- package/knowledge/solo-test/masters/master_natenberg/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_natenberg/manifest.json +23 -10
- package/knowledge/solo-test/masters/master_natenberg/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_natenberg/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_natenberg/tools.json +50 -24
- package/knowledge/solo-test/masters/master_pabrai/decision_policy.json +125 -14
- package/knowledge/solo-test/masters/master_pabrai/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_pabrai/manifest.json +22 -6
- package/knowledge/solo-test/masters/master_pabrai/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_pabrai/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_pabrai/tools.json +55 -29
- package/knowledge/solo-test/masters/master_simons/decision_policy.json +59 -11
- package/knowledge/solo-test/masters/master_simons/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_simons/manifest.json +22 -8
- package/knowledge/solo-test/masters/master_simons/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_simons/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_simons/tools.json +43 -30
- package/knowledge/solo-test/masters/master_sinclair/decision_policy.json +59 -11
- package/knowledge/solo-test/masters/master_sinclair/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_sinclair/manifest.json +22 -10
- package/knowledge/solo-test/masters/master_sinclair/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_sinclair/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_sinclair/tools.json +54 -28
- package/knowledge/solo-test/masters/master_soros/decision_policy.json +98 -10
- package/knowledge/solo-test/masters/master_soros/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_soros/manifest.json +24 -11
- package/knowledge/solo-test/masters/master_soros/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_soros/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_soros/tools.json +54 -28
- package/knowledge/solo-test/masters/master_taleb/decision_policy.json +124 -13
- package/knowledge/solo-test/masters/master_taleb/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_taleb/manifest.json +23 -9
- package/knowledge/solo-test/masters/master_taleb/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_taleb/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_taleb/tools.json +50 -24
- package/knowledge/solo-test/masters/master_thorp/decision_policy.json +61 -13
- package/knowledge/solo-test/masters/master_thorp/doctrine.jsonl +2 -2
- package/knowledge/solo-test/masters/master_thorp/manifest.json +25 -10
- package/knowledge/solo-test/masters/master_thorp/provisional-index.json +3 -3
- package/knowledge/solo-test/masters/master_thorp/sources.jsonl +1 -1
- package/knowledge/solo-test/masters/master_thorp/tools.json +56 -30
- package/knowledge/solo-test/persona-v3-solo-test-formulas/compilation-manifest.json +290 -264
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_ackman/components/tools.json +58 -32
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_ackman/provisional-derivations/market_capitalisation.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_ackman/provisional-derivations/owner_earnings_yield.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_aschenbrenner/components/tools.json +58 -32
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_aschenbrenner/provisional-derivations/market_capitalisation.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_aschenbrenner/provisional-derivations/price_implied_cash_yield.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_asness/components/tools.json +58 -32
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_asness/provisional-derivations/nominal_earnings_yield_gap.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_asness/provisional-derivations/real_earnings_yield_gap.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_bogle/components/tools.json +120 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_bogle/provisional-derivations/expected_return_over_long_bond.derived-proxy-evidence.json +77 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_bogle/provisional-derivations/fundamental_expected_return.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_buffett/components/tools.json +57 -31
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_buffett/provisional-derivations/market_capitalisation.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_buffett/provisional-derivations/owner_earnings_yield.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_burry/components/tools.json +58 -32
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_burry/provisional-derivations/net_current_asset_surplus_per_share.derived-proxy-evidence.json +77 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_burry/provisional-derivations/net_current_asset_value_per_share.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_cathie_wood/components/tools.json +58 -32
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_cathie_wood/provisional-derivations/current_cash_yield.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_cathie_wood/provisional-derivations/market_capitalisation.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_dalio/components/tools.json +58 -32
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_dalio/provisional-derivations/policy_real_rate.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_dalio/provisional-derivations/real_curve_slope.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_damodaran/components/tools.json +56 -30
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_damodaran/provisional-derivations/implied_equity_risk_premium.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_damodaran/provisional-derivations/{reverse_valuation.derived-proxy-evidence.json → premium_versus_long_run_average.derived-proxy-evidence.json} +29 -16
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_druckenmiller/components/tools.json +57 -31
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_druckenmiller/provisional-derivations/liquidity_curve_impulse.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_druckenmiller/provisional-derivations/policy_real_rate.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_duan_yongping/components/tools.json +84 -32
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_duan_yongping/provisional-derivations/five_year_opportunity_cost.derived-proxy-evidence.json +102 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_duan_yongping/provisional-derivations/margin_retention.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_fisher/components/tools.json +60 -34
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_fisher/provisional-derivations/margin_retention.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_fisher/provisional-derivations/reinvestment_spread.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_forensic_short/components/tools.json +55 -29
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_forensic_short/provisional-derivations/{accounting_rebuilder.derived-proxy-evidence.json → cash_conversion_gap.derived-proxy-evidence.json} +28 -15
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_forensic_short/provisional-derivations/cash_cover_of_leverage.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_graham/components/tools.json +69 -30
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_graham/provisional-derivations/defensive_hurdle_base.derived-proxy-evidence.json +89 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_graham/provisional-derivations/half_normalised_earnings_yield.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_jhunjhunwala/components/tools.json +56 -30
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_jhunjhunwala/provisional-derivations/cash_quality_gap.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_jhunjhunwala/provisional-derivations/real_structural_growth.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_klarman/components/tools.json +57 -31
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_klarman/provisional-derivations/downside_asset_coverage.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_klarman/provisional-derivations/market_capitalisation.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_li_lu/components/tools.json +60 -34
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_li_lu/provisional-derivations/cash_backed_decade_return.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_li_lu/provisional-derivations/decade_return_over_long_bond.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_lynch/components/tools.json +69 -30
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_lynch/provisional-derivations/growth_justified_capitalisation.derived-proxy-evidence.json +89 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_lynch/provisional-derivations/market_capitalisation.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_marks/components/tools.json +56 -30
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_marks/provisional-derivations/credit_cycle_position.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_marks/provisional-derivations/equity_over_corporate_debt.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_munger/components/tools.json +54 -28
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_munger/provisional-derivations/debt_service_cushion.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_munger/provisional-derivations/reported_earnings_cash_gap.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_natenberg/components/tools.json +52 -26
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_natenberg/provisional-derivations/{surface_builder.derived-proxy-evidence.json → normalised_skew.derived-proxy-evidence.json} +27 -14
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_natenberg/provisional-derivations/round_trip_cost.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_pabrai/components/tools.json +57 -31
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_pabrai/provisional-derivations/downside_floor_coverage.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_pabrai/provisional-derivations/market_capitalisation.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_simons/components/tools.json +45 -32
- package/knowledge/solo-test/persona-v3-solo-test-formulas/{master_natenberg/provisional-derivations/greeks_payoff.derived-proxy-evidence.json → master_simons/provisional-derivations/absolute_session_move.derived-proxy-evidence.json} +17 -17
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_simons/provisional-derivations/session_move_over_implied.derived-proxy-evidence.json +77 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_sinclair/components/tools.json +56 -30
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_sinclair/provisional-derivations/round_trip_cost.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_sinclair/provisional-derivations/volatility_per_unit_of_width.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_soros/components/tools.json +56 -30
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_soros/provisional-derivations/credit_cycle_position.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_soros/provisional-derivations/financing_burden.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_taleb/components/tools.json +52 -26
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_taleb/provisional-derivations/debt_service_cushion.derived-proxy-evidence.json +76 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_taleb/provisional-derivations/{tail_friction.derived-proxy-evidence.json → normalised_skew.derived-proxy-evidence.json} +27 -14
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_thorp/components/tools.json +58 -32
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_thorp/provisional-derivations/edge_per_unit_of_volatility.derived-proxy-evidence.json +77 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_thorp/provisional-derivations/net_edge.derived-proxy-evidence.json +76 -0
- package/mcp/lib/breadth.mjs +122 -0
- package/mcp/lib/codex.mjs +3 -3
- package/mcp/lib/constants.mjs +76 -25
- package/mcp/lib/council-options.mjs +95 -40
- package/mcp/lib/council-selection.mjs +95 -9
- package/mcp/lib/damodaran.mjs +119 -0
- package/mcp/lib/fred.mjs +246 -0
- package/mcp/lib/fund-holdings-parsers.mjs +297 -0
- package/mcp/lib/fundamentals.mjs +801 -0
- package/mcp/lib/funds.mjs +750 -0
- package/mcp/lib/gates.mjs +149 -15
- package/mcp/lib/grounding.mjs +188 -36
- package/mcp/lib/index-aggregate.mjs +718 -0
- package/mcp/lib/insider-ownership.mjs +149 -0
- package/mcp/lib/instrument-facts.mjs +557 -0
- package/mcp/lib/instruments.mjs +191 -0
- package/mcp/lib/lang.mjs +109 -2
- package/mcp/lib/markdown.mjs +620 -138
- package/mcp/lib/master-catalog.mjs +32 -3
- package/mcp/lib/orchestrator.mjs +1121 -290
- package/mcp/lib/packets.mjs +227 -21
- package/mcp/lib/personas/engine.mjs +44 -31
- package/mcp/lib/personas-v3/compiler.mjs +2 -0
- package/mcp/lib/personas-v3/deterministic-executor.mjs +13 -2
- package/mcp/lib/personas-v3/ga-external-evidence.mjs +3 -2
- package/mcp/lib/personas-v3/ga-gate.mjs +2 -1
- package/mcp/lib/personas-v3/ga-package-evidence.mjs +5 -4
- package/mcp/lib/personas-v3/grounding-adapter.mjs +309 -2
- package/mcp/lib/personas-v3/loader.mjs +10 -7
- package/mcp/lib/personas-v3/production-root.mjs +5 -4
- package/mcp/lib/personas-v3/release-formula-evidence.mjs +14 -7
- package/mcp/lib/personas-v3/release-source-evidence.mjs +2 -1
- package/mcp/lib/personas-v3/releases.mjs +5 -4
- package/mcp/lib/personas-v3/runtime-release-integrity.mjs +6 -5
- package/mcp/lib/personas-v3/semantic-source-adjudication.mjs +2 -1
- package/mcp/lib/personas-v3/semantic-source-extraction.mjs +2 -1
- package/mcp/lib/personas-v3/semantic-source-skeptic-review.mjs +2 -1
- package/mcp/lib/personas-v3/source-acquisition.mjs +10 -3
- package/mcp/lib/personas-v3/source-review-operations.mjs +3 -2
- package/mcp/lib/personas-v3/staging.mjs +22 -3
- package/mcp/lib/prompts.mjs +119 -2
- package/mcp/lib/quotes.mjs +5 -0
- package/mcp/lib/rpc.mjs +101 -42
- package/mcp/lib/run-store.mjs +28 -3
- package/mcp/lib/sec.mjs +32 -0
- package/mcp/lib/tables.mjs +11 -0
- package/mcp/lib/voice.mjs +122 -0
- package/mcp/lib/xbrl-aggregates.mjs +153 -0
- package/mcp/lib/xbrl-series.mjs +339 -0
- package/mcp/lib/xlsx.mjs +155 -0
- package/package.json +5 -5
- package/personas/masters/masters-value/bogle.md +145 -0
- package/schemas/council-evaluation-protocol-v1.schema.json +2 -2
- package/schemas/persona-v3-ai-assisted-solo-profile-v1.schema.json +2 -2
- package/schemas/persona-v3-ai-machine-simulation-v1.schema.json +1 -1
- package/schemas/persona-v3-build-spec-v1.schema.json +3 -3
- package/schemas/persona-v3-release-formula-review-evidence-v1.schema.json +3 -3
- package/schemas/persona-v3-release-manifest-v1.schema.json +6 -6
- package/schemas/persona-v3-release-source-review-evidence-v1.schema.json +3 -3
- package/schemas/persona-v3-tool-graph-v1.schema.json +1 -1
- package/schemas/persona-v3.schema.json +37 -2
- package/schemas/source-review-batch-v1.schema.json +9 -9
- package/scripts/assemble-persona-v3-release.mjs +3 -2
- package/scripts/build-persona-v3-solo-test-packs.mjs +6 -8
- package/scripts/check-persona-v3-ga.mjs +1 -1
- package/scripts/check-persona-v3-production-candidates.mjs +1 -1
- package/scripts/compile-persona-v3-formulas.mjs +19 -18
- package/scripts/doctor.mjs +11 -9
- package/scripts/export-persona-source-review-batch.mjs +1 -1
- package/scripts/generate-persona-v3-drafts.mjs +2 -2
- package/scripts/lib/build-profile.mjs +24 -0
- package/scripts/lib/council-evaluation-protocol.mjs +7 -6
- package/scripts/lib/host-capabilities.mjs +2 -1
- package/scripts/lib/packaged-host-parity.mjs +63 -8
- package/scripts/lib/persona-v3-ai-assisted-solo-status.mjs +6 -4
- package/scripts/lib/persona-v3-ai-formula-review.mjs +6 -5
- package/scripts/lib/persona-v3-ai-machine-simulations.mjs +32 -4
- package/scripts/lib/persona-v3-build-specs.mjs +3 -2
- package/scripts/lib/persona-v3-draft-packs.mjs +2 -2
- package/scripts/lib/persona-v3-formula-pipeline.mjs +11 -10
- package/scripts/lib/persona-v3-production-candidates.mjs +10 -9
- package/scripts/lib/persona-v3-solo-formula-pipeline.mjs +182 -16
- package/scripts/lib/persona-v3-solo-test-packs.mjs +143 -16
- package/scripts/package-smoke.mjs +32 -12
- package/scripts/report-persona-corpus-gaps.mjs +4 -1
- package/scripts/review-persona-v3-solo-formulas.mjs +12 -8
- package/scripts/run-tests.mjs +23 -2
- package/scripts/scaffold-persona-v3-staging.mjs +1 -1
- package/skills/agent-skills-governance/SKILL.md +8 -2
- package/skills/alphacouncil-agent/SKILL.md +60 -9
- package/skills/public-equity-investing/SKILL.md +17 -0
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_ackman/provisional-derivations/change_value_bridge.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_ackman/provisional-derivations/power_map.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_aschenbrenner/provisional-derivations/compute_power_bridge.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_aschenbrenner/provisional-derivations/timeline_reverse_valuation.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_asness/provisional-derivations/crowding_cost_stress.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_asness/provisional-derivations/factor_decomposer.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_buffett/provisional-derivations/incremental_returns.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_buffett/provisional-derivations/owner_earnings_rebuilder.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_burry/provisional-derivations/capital_structure_reader.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_burry/provisional-derivations/mispricing_carry.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_cathie_wood/provisional-derivations/capture_valuation_bridge.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_cathie_wood/provisional-derivations/cost_adoption_curve.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_dalio/provisional-derivations/debt_driver_stress.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_dalio/provisional-derivations/regime_classifier.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_damodaran/provisional-derivations/story_dcf.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_druckenmiller/provisional-derivations/inflection_payoff.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_druckenmiller/provisional-derivations/liquidity_revision_map.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_duan_yongping/provisional-derivations/opportunity_cost.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_duan_yongping/provisional-derivations/user_value_evidence.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_fisher/provisional-derivations/research_productivity.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_fisher/provisional-derivations/scuttlebutt_graph.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_forensic_short/provisional-derivations/borrow_catalyst.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_graham/provisional-derivations/asset_floor.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_graham/provisional-derivations/normalized_earnings.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_jhunjhunwala/provisional-derivations/penetration_liquidity.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_jhunjhunwala/provisional-derivations/promoter_governance.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_klarman/provisional-derivations/cash_catalyst_compare.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_klarman/provisional-derivations/recovery_waterfall.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_li_lu/provisional-derivations/promise_integrity_ledger.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_li_lu/provisional-derivations/ten_year_return_bridge.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_lynch/provisional-derivations/category_classifier.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_lynch/provisional-derivations/story_numbers_check.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_marks/provisional-derivations/cycle_temperature.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_marks/provisional-derivations/implied_expectations.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_munger/provisional-derivations/failure_path_graph.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_munger/provisional-derivations/incentive_map.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_pabrai/provisional-derivations/discrete_payoff.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_pabrai/provisional-derivations/downside_floor.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_simons/provisional-derivations/leakage_audit.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_simons/provisional-derivations/oos_cost_test.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_sinclair/provisional-derivations/net_edge_sizer.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_sinclair/provisional-derivations/realized_vol_forecast.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_soros/provisional-derivations/reflexivity_graph.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_soros/provisional-derivations/reversal_monitor.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_taleb/provisional-derivations/payoff_ruin.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_thorp/provisional-derivations/edge_recalculator.derived-proxy-evidence.json +0 -64
- package/knowledge/solo-test/persona-v3-solo-test-formulas/master_thorp/provisional-derivations/fractional_kelly.derived-proxy-evidence.json +0 -64
package/scripts/doctor.mjs
CHANGED
|
@@ -18,6 +18,8 @@ import {
|
|
|
18
18
|
} from "../mcp/lib/personas-v3/registry.mjs";
|
|
19
19
|
import { scanPersonaCorpusGaps } from "./report-persona-corpus-gaps.mjs";
|
|
20
20
|
import { auditHostAdapterFreshness, validateHostCapabilities } from "./lib/host-capabilities.mjs";
|
|
21
|
+
import { CANONICAL_MASTER_COUNT } from "../mcp/lib/personas-v3/staging.mjs";
|
|
22
|
+
import { PLANNED_TOOL_COUNT } from "../data/persona-v3-build-specs.v1.mjs";
|
|
21
23
|
|
|
22
24
|
const ROOT = fileURLToPath(new URL("..", import.meta.url));
|
|
23
25
|
const problems = [];
|
|
@@ -95,20 +97,20 @@ try {
|
|
|
95
97
|
const registry = loadCompiledPersonaPacks({ buildProfile });
|
|
96
98
|
const operatorCount = registry.packs.filter((pack) => pack.admission.level === "operator_lens").length;
|
|
97
99
|
const toolCount = registry.packs.reduce((sum, pack) => sum + pack.components.tools.length, 0);
|
|
98
|
-
const validSoloCut = registry.packs.length ===
|
|
99
|
-
&& operatorCount ===
|
|
100
|
-
&& toolCount ===
|
|
100
|
+
const validSoloCut = registry.packs.length === CANONICAL_MASTER_COUNT
|
|
101
|
+
&& operatorCount === CANONICAL_MASTER_COUNT
|
|
102
|
+
&& toolCount === PLANNED_TOOL_COUNT
|
|
101
103
|
&& registry.packs.every((pack) => pack.build_profile === "solo_test");
|
|
102
104
|
if (validSoloCut) {
|
|
103
|
-
ok("solo-test runtime",
|
|
105
|
+
ok("solo-test runtime", `${CANONICAL_MASTER_COUNT} physical provisional operator_lens; ${PLANNED_TOOL_COUNT} derived-proxy tools; 0 method_model`);
|
|
104
106
|
notes.push("Formal PersonaPack v3 production GA is not passed; human source/formula review, signed experiments, and live four-host E2E remain absent");
|
|
105
107
|
} else {
|
|
106
|
-
warn("solo-test runtime incomplete", `${registry.packs.length}
|
|
108
|
+
warn("solo-test runtime incomplete", `${registry.packs.length}/${CANONICAL_MASTER_COUNT} packs, ${operatorCount}/${CANONICAL_MASTER_COUNT} operator_lens, ${toolCount}/${PLANNED_TOOL_COUNT} tools`);
|
|
107
109
|
}
|
|
108
|
-
} else if (/^0\.9\./.test(VERSION) && report.summary.operational_or_higher !==
|
|
109
|
-
warn("0.9 v3 cutover incomplete", `${report.summary.operational_or_higher}
|
|
110
|
-
} else if (report.summary.operational_or_higher !==
|
|
111
|
-
notes.push(`PersonaPack v3 migration remains in development: ${report.summary.operational_or_higher}
|
|
110
|
+
} else if (/^0\.9\./.test(VERSION) && report.summary.operational_or_higher !== CANONICAL_MASTER_COUNT) {
|
|
111
|
+
warn("0.9 v3 cutover incomplete", `${report.summary.operational_or_higher}/${CANONICAL_MASTER_COUNT} seats operational or higher`);
|
|
112
|
+
} else if (report.summary.operational_or_higher !== CANONICAL_MASTER_COUNT) {
|
|
113
|
+
notes.push(`PersonaPack v3 migration remains in development: ${report.summary.operational_or_higher}/${CANONICAL_MASTER_COUNT} operational or higher`);
|
|
112
114
|
}
|
|
113
115
|
} catch (error) {
|
|
114
116
|
warn("PersonaPack v3 corpus inventory failed", error.message.split("\n")[0]);
|
|
@@ -82,7 +82,7 @@ function helpText() {
|
|
|
82
82
|
" node scripts/export-persona-source-review-batch.mjs --output FILE --write [--trusted-reviewer-keys FILE] [--json]",
|
|
83
83
|
"",
|
|
84
84
|
"Default/check mode is read-only. --write creates one new audit batch and never overwrites it.",
|
|
85
|
-
"The batch includes
|
|
85
|
+
"The batch includes every canonical seat, raw acquisition bindings, human-only proposal templates, hashes, locator gaps, and strict trusted-principal quorum progress.",
|
|
86
86
|
"It never prepares, reviews, approves, promotes, or writes production knowledge.",
|
|
87
87
|
"",
|
|
88
88
|
].join("\n");
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
/** Generate or verify
|
|
2
|
+
/** Generate or verify every non-production PersonaPack v3 editorial draft slices. */
|
|
3
3
|
|
|
4
4
|
import { fileURLToPath } from "node:url";
|
|
5
5
|
import { resolve } from "node:path";
|
|
@@ -55,7 +55,7 @@ export function main(argv = process.argv.slice(2)) {
|
|
|
55
55
|
"Usage: node scripts/generate-persona-v3-drafts.mjs [--check|--write] [--json|--markdown]",
|
|
56
56
|
"",
|
|
57
57
|
" --check verify only (default; never writes)",
|
|
58
|
-
" --write deterministically write
|
|
58
|
+
" --write deterministically write every editorial draft slice, then verify",
|
|
59
59
|
" --json emit the machine-readable inventory",
|
|
60
60
|
" --markdown emit the full Markdown inventory report",
|
|
61
61
|
" --root PATH override the staging root",
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
|
|
4
|
+
export function loadBuildProfile(repoRoot) {
|
|
5
|
+
const file = resolve(repoRoot, "data/build-profile.v1.json");
|
|
6
|
+
const profile = JSON.parse(readFileSync(file, "utf8"));
|
|
7
|
+
if (profile?.schema_version !== 1) throw new Error(`unsupported build profile at ${file}`);
|
|
8
|
+
return Object.freeze(profile);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Runtime releases and PersonaPack revisions are independent version axes.
|
|
13
|
+
*
|
|
14
|
+
* Falling back to package_version keeps older packaged trees readable, while current trees
|
|
15
|
+
* pin persona_pack_version so a routing-only release cannot invalidate pack review evidence.
|
|
16
|
+
*/
|
|
17
|
+
export function resolvePersonaPackVersion(repoRoot) {
|
|
18
|
+
const profile = loadBuildProfile(repoRoot);
|
|
19
|
+
const version = profile.persona_pack_version || profile.package_version;
|
|
20
|
+
if (typeof version !== "string" || !version.trim()) {
|
|
21
|
+
throw new Error("build profile must declare persona_pack_version or package_version");
|
|
22
|
+
}
|
|
23
|
+
return version;
|
|
24
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { CANONICAL_MASTER_COUNT } from "../../mcp/lib/personas-v3/staging.mjs";
|
|
1
2
|
import { readFileSync } from "node:fs";
|
|
2
3
|
import { dirname, resolve } from "node:path";
|
|
3
4
|
import { fileURLToPath } from "node:url";
|
|
@@ -122,7 +123,7 @@ function liveSnapshot() {
|
|
|
122
123
|
reg,
|
|
123
124
|
default_analyst_ids: [...DEFAULT_TASKS],
|
|
124
125
|
verifier_ids: verifiers,
|
|
125
|
-
|
|
126
|
+
canonical_master_ids: masters,
|
|
126
127
|
};
|
|
127
128
|
}
|
|
128
129
|
|
|
@@ -232,7 +233,7 @@ function validateMetrics(protocol, errors) {
|
|
|
232
233
|
|
|
233
234
|
function expectedArm(id, live) {
|
|
234
235
|
const defaultAnalysts = live.default_analyst_ids;
|
|
235
|
-
const masters = live.
|
|
236
|
+
const masters = live.canonical_master_ids;
|
|
236
237
|
const common = { verifier_ids: [], bounded_repair: null, human_reference: null };
|
|
237
238
|
if (id === "A") return { execution_mode: "single_agent_baseline", analyst_ids: [], master_ids: [], base_arm_ids: [], master_execution_mode: "none", ...common };
|
|
238
239
|
if (id === "B") return { execution_mode: "machine_council", analyst_ids: defaultAnalysts, master_ids: [], base_arm_ids: [], master_execution_mode: "none", ...common };
|
|
@@ -298,12 +299,12 @@ export function validateCouncilEvaluationProtocol(protocol = loadCouncilEvaluati
|
|
|
298
299
|
exactValue(protocol.canonical_arm_order, CANONICAL_ARM_IDS, "canonical_arm_order", errors);
|
|
299
300
|
|
|
300
301
|
const live = liveSnapshot();
|
|
301
|
-
exactFields(protocol.registry_snapshot, ["default_analyst_ids", "verifier_ids", "priority_13_master_ids", "
|
|
302
|
+
exactFields(protocol.registry_snapshot, ["default_analyst_ids", "verifier_ids", "priority_13_master_ids", "canonical_master_ids"], "registry_snapshot", errors);
|
|
302
303
|
exactValue(protocol.registry_snapshot?.default_analyst_ids, live.default_analyst_ids, "registry_snapshot.default_analyst_ids vs live DEFAULT_TASKS", errors);
|
|
303
304
|
exactValue(protocol.registry_snapshot?.verifier_ids, live.verifier_ids, "registry_snapshot.verifier_ids vs live verify roster", errors);
|
|
304
305
|
exactValue(protocol.registry_snapshot?.priority_13_master_ids, PRIORITY_13_MASTER_IDS, "registry_snapshot.priority_13_master_ids", errors);
|
|
305
|
-
exactValue(protocol.registry_snapshot?.
|
|
306
|
-
if (live.
|
|
306
|
+
exactValue(protocol.registry_snapshot?.canonical_master_ids, live.canonical_master_ids, "registry_snapshot.canonical_master_ids vs live master registry", errors);
|
|
307
|
+
if (live.canonical_master_ids.length !== CANONICAL_MASTER_COUNT) errors.push(`live master registry must contain exactly ${CANONICAL_MASTER_COUNT} enabled seats, got ${live.canonical_master_ids.length}`);
|
|
307
308
|
if (live.verifier_ids.length !== 3) errors.push(`live verify roster must contain exactly 3 verifiers, got ${live.verifier_ids.length}`);
|
|
308
309
|
for (const id of live.default_analyst_ids) {
|
|
309
310
|
const persona = live.reg.get(id);
|
|
@@ -327,7 +328,7 @@ export function validateCouncilEvaluationProtocol(protocol = loadCouncilEvaluati
|
|
|
327
328
|
live: {
|
|
328
329
|
default_analyst_ids: live.default_analyst_ids,
|
|
329
330
|
verifier_ids: live.verifier_ids,
|
|
330
|
-
|
|
331
|
+
canonical_master_ids: live.canonical_master_ids,
|
|
331
332
|
},
|
|
332
333
|
};
|
|
333
334
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { CANONICAL_MASTER_COUNT } from "../../mcp/lib/personas-v3/staging.mjs";
|
|
1
2
|
import { createHash } from "node:crypto";
|
|
2
3
|
import { existsSync, readFileSync } from "node:fs";
|
|
3
4
|
import os from "node:os";
|
|
@@ -216,7 +217,7 @@ export function validateHostCapabilities(contract = loadHostCapabilities(), { ro
|
|
|
216
217
|
}
|
|
217
218
|
|
|
218
219
|
const catalog = catalogSnapshot("English");
|
|
219
|
-
if (catalog.count !==
|
|
220
|
+
if (catalog.count !== CANONICAL_MASTER_COUNT || !arraysEqual(catalog.all_master_ids, registry().ids("master"))) errors.push(`runtime selector catalog is not the canonical ${CANONICAL_MASTER_COUNT}-seat registry order`);
|
|
220
221
|
if (!/^[a-f0-9]{64}$/.test(catalog.catalog_hash)) errors.push("runtime catalog hash is not sha256 hex");
|
|
221
222
|
for (const [index, seat] of catalog.masters.entries()) {
|
|
222
223
|
if (seat.index !== index + 1 || seat.id !== catalog.all_master_ids[index]) errors.push(`runtime selector index/id drift at ${index + 1}`);
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* PersonaPack v3 decision comparison while the production package contains zero v3 packs.
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
+
import { CANONICAL_MASTER_COUNT } from "../../mcp/lib/personas-v3/staging.mjs";
|
|
9
10
|
import { createHash } from "node:crypto";
|
|
10
11
|
import { once } from "node:events";
|
|
11
12
|
import {
|
|
@@ -29,7 +30,12 @@ import { isDeepStrictEqual } from "node:util";
|
|
|
29
30
|
const HERE = dirname(fileURLToPath(import.meta.url));
|
|
30
31
|
export const PACKAGED_PARITY_REPO_ROOT = resolve(HERE, "../..");
|
|
31
32
|
export const PACKAGED_HOST_IDS = Object.freeze(["claude_code", "codex", "opencode", "grok"]);
|
|
32
|
-
export const PACKAGED_SELECTION_INPUT =
|
|
33
|
+
export const PACKAGED_SELECTION_INPUT = Object.freeze([
|
|
34
|
+
"master_buffett",
|
|
35
|
+
"master_damodaran",
|
|
36
|
+
"master_taleb",
|
|
37
|
+
"master_sinclair",
|
|
38
|
+
]);
|
|
33
39
|
|
|
34
40
|
const TEMP_PREFIX = "alphacouncil-packaged-parity-";
|
|
35
41
|
const SYMBOL = "NOK";
|
|
@@ -39,6 +45,13 @@ const PROMPT = "packaged adapter parity fixture";
|
|
|
39
45
|
const TASKS = Object.freeze(["market_data"]);
|
|
40
46
|
const REQUEST_TIMEOUT_MS = 30_000;
|
|
41
47
|
const PROCESS_TIMEOUT_MS = 120_000;
|
|
48
|
+
const EXPECTED_TOOL_COUNT = 31;
|
|
49
|
+
const INSTALLED_LOCALE_CASES = Object.freeze([
|
|
50
|
+
Object.freeze({ language: "en-US", prompt: "installed package locale smoke", key: "en", script: /[A-Za-z]/u }),
|
|
51
|
+
Object.freeze({ language: "zh-CN", prompt: "安装包语言烟雾测试", key: "zh", script: /\p{Script=Han}/u }),
|
|
52
|
+
Object.freeze({ language: "ja-JP", prompt: "インストール済みパッケージの言語スモークテスト", key: "ja", script: /[\p{Script=Hiragana}\p{Script=Katakana}]/u }),
|
|
53
|
+
Object.freeze({ language: "ko-KR", prompt: "설치 패키지 언어 스모크 테스트", key: "ko", script: /\p{Script=Hangul}/u }),
|
|
54
|
+
]);
|
|
42
55
|
const REQUIRED_PACKAGE_FILES = Object.freeze([
|
|
43
56
|
"mcp/server.mjs",
|
|
44
57
|
"data/host-capabilities.v1.json",
|
|
@@ -310,8 +323,13 @@ function validatePackagedSurfaces(pack) {
|
|
|
310
323
|
}
|
|
311
324
|
const reviewPrefix = "knowledge/ai-assisted-solo/reviews/";
|
|
312
325
|
const packagedReviews = pack.tarFiles.filter((path) => path.startsWith(reviewPrefix) && path.endsWith(".json"));
|
|
313
|
-
|
|
314
|
-
|
|
326
|
+
// The capsule is complete when the package carries every review the repository holds. Pinning
|
|
327
|
+
// a number instead would only restate the roster size, and would have to be edited on the
|
|
328
|
+
// day a seat is added -- which is exactly when the check should still be meaningful.
|
|
329
|
+
const repoReviews = walkFiles(resolve(PACKAGED_PARITY_REPO_ROOT, reviewPrefix))
|
|
330
|
+
.filter((entry) => entry.path.endsWith(".json"));
|
|
331
|
+
if (packagedReviews.length !== repoReviews.length) {
|
|
332
|
+
fail(`installed AI-assisted review capsule must contain every one of the ${repoReviews.length} repository review files; got ${packagedReviews.length}`);
|
|
315
333
|
}
|
|
316
334
|
if (pack.tarFiles.some((path) => path.startsWith("knowledge/ai-assisted-solo/host-e2e/"))) {
|
|
317
335
|
fail("local external-host failure evidence must not ship in the npm package");
|
|
@@ -570,21 +588,33 @@ function errorReason(response, label) {
|
|
|
570
588
|
}
|
|
571
589
|
|
|
572
590
|
function assertCompleteCatalog(opened, text, hostId) {
|
|
573
|
-
if (opened.maximum !==
|
|
591
|
+
if (opened.maximum !== CANONICAL_MASTER_COUNT || opened.masters?.length !== CANONICAL_MASTER_COUNT) fail(`${hostId}: packaged selector is not ${CANONICAL_MASTER_COUNT} seats`);
|
|
574
592
|
const seen = new Set();
|
|
575
593
|
for (const [offset, master] of opened.masters.entries()) {
|
|
576
594
|
if (master.index !== offset + 1 || seen.has(master.id)) fail(`${hostId}: catalog order or IDs are invalid`);
|
|
577
595
|
seen.add(master.id);
|
|
578
|
-
for (const field of ["identity", "method", "best_for", "maturity", "pack_hash"]) {
|
|
596
|
+
for (const field of ["identity", "method", "best_for", "maturity", "maturity_label", "pack_hash"]) {
|
|
579
597
|
if (typeof master[field] !== "string" || !master[field]) fail(`${hostId}: catalog seat ${master.id} lacks ${field}`);
|
|
580
598
|
}
|
|
581
599
|
if (!/^sha256:[a-f0-9]{64}$/u.test(master.pack_hash)) fail(`${hostId}: ${master.id} pack hash is invalid`);
|
|
582
|
-
for (const visible of [`${master.index}. `, `[${master.id}]`, master.identity, master.method, master.best_for, master.maturity]) {
|
|
600
|
+
for (const visible of [`${master.index}. `, `[${master.id}]`, master.identity, master.method, master.best_for, master.maturity, master.maturity_label]) {
|
|
583
601
|
if (!text.includes(visible)) fail(`${hostId}: returned text did not display ${master.id} field ${visible}`);
|
|
584
602
|
}
|
|
585
603
|
}
|
|
586
604
|
}
|
|
587
605
|
|
|
606
|
+
function assertLocalizedCatalog(opened, text, locale) {
|
|
607
|
+
assertCompleteCatalog(opened, text, `installed-${locale.key}`);
|
|
608
|
+
for (const master of opened.masters) {
|
|
609
|
+
for (const field of ["identity", "method", "best_for", "maturity_label"]) {
|
|
610
|
+
if (!locale.script.test(master[field])) fail(`installed-${locale.key}: ${master.id}.${field} lacks requested-locale prose`);
|
|
611
|
+
if (locale.key !== "en" && /\b[a-z]+(?:_[a-z0-9]+)+\b/u.test(master[field])) {
|
|
612
|
+
fail(`installed-${locale.key}: ${master.id}.${field} leaked a machine domain id into reader-facing prose`);
|
|
613
|
+
}
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
}
|
|
617
|
+
|
|
588
618
|
function normalizedReceiptBinding(record) {
|
|
589
619
|
return {
|
|
590
620
|
symbol: record.symbol,
|
|
@@ -624,7 +654,27 @@ async function executePackagedAdapters({ pack, surfaces, tempRoot }) {
|
|
|
624
654
|
networkSentinel,
|
|
625
655
|
});
|
|
626
656
|
await server.request("initialize", {});
|
|
627
|
-
|
|
657
|
+
const listed = await server.request("tools/list", {});
|
|
658
|
+
const tools = listed.result?.tools || [];
|
|
659
|
+
if (tools.length !== EXPECTED_TOOL_COUNT) fail(`${hostId}: installed server exposed ${tools.length} tools, expected ${EXPECTED_TOOL_COUNT}`);
|
|
660
|
+
sessions.push({ hostId, dataDir, server, toolCount: tools.length });
|
|
661
|
+
}
|
|
662
|
+
|
|
663
|
+
const localeCases = process.env.ALPHACOUNCIL_PERSONA_BUILD_PROFILE === "production"
|
|
664
|
+
? INSTALLED_LOCALE_CASES.slice(0, 1)
|
|
665
|
+
: INSTALLED_LOCALE_CASES;
|
|
666
|
+
const localeCatalogHashes = {};
|
|
667
|
+
for (const locale of localeCases) {
|
|
668
|
+
const response = await sessions[0].server.callTool("begin_council_selection", {
|
|
669
|
+
symbol: SYMBOL,
|
|
670
|
+
as_of: AS_OF,
|
|
671
|
+
language: locale.language,
|
|
672
|
+
prompt: locale.prompt,
|
|
673
|
+
host: "installed-package-locale-smoke",
|
|
674
|
+
});
|
|
675
|
+
const opened = structured(response, `installed ${locale.language} begin_council_selection`);
|
|
676
|
+
assertLocalizedCatalog(opened, response.result.content?.[0]?.text || "", locale);
|
|
677
|
+
localeCatalogHashes[locale.key] = opened.catalog_hash;
|
|
628
678
|
}
|
|
629
679
|
|
|
630
680
|
for (const session of sessions) {
|
|
@@ -642,7 +692,7 @@ async function executePackagedAdapters({ pack, surfaces, tempRoot }) {
|
|
|
642
692
|
selection_id: opened.selection_id,
|
|
643
693
|
catalog_hash: opened.catalog_hash,
|
|
644
694
|
display_ack: true,
|
|
645
|
-
|
|
695
|
+
selected_master_ids: PACKAGED_SELECTION_INPUT,
|
|
646
696
|
}), `${session.hostId} confirm_master_selection`);
|
|
647
697
|
session.opened = opened;
|
|
648
698
|
session.confirmed = confirmed;
|
|
@@ -744,11 +794,15 @@ async function executePackagedAdapters({ pack, surfaces, tempRoot }) {
|
|
|
744
794
|
evidence_scope: "installed_npm_tarball_mcp_stdio_adapters_only",
|
|
745
795
|
host_order: PACKAGED_HOST_IDS,
|
|
746
796
|
host_count: sessions.length,
|
|
797
|
+
tool_count: EXPECTED_TOOL_COUNT,
|
|
798
|
+
locale_count: localeCases.length,
|
|
799
|
+
locale_catalog_hashes: localeCatalogHashes,
|
|
747
800
|
catalog_count: baseline.catalog.length,
|
|
748
801
|
catalog_hash: baseline.catalog_hash,
|
|
749
802
|
catalog_order_hash: sha256(baseline.catalog),
|
|
750
803
|
maturity_counts: maturityCounts,
|
|
751
804
|
selection_input: PACKAGED_SELECTION_INPUT,
|
|
805
|
+
selection_input_type: "stable_ids",
|
|
752
806
|
selected_master_ids: baseline.selected_master_ids,
|
|
753
807
|
selected_master_pack_hashes: baseline.selected_master_pack_hashes,
|
|
754
808
|
receipt_binding_hash: sha256(baseline.receipt_binding),
|
|
@@ -774,6 +828,7 @@ async function executePackagedAdapters({ pack, surfaces, tempRoot }) {
|
|
|
774
828
|
host_id: session.hostId,
|
|
775
829
|
server_entry: "mcp/server.mjs",
|
|
776
830
|
adapter_status: "passed",
|
|
831
|
+
tool_count: session.toolCount,
|
|
777
832
|
catalog_count: session.catalog.length,
|
|
778
833
|
catalog_hash: session.opened.catalog_hash,
|
|
779
834
|
selected_master_ids: session.confirmed.selected_master_ids,
|
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
* approval, production admission, method_model, or formal-GA claim.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
+
import { PLANNED_TOOL_COUNT } from "../../data/persona-v3-build-specs.v1.mjs";
|
|
11
|
+
import { CANONICAL_MASTER_COUNT } from "../../mcp/lib/personas-v3/staging.mjs";
|
|
10
12
|
import { createHash } from "node:crypto";
|
|
11
13
|
import {
|
|
12
14
|
closeSync,
|
|
@@ -28,6 +30,7 @@ import {
|
|
|
28
30
|
} from "../../mcp/lib/personas-v3/ai-source-pre-review.mjs";
|
|
29
31
|
import { assessErrorNeff } from "../../mcp/lib/personas-v3/n-eff.mjs";
|
|
30
32
|
import { inspectPersonaV3SoloTestPacks } from "./persona-v3-solo-test-packs.mjs";
|
|
33
|
+
import { resolvePersonaPackVersion } from "./build-profile.mjs";
|
|
31
34
|
import {
|
|
32
35
|
AI_MACHINE_SIMULATION_RUN_IDS,
|
|
33
36
|
verifyAIMachineSimulationTree,
|
|
@@ -748,12 +751,12 @@ export function loadAiAssistedSoloProfile(file = DEFAULT_AI_ASSISTED_SOLO_PROFIL
|
|
|
748
751
|
if (profile[field] !== expected) errors.push(`${field} must be ${JSON.stringify(expected)}`);
|
|
749
752
|
}
|
|
750
753
|
const expectedRequirements = {
|
|
751
|
-
physical_solo_packs:
|
|
754
|
+
physical_solo_packs: CANONICAL_MASTER_COUNT,
|
|
752
755
|
ai_source_prereviews: 32,
|
|
753
756
|
ai_semantic_extractions: 32,
|
|
754
757
|
ai_semantic_skeptic_reviews: 32,
|
|
755
758
|
ai_semantic_adjudications: 32,
|
|
756
|
-
ai_formula_cross_reviews:
|
|
759
|
+
ai_formula_cross_reviews: PLANNED_TOOL_COUNT,
|
|
757
760
|
independent_roles_per_review: 3,
|
|
758
761
|
automated_experiment_runs: 8,
|
|
759
762
|
live_hosts: 4,
|
|
@@ -775,12 +778,11 @@ export function inspectAiAssistedSoloStatus(options = {}) {
|
|
|
775
778
|
|
|
776
779
|
let packReport = null;
|
|
777
780
|
try {
|
|
778
|
-
const packageVersion = physicalJson(resolve(repoRoot, "package.json"), "package metadata").value.version;
|
|
779
781
|
const packOptions = Object.fromEntries(Object.entries({
|
|
780
782
|
root: options.packRoot || paths.solo_pack_root,
|
|
781
783
|
formulaRoot: options.formulaRoot,
|
|
782
784
|
personaDir: options.personaDir,
|
|
783
|
-
packVersion: options.packVersion ||
|
|
785
|
+
packVersion: options.packVersion || resolvePersonaPackVersion(repoRoot),
|
|
784
786
|
}).filter(([, value]) => value !== undefined));
|
|
785
787
|
packReport = inspectPersonaV3SoloTestPacks(packOptions);
|
|
786
788
|
} catch (error) { integrityErrors.push(`solo packs: ${error.message}`); }
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Isolated AI-assisted cross-review lane for the
|
|
2
|
+
* Isolated AI-assisted cross-review lane for the solo-test derived proxies.
|
|
3
3
|
*
|
|
4
4
|
* This lane reviews mechanical reproducibility only. Its three reviewers are explicitly
|
|
5
5
|
* machine principals. It cannot emit a human approval, make a tool production eligible,
|
|
6
6
|
* or satisfy the formal formula-review compiler/GA path.
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
+
import { PLANNED_TOOL_COUNT } from "../../data/persona-v3-build-specs.v1.mjs";
|
|
9
10
|
import {
|
|
10
11
|
existsSync,
|
|
11
12
|
lstatSync,
|
|
@@ -217,7 +218,7 @@ function physicalFormulaRecords(formulaRoot) {
|
|
|
217
218
|
const plan = planSoloTestFormulaCompilation({ outputRoot: formulaRoot });
|
|
218
219
|
const manifest = readPlainJson(root, "compilation-manifest.json", "solo formula manifest");
|
|
219
220
|
if (manifest.compilation_hash !== plan.compilation_hash) {
|
|
220
|
-
fail("physical solo formula manifest is not bound to the current
|
|
221
|
+
fail("physical solo formula manifest is not bound to the current compilation", {
|
|
221
222
|
expected: plan.compilation_hash,
|
|
222
223
|
actual: manifest.compilation_hash,
|
|
223
224
|
});
|
|
@@ -567,14 +568,14 @@ export function validateAIFormulaReviewArtifact(artifact, { reviewSchemaHash = s
|
|
|
567
568
|
return errors;
|
|
568
569
|
}
|
|
569
570
|
|
|
570
|
-
/** Plan
|
|
571
|
+
/** Plan every record without mutating the physical review tree. */
|
|
571
572
|
export function planAIFormulaCrossReviews({ formulaRoot = DEFAULT_SOLO_TEST_FORMULA_ROOT } = {}) {
|
|
572
573
|
const schema = parsedReviewSchema();
|
|
573
574
|
const reviewSchemaHash = sha256(schema);
|
|
574
575
|
const input = physicalFormulaRecords(formulaRoot);
|
|
575
576
|
const reviews = input.records.map((record) => reviewOne(record, input.compilationHash, reviewSchemaHash));
|
|
576
|
-
if (reviews.length !==
|
|
577
|
-
fail(
|
|
577
|
+
if (reviews.length !== PLANNED_TOOL_COUNT || new Set(reviews.map((review) => review.tool_id)).size !== PLANNED_TOOL_COUNT) {
|
|
578
|
+
fail(`AI formula cross-review must cover exactly ${PLANNED_TOOL_COUNT} unique tools`);
|
|
578
579
|
}
|
|
579
580
|
const invalid = reviews.flatMap((review) => validateAIFormulaReviewArtifact(review, { reviewSchemaHash })
|
|
580
581
|
.map((message) => `${review.tool_id}: ${message}`));
|
|
@@ -19,7 +19,7 @@ import { executeDeterministicPersonaPolicy } from "../../mcp/lib/personas-v3/det
|
|
|
19
19
|
import { loadCompiledPersonaPacks } from "../../mcp/lib/personas-v3/registry.mjs";
|
|
20
20
|
import { buildAnonymousPreDecision } from "../../mcp/lib/personas-v3/runtime.mjs";
|
|
21
21
|
import { buildFactPack } from "../../mcp/lib/personas-v3/typed-facts.mjs";
|
|
22
|
-
import { CANONICAL_MASTER_IDS } from "../../mcp/lib/personas-v3/staging.mjs";
|
|
22
|
+
import { CANONICAL_MASTER_COUNT, CANONICAL_MASTER_IDS } from "../../mcp/lib/personas-v3/staging.mjs";
|
|
23
23
|
import { PRIORITY_13_MASTER_IDS } from "./council-evaluation-protocol.mjs";
|
|
24
24
|
|
|
25
25
|
export const AI_MACHINE_SIMULATION_RUN_IDS = Object.freeze([
|
|
@@ -105,6 +105,16 @@ function factPackFor(pack) {
|
|
|
105
105
|
}
|
|
106
106
|
});
|
|
107
107
|
}
|
|
108
|
+
// Everything the seat declares it reads, not only what its tools consume. An authored
|
|
109
|
+
// policy gates eligibility on a fact outside its tool inputs on purpose, so a fixture built
|
|
110
|
+
// from tool inputs alone leaves every such seat correctly -- and uselessly -- out of scope,
|
|
111
|
+
// and the simulation would then demonstrate nothing.
|
|
112
|
+
for (const factId of [
|
|
113
|
+
...(pack.manifest.capability.required_fact_types || []),
|
|
114
|
+
...(pack.manifest.capability.optional_fact_types || []),
|
|
115
|
+
]) {
|
|
116
|
+
if (!byFact.has(factId)) byFact.set(factId, { value_kind: "ratio", unit: "decimal" });
|
|
117
|
+
}
|
|
108
118
|
const facts = [...byFact].map(([factId, contract]) => canonicalValue({
|
|
109
119
|
schema_version: 1,
|
|
110
120
|
fact_id: factId,
|
|
@@ -114,8 +124,10 @@ function factPackFor(pack) {
|
|
|
114
124
|
currency: contract.value_kind === "monetary" ? "USD" : null,
|
|
115
125
|
scale: contract.value_kind === "monetary" ? 1 : null,
|
|
116
126
|
...(contract.value_kind === "ratio" ? { ratio_denominator: "synthetic_denominator" } : {}),
|
|
117
|
-
|
|
118
|
-
|
|
127
|
+
// A fixture whose facts are all instants cannot exercise a method that reads a reporting
|
|
128
|
+
// interval -- the contract check rejects the fact before any arithmetic runs. The synthetic
|
|
129
|
+
// fact therefore carries whatever span its own contract asks for.
|
|
130
|
+
...syntheticInterval(contract.period),
|
|
119
131
|
fiscal_year: null,
|
|
120
132
|
as_of: AS_OF,
|
|
121
133
|
public_at: AS_OF,
|
|
@@ -128,6 +140,22 @@ function factPackFor(pack) {
|
|
|
128
140
|
return buildFactPack(facts, { asOf: AS_OF });
|
|
129
141
|
}
|
|
130
142
|
|
|
143
|
+
/** Build an interval that satisfies the contract's declared window, or none for an instant. */
|
|
144
|
+
function syntheticInterval(period) {
|
|
145
|
+
if (period?.basis !== "duration" && period?.basis !== "forecast_horizon") {
|
|
146
|
+
return { period_start: null, period_end: null };
|
|
147
|
+
}
|
|
148
|
+
const end = Date.parse(`${AS_OF}T00:00:00.000Z`);
|
|
149
|
+
const match = /^P([1-9]\d*)([DMY])$/u.exec(period.window || "");
|
|
150
|
+
const days = period.window === "ANY" ? 365
|
|
151
|
+
: match ? Number(match[1]) * ({ D: 1, M: 30, Y: 365 })[match[2]]
|
|
152
|
+
: 365;
|
|
153
|
+
return {
|
|
154
|
+
period_start: new Date(end - days * 86_400_000).toISOString().slice(0, 10),
|
|
155
|
+
period_end: AS_OF,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
|
|
131
159
|
function buildInput(registry) {
|
|
132
160
|
const protocol = boundFile("data/council-evaluation-protocol.v1.json");
|
|
133
161
|
const protocolValue = readJson(resolve(REPO_ROOT, protocol.path));
|
|
@@ -224,7 +252,7 @@ function configs() {
|
|
|
224
252
|
{ run_id: "B", formal_arm_id: "B", ids: [], scope: "frozen-input control digest only; eight LLM analyst outputs are not simulated", checks: false },
|
|
225
253
|
{ run_id: "C", formal_arm_id: "C", ids: [], scope: "prompt-catalog binding only; prompt-only LLM outputs are not simulated", checks: false },
|
|
226
254
|
{ run_id: "D13", formal_arm_id: "D13", ids: [...PRIORITY_13_MASTER_IDS], scope: "13 physical provisional deterministic seats on frozen synthetic typed facts", checks: false },
|
|
227
|
-
{ run_id: "D26", formal_arm_id: "D26", ids: [...CANONICAL_MASTER_IDS], scope:
|
|
255
|
+
{ run_id: "D26", formal_arm_id: "D26", ids: [...CANONICAL_MASTER_IDS], scope: `${CANONICAL_MASTER_COUNT} physical provisional deterministic seats on frozen synthetic typed facts`, checks: false },
|
|
228
256
|
{ run_id: "E:D13", formal_arm_id: "E", ids: [...PRIORITY_13_MASTER_IDS], scope: "D13 deterministic seats plus machine-only hash, rederivation and fail-closed checks", checks: true },
|
|
229
257
|
{ run_id: "E:D26", formal_arm_id: "E", ids: [...CANONICAL_MASTER_IDS], scope: "D26 deterministic seats plus machine-only hash, rederivation and fail-closed checks", checks: true },
|
|
230
258
|
{ run_id: "H_ai_reference", formal_arm_id: "H", ids: [...CANONICAL_MASTER_IDS], scope: "AI deterministic reference digest only; no human analysts or blinded human adjudicator", checks: true },
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { CANONICAL_MASTER_COUNT } from "../../mcp/lib/personas-v3/staging.mjs";
|
|
1
2
|
import { existsSync, readFileSync, realpathSync } from "node:fs";
|
|
2
3
|
import { dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
|
|
3
4
|
import { fileURLToPath } from "node:url";
|
|
@@ -234,7 +235,7 @@ export function validatePersonaV3BuildSpecs(inventory = personaV3BuildSpecs) {
|
|
|
234
235
|
if (inventory.inventory_id !== "personapack-v3-build-specs") add(errors, null, "inventory_id is invalid");
|
|
235
236
|
if (inventory.inventory_status !== "non_production_planning_only") add(errors, null, "inventory must remain non-production");
|
|
236
237
|
if (inventory.canonical_catalog_source !== "mcp/lib/personas/registry.mjs") add(errors, null, "canonical catalog source changed");
|
|
237
|
-
if (inventory.seat_count !==
|
|
238
|
+
if (inventory.seat_count !== CANONICAL_MASTER_COUNT) add(errors, null, `seat_count must be ${CANONICAL_MASTER_COUNT}`);
|
|
238
239
|
|
|
239
240
|
const policy = inventory.adjudication_policy || {};
|
|
240
241
|
exactKeys(policy, ["method_attribution", "source_grading", "case_labels", "veto_thresholds", "reviewer_approvals", "experiments", "promotion_effect"], "adjudication_policy", null, errors);
|
|
@@ -247,7 +248,7 @@ export function validatePersonaV3BuildSpecs(inventory = personaV3BuildSpecs) {
|
|
|
247
248
|
|
|
248
249
|
const catalogIds = registry().ids("master");
|
|
249
250
|
const selectorIds = knownSelectorCardIds();
|
|
250
|
-
if (catalogIds.length !==
|
|
251
|
+
if (catalogIds.length !== CANONICAL_MASTER_COUNT) add(errors, null, `canonical registry has ${catalogIds.length} masters, expected ${CANONICAL_MASTER_COUNT}`);
|
|
251
252
|
const missingCards = catalogIds.filter((id) => !selectorIds.includes(id));
|
|
252
253
|
const extraCards = selectorIds.filter((id) => !catalogIds.includes(id));
|
|
253
254
|
if (missingCards.length || extraCards.length) add(errors, null, `selector cards differ from registry; missing=${missingCards.join(",") || "none"}; extra=${extraCards.join(",") || "none"}`);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Deterministic PersonaPack v3 editorial-prototype factory.
|
|
3
3
|
*
|
|
4
|
-
* These artifacts make every
|
|
4
|
+
* These artifacts make every planned seat physically inspectable without
|
|
5
5
|
* pretending that source adjudication, case labeling, experiments, or production promotion
|
|
6
6
|
* happened. The production loader does not read this tree and a draft never contains a
|
|
7
7
|
* `manifest.json`.
|
|
@@ -472,7 +472,7 @@ function generationContext(options = {}) {
|
|
|
472
472
|
const byBlueprint = new Map(blueprints.map((blueprint) => [blueprint.persona_id, blueprint]));
|
|
473
473
|
const bySource = new Map(acquisition.personas.map((persona) => [persona.persona_id, persona]));
|
|
474
474
|
const bySpec = new Map(inventory.seats.map((seat) => [seat.persona_id, seat]));
|
|
475
|
-
if (bySpec.size !== CANONICAL_MASTER_COUNT) fail("canonical build-spec inventory
|
|
475
|
+
if (bySpec.size !== CANONICAL_MASTER_COUNT) fail("canonical build-spec inventory does not cover the canonical roster exactly once");
|
|
476
476
|
return { root, productionRoot, personaDir, staging, acquisition, byBlueprint, bySource, bySpec };
|
|
477
477
|
}
|
|
478
478
|
|
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
* Fail-closed PersonaPack v3 formula authoring and DSL 1.1 compilation pipeline.
|
|
3
3
|
*
|
|
4
4
|
* Inventory construction and compilation are pure functions. Filesystem helpers only read
|
|
5
|
-
* the
|
|
5
|
+
* the canonical staging prototypes or, after an explicit caller action, write isolated
|
|
6
6
|
* non-production formula-candidate artifacts. Nothing here writes knowledge/masters,
|
|
7
7
|
* manifests, release evidence, or production registrations.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
+
import { PLANNED_TOOL_COUNT } from "../../data/persona-v3-build-specs.v1.mjs";
|
|
10
11
|
import {
|
|
11
12
|
existsSync,
|
|
12
13
|
lstatSync,
|
|
@@ -316,7 +317,7 @@ function pendingFormulaSpec(prototype, prototypePath) {
|
|
|
316
317
|
});
|
|
317
318
|
}
|
|
318
319
|
|
|
319
|
-
/** Build the
|
|
320
|
+
/** Build the authoring queue from already-read prototype documents. */
|
|
320
321
|
export function buildFormulaAuthoringInventory(prototypeArtifacts) {
|
|
321
322
|
if (!Array.isArray(prototypeArtifacts)) fail("prototypeArtifacts must be an array");
|
|
322
323
|
const byPersona = new Map(prototypeArtifacts.map((artifact) => [artifact?.document?.persona_id, artifact]));
|
|
@@ -523,7 +524,7 @@ function collectJsonFiles(root, dir, prefix = "") {
|
|
|
523
524
|
return result;
|
|
524
525
|
}
|
|
525
526
|
|
|
526
|
-
/** Read and verify
|
|
527
|
+
/** Read and verify every human-authored spec and dual-signed bundles without writing. */
|
|
527
528
|
export function planApprovedFormulaCompilation({
|
|
528
529
|
candidateRoot = DEFAULT_FORMULA_CANDIDATE_ROOT,
|
|
529
530
|
root = defaultStagingRoot(),
|
|
@@ -556,10 +557,10 @@ export function planApprovedFormulaCompilation({
|
|
|
556
557
|
const actualSpecFiles = collectJsonFiles(candidate, resolve(candidate, "specs"));
|
|
557
558
|
const actualApprovalFiles = collectJsonFiles(candidate, resolve(candidate, "approvals"));
|
|
558
559
|
if (JSON.stringify(actualSpecFiles) !== JSON.stringify(expectedSpecFiles.sort())) {
|
|
559
|
-
fail("approved formula compilation requires exactly the
|
|
560
|
+
fail("approved formula compilation requires exactly the planned spec files, one per tool", { expected: expectedSpecFiles.sort(), actual: actualSpecFiles });
|
|
560
561
|
}
|
|
561
562
|
if (JSON.stringify(actualApprovalFiles) !== JSON.stringify(expectedApprovalFiles.sort())) {
|
|
562
|
-
fail("approved formula compilation requires exactly the
|
|
563
|
+
fail("approved formula compilation requires exactly the planned approval bundles, one per tool", { expected: expectedApprovalFiles.sort(), actual: actualApprovalFiles });
|
|
563
564
|
}
|
|
564
565
|
const prototypeDocuments = Object.fromEntries(readFormulaPrototypeArtifacts({ root })
|
|
565
566
|
.map((artifact) => [artifact.relative_path, artifact.document]));
|
|
@@ -571,9 +572,9 @@ export function planApprovedFormulaCompilation({
|
|
|
571
572
|
});
|
|
572
573
|
const expectedIds = authoring.inventory.entries.map((entry) => entry.tool_id);
|
|
573
574
|
const actualIds = tools.map((tool) => tool.id);
|
|
574
|
-
if (actualIds.length !==
|
|
575
|
+
if (actualIds.length !== PLANNED_TOOL_COUNT || new Set(actualIds).size !== PLANNED_TOOL_COUNT
|
|
575
576
|
|| JSON.stringify([...actualIds].sort()) !== JSON.stringify([...expectedIds].sort())) {
|
|
576
|
-
fail("approved compilation must produce exactly the
|
|
577
|
+
fail("approved compilation must produce exactly the planned unique tool ids, one per tool", { expected_ids: expectedIds, actual_ids: actualIds });
|
|
577
578
|
}
|
|
578
579
|
const bindings = tools.map((tool) => canonicalValue({
|
|
579
580
|
persona_id: tool.id.split(".")[0],
|
|
@@ -591,7 +592,7 @@ export function planApprovedFormulaCompilation({
|
|
|
591
592
|
mode: "check_only",
|
|
592
593
|
production_effect: "none",
|
|
593
594
|
canonical_seat_count: CANONICAL_MASTER_COUNT,
|
|
594
|
-
planned_tool_count:
|
|
595
|
+
planned_tool_count: PLANNED_TOOL_COUNT,
|
|
595
596
|
compiled_tool_count: tools.length,
|
|
596
597
|
formula_approval_binding_count: bindings.length,
|
|
597
598
|
tool_ids: actualIds,
|
|
@@ -669,7 +670,7 @@ export function planPersonaV3FormulaPipeline(options = {}) {
|
|
|
669
670
|
const expected = buildInventory.seats.reduce((total, seat) => total + seat.planned_dedicated_tools.length, 0);
|
|
670
671
|
const errors = [...inventory.global_errors];
|
|
671
672
|
if (inventory.canonical_seat_count !== buildInventory.seat_count) errors.push("canonical seat count drifted");
|
|
672
|
-
if (inventory.prototype_count !== expected || expected !==
|
|
673
|
+
if (inventory.prototype_count !== expected || expected !== PLANNED_TOOL_COUNT) errors.push(`prototype inventory must be exactly ${PLANNED_TOOL_COUNT}, got ${inventory.prototype_count}/${expected}`);
|
|
673
674
|
if (inventory.entries.some((entry) => entry.validation_errors.length)) errors.push("one or more generated formula specs are invalid");
|
|
674
675
|
if (inventory.executable_candidate_count !== 0 || inventory.dedicated_tool_count !== 0) errors.push("unreviewed prototypes must not become executable or dedicated tools");
|
|
675
676
|
return Object.freeze(canonicalValue({ mode: "check_plan", errors, inventory }));
|
|
@@ -732,7 +733,7 @@ export function renderFormulaAuthoringPlan(plan) {
|
|
|
732
733
|
"# PersonaPack v3 formula authoring queue",
|
|
733
734
|
"",
|
|
734
735
|
`Seats: ${plan.inventory.canonical_seat_count}`,
|
|
735
|
-
`Prototypes: ${plan.inventory.prototype_count}
|
|
736
|
+
`Prototypes: ${plan.inventory.prototype_count}/${PLANNED_TOOL_COUNT}`,
|
|
736
737
|
`Needs formula authorship: ${plan.inventory.needs_formula_authorship_count}`,
|
|
737
738
|
`Executable staging candidates: ${plan.inventory.executable_candidate_count}`,
|
|
738
739
|
`Dedicated production tools: ${plan.inventory.dedicated_tool_count}`,
|
|
@@ -3,11 +3,12 @@
|
|
|
3
3
|
*
|
|
4
4
|
* This layer deliberately does not manufacture manifests or promote editorial drafts. A
|
|
5
5
|
* candidate exists only after a real schema-v3 directory has been authored on disk. The
|
|
6
|
-
* inspector then proves loader/compiler validity, computed admission and coverage of
|
|
6
|
+
* inspector then proves loader/compiler validity, computed admission and coverage of every
|
|
7
7
|
* planned seat-specific tools. Immutable release assembly remains a later, separately signed
|
|
8
8
|
* operation.
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
+
import { PLANNED_TOOL_COUNT } from "../../data/persona-v3-build-specs.v1.mjs";
|
|
11
12
|
import {
|
|
12
13
|
existsSync,
|
|
13
14
|
lstatSync,
|
|
@@ -401,7 +402,7 @@ export function inspectPersonaV3ProductionCandidates({
|
|
|
401
402
|
const inventoryErrors = [];
|
|
402
403
|
if (buildInventory.seat_count !== CANONICAL_MASTER_COUNT) inventoryErrors.push("build-spec seat count is not 26");
|
|
403
404
|
const expectedToolCount = [...expectedByPersona.values()].reduce((total, ids) => total + ids.length, 0);
|
|
404
|
-
if (expectedToolCount !==
|
|
405
|
+
if (expectedToolCount !== PLANNED_TOOL_COUNT) inventoryErrors.push(`build-spec tool count is not ${PLANNED_TOOL_COUNT}: ${expectedToolCount}`);
|
|
405
406
|
|
|
406
407
|
const actualEntries = candidateRoot.exists
|
|
407
408
|
? readdirSync(candidateRoot.root, { withFileTypes: true })
|
|
@@ -474,13 +475,13 @@ export function renderPersonaV3ProductionCandidateReadiness(report) {
|
|
|
474
475
|
"",
|
|
475
476
|
"> Read-only staging report. Physical presence is not source approval, experiment passage, release assembly or production promotion.",
|
|
476
477
|
"",
|
|
477
|
-
`Physical candidates: ${report.summary.physical_candidate_count}
|
|
478
|
-
`Loader-valid candidates: ${report.summary.loader_valid_count}
|
|
479
|
-
`Operational candidates: ${report.summary.operational_candidate_count}
|
|
480
|
-
`Candidate admissions: ${report.summary.candidate_admission_count}
|
|
481
|
-
`Method models: ${report.summary.method_model_count}
|
|
482
|
-
`Planned tool coverage: ${report.summary.planned_tool_coverage_count}
|
|
483
|
-
`Verified formula approvals: ${report.summary.formula_approval_evidence_count}
|
|
478
|
+
`Physical candidates: ${report.summary.physical_candidate_count}/${CANONICAL_MASTER_COUNT}`,
|
|
479
|
+
`Loader-valid candidates: ${report.summary.loader_valid_count}/${CANONICAL_MASTER_COUNT}`,
|
|
480
|
+
`Operational candidates: ${report.summary.operational_candidate_count}/${CANONICAL_MASTER_COUNT}`,
|
|
481
|
+
`Candidate admissions: ${report.summary.candidate_admission_count}/${CANONICAL_MASTER_COUNT}`,
|
|
482
|
+
`Method models: ${report.summary.method_model_count}/${CANONICAL_MASTER_COUNT}`,
|
|
483
|
+
`Planned tool coverage: ${report.summary.planned_tool_coverage_count}/${PLANNED_TOOL_COUNT}`,
|
|
484
|
+
`Verified formula approvals: ${report.summary.formula_approval_evidence_count}/${PLANNED_TOOL_COUNT}`,
|
|
484
485
|
`Required admission: ${report.required_admission}`,
|
|
485
486
|
`Gate clear: ${report.summary.gate_clear}`,
|
|
486
487
|
`Readiness hash: \`${report.readiness_hash}\``,
|