tradingcodex 1.0.0__tar.gz → 1.0.1__tar.gz
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.
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/CHANGELOG.md +17 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/PKG-INFO +1 -1
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/docs/README.md +1 -1
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/docs/deployment.md +1 -1
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/docs/execution-without-subagent-plan.md +1 -1
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/docs/generated-workspaces.md +4 -4
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/docs/release-readiness.md +44 -17
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/docs/research-memory-and-artifacts.md +6 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/docs/roles-skills-and-workflows.md +9 -1
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/docs/user-facing-skills.md +5 -1
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/installation.md +1 -1
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_codex_cli_compat.py +4 -4
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_codex_native_orchestration.py +20 -1
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_dynamic_artifact_quality.py +21 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_e2e_user_scenarios.py +3 -2
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_platform_runtime.py +7 -6
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_release_contract.py +4 -4
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_research_forecast_surfaces.py +45 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_security_invariants.py +16 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_skill_runtime_boundaries.py +4 -1
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex.egg-info/PKG-INFO +1 -1
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex.egg-info/SOURCES.txt +2 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_cli/commands/doctor.py +3 -1
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/application/agents.py +16 -10
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/application/artifact_quality.py +25 -6
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/application/forecasting.py +2 -2
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/mcp_runtime.py +88 -11
- tradingcodex-1.0.1/tradingcodex_service/version.py +1 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/codex-base/files/.codex/prompts/base_instructions/head-manager.md +1 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/research_artifact.schema.json +33 -3
- tradingcodex-1.0.1/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-artifact/SKILL.md +64 -0
- tradingcodex-1.0.1/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-artifact/agents/openai.yaml +6 -0
- tradingcodex-1.0.0/tradingcodex_service/version.py +0 -1
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/CONTRIBUTING.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/LICENSE +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/MANIFEST.in +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/NOTICE +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/README.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/TRADEMARKS.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/__init__.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/audit/__init__.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/audit/admin.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/audit/apps.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/audit/migrations/0001_v1_initial.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/audit/migrations/__init__.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/audit/models.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/harness/__init__.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/harness/admin.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/harness/apps.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/harness/migrations/0001_v1_initial.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/harness/migrations/__init__.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/harness/models.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/harness/templatetags/__init__.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/integrations/__init__.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/integrations/admin.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/integrations/apps.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/integrations/migrations/0001_v1_initial.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/integrations/migrations/__init__.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/integrations/models.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/mcp/__init__.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/mcp/admin.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/mcp/apps.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/mcp/migrations/0001_v1_initial.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/mcp/migrations/__init__.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/mcp/models.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/mcp/services.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/orders/__init__.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/orders/admin.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/orders/apps.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/orders/migrations/0001_v1_initial.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/orders/migrations/__init__.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/orders/models.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/orders/services.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/policy/__init__.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/policy/admin.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/policy/apps.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/policy/migrations/0001_v1_initial.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/policy/migrations/__init__.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/policy/models.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/policy/services.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/portfolio/__init__.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/portfolio/admin.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/portfolio/apps.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/portfolio/migrations/0001_v1_initial.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/portfolio/migrations/__init__.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/apps/portfolio/models.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/assets/tradingcodex-banner.svg +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/docs/codex-native-orchestration.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/docs/components.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/docs/core-concepts-and-rules.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/docs/decision-memory.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/docs/financial-workflow-references.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/docs/guardrails.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/docs/harness.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/docs/improvement-loop.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/docs/interfaces-and-surfaces.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/docs/investment-brain-plugins.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/docs/licensing-and-commercialization.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/docs/product-direction.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/docs/safety-policy-and-execution.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/docs/system-architecture.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/docs/validation-and-test-plan.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/frontend/index.html +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/frontend/package-lock.json +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/frontend/package.json +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/frontend/src/App.tsx +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/frontend/src/api.ts +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/frontend/src/domain.ts +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/frontend/src/features/LibraryPage.tsx +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/frontend/src/features/SkillsPage.tsx +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/frontend/src/features/SystemPage.tsx +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/frontend/src/main.tsx +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/frontend/src/navigation.js +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/frontend/src/navigation.test.js +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/frontend/src/styles.css +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/frontend/src/ui.tsx +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/frontend/src/viewer-data.js +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/frontend/tsconfig.json +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/frontend/vite.config.ts +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/install.sh +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/pyproject.toml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/setup.cfg +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_artifact_authentication.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_brain_skill.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_broker_center_prd.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_build_contract_metadata.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_build_hook.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_build_turn_grant.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_clean_v1_cli_audit.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_codex_cli_contract.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_dashboard_skill.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_decision_memory_core.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_dev_bootstrap.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_evaluation_lab_hardening.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_evaluation_profiles.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_investment_analysis.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_investment_brain_cli.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_investment_brain_prompt_layers.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_investment_brain_provenance.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_investment_brain_registry.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_investor_context.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_mcp_broker_release_health.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_mcp_operator_authority.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_native_execution_gateway.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_order_turn_grant.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_provider_source_approval.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_research_spec_profiles.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_runtime_paths.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_runtime_profile.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_source_snapshot_agent_contract.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_v1_migrations.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_v1_state_integrity.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_viewer.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tests/test_workspace_git_contract.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex.egg-info/dependency_links.txt +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex.egg-info/entry_points.txt +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex.egg-info/requires.txt +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex.egg-info/top_level.txt +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_cli/__init__.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_cli/__main__.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_cli/commands/__init__.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_cli/commands/bootstrap.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_cli/commands/build.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_cli/commands/connectors.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_cli/commands/db.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_cli/commands/decision.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_cli/commands/evaluation.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_cli/commands/forecast.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_cli/commands/home.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_cli/commands/investment_brains.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_cli/commands/investor_context.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_cli/commands/mcp.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_cli/commands/mode.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_cli/commands/orders.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_cli/commands/policy.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_cli/commands/profile.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_cli/commands/research.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_cli/commands/skills.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_cli/commands/strategies.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_cli/commands/subagents.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_cli/commands/utils.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_cli/commands/workflow.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_cli/commands/workspaces.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_cli/generator.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_cli/mcp_stdio.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_cli/package_source.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_cli/service_autostart.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_cli/startup_status.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_cli/versioning.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/__init__.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/admin.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/api.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/application/__init__.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/application/analysis_runs.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/application/artifact_bindings.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/application/audit.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/application/brokers.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/application/build_gateway.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/application/common.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/application/components.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/application/context_budget.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/application/customization.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/application/decision_packages.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/application/evaluation_lab.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/application/execution_gateway.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/application/git_subprocess.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/application/harness.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/application/health.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/application/investment_analysis.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/application/investment_brains.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/application/investor_context.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/application/markdown_preview.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/application/operator_authority.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/application/orders.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/application/policy.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/application/portfolio.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/application/postmortems.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/application/research.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/application/research_specs.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/application/runtime.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/application/runtime_mode.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/application/source_snapshots.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/application/viewer.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/application/workspace_git.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/application/workspaces.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/asgi.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/log_safety.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/runtime_profile.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/settings.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/static/tradingcodex_admin/favicon.svg +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/static/tradingcodex_web/assets/index-CFoXYUtq.js +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/static/tradingcodex_web/assets/index-DYzj_xRR.css +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/static/tradingcodex_web/index.html +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/urls.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/viewer_api.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/web.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/tradingcodex_service/wsgi.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/__init__.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/audit/files/.tradingcodex/audit/README.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/audit/files/trading/audit/.gitkeep +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/audit/module.json +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/codex-base/files/.codex/config.toml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/codex-base/files/.codex/hooks/tradingcodex_hook.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/codex-base/files/.codex/hooks.json +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/codex-base/files/.codex/rules/tradingcodex.rules +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/codex-base/files/.tradingcodex/cli.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/codex-base/files/.tradingcodex/config.yaml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/codex-base/files/AGENTS.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/codex-base/files/pyproject.toml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/codex-base/files/tcx +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/codex-base/files/tcx.cmd +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/codex-base/module.json +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/policies/restricted-list.yaml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/approval_receipt.schema.json +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/audit_event.schema.json +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/evidence_pack.schema.json +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/execution_result.schema.json +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/fundamental_report.schema.json +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/news_report.schema.json +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/order_ticket.schema.json +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/portfolio_review.schema.json +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/postmortem_report.schema.json +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/risk_report.schema.json +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/technical_report.schema.json +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/thesis.schema.json +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/valuation.schema.json +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/enforcement-guardrails/module.json +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/fixed-subagents/files/.codex/agents/fundamental-analyst.toml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/fixed-subagents/files/.codex/agents/instrument-analyst.toml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/fixed-subagents/files/.codex/agents/judgment-reviewer.toml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/fixed-subagents/files/.codex/agents/macro-analyst.toml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/fixed-subagents/files/.codex/agents/news-analyst.toml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/fixed-subagents/files/.codex/agents/portfolio-manager.toml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/fixed-subagents/files/.codex/agents/risk-manager.toml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/fixed-subagents/files/.codex/agents/technical-analyst.toml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/fixed-subagents/files/.codex/agents/valuation-analyst.toml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/fixed-subagents/files/.tradingcodex/mainagent/skill-change-proposals/.gitkeep +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/fixed-subagents/module.json +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/guidance-guardrails/files/.tradingcodex/guidance/guardrails.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/guidance-guardrails/files/.tradingcodex/guidance/task-quality-checklist.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/guidance-guardrails/module.json +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/information-barriers/files/.tradingcodex/secrets.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/information-barriers/files/trading/forecasts/.gitkeep +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/information-barriers/files/trading/market-data/.gitkeep +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/information-barriers/files/trading/portfolio/.gitkeep +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/information-barriers/files/trading/reports/fundamental/.gitkeep +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/information-barriers/files/trading/reports/instrument/.gitkeep +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/information-barriers/files/trading/reports/macro/.gitkeep +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/information-barriers/files/trading/reports/news/.gitkeep +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/information-barriers/files/trading/reports/policy/.gitkeep +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/information-barriers/files/trading/reports/portfolio/.gitkeep +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/information-barriers/files/trading/reports/postmortem/.gitkeep +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/information-barriers/files/trading/reports/risk/.gitkeep +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/information-barriers/files/trading/reports/technical/.gitkeep +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/information-barriers/files/trading/reports/valuation/.gitkeep +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/information-barriers/files/trading/research/.gitkeep +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/information-barriers/module.json +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/paper-trading/module.json +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-automate/SKILL.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-automate/agents/openai.yaml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-brain/SKILL.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-brain/agents/openai.yaml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-brain/references/bundle-contract.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-build/SKILL.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-build/agents/openai.yaml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-dashboard/SKILL.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-dashboard/agents/openai.yaml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-investor-context/SKILL.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-investor-context/agents/openai.yaml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-memory/SKILL.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-memory/agents/openai.yaml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-allow/SKILL.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-allow/agents/openai.yaml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-cancel/SKILL.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-cancel/agents/openai.yaml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-submit/SKILL.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-submit/agents/openai.yaml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-plan/SKILL.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-plan/agents/openai.yaml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-server/SKILL.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-server/agents/openai.yaml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-strategy/SKILL.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-strategy/agents/openai.yaml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-workflow/SKILL.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-workflow/agents/openai.yaml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-workflow/references/context-and-override.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-workflow/references/decision-quality-spine.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/fundamental-analyst/tcx-fundamental/SKILL.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/fundamental-analyst/tcx-fundamental/agents/openai.yaml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/instrument-analyst/tcx-instrument/SKILL.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/instrument-analyst/tcx-instrument/agents/openai.yaml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/judgment-reviewer/tcx-judgment/SKILL.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/judgment-reviewer/tcx-judgment/agents/openai.yaml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/macro-analyst/tcx-macro/SKILL.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/macro-analyst/tcx-macro/agents/openai.yaml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/news-analyst/tcx-news/SKILL.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/news-analyst/tcx-news/agents/openai.yaml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/portfolio-manager/tcx-order-draft/SKILL.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/portfolio-manager/tcx-order-draft/agents/openai.yaml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/portfolio-manager/tcx-portfolio/SKILL.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/portfolio-manager/tcx-portfolio/agents/openai.yaml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-order-approve/SKILL.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-order-approve/agents/openai.yaml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-policy/SKILL.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-policy/agents/openai.yaml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-risk/SKILL.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-risk/agents/openai.yaml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-anti-overfit/SKILL.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-anti-overfit/agents/openai.yaml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-data-qc/SKILL.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-data-qc/agents/openai.yaml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-evidence/SKILL.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-evidence/agents/openai.yaml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-forecast/SKILL.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-forecast/agents/openai.yaml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-scenarios/SKILL.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-scenarios/agents/openai.yaml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-source-gate/SKILL.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-source-gate/agents/openai.yaml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/technical-analyst/tcx-technical/SKILL.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/technical-analyst/tcx-technical/agents/openai.yaml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/valuation-analyst/tcx-valuation/SKILL.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/valuation-analyst/tcx-valuation/agents/openai.yaml +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/repo-skills/module.json +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/tradingcodex-mcp/files/.tradingcodex/mcp/enforcer/README.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/tradingcodex-mcp/files/.tradingcodex/mcp/gateway/README.md +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/tradingcodex-mcp/files/.tradingcodex/mcp/server.py +0 -0
- {tradingcodex-1.0.0 → tradingcodex-1.0.1}/workspace_templates/modules/tradingcodex-mcp/module.json +0 -0
|
@@ -2,6 +2,23 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 1.0.1 - 2026-07-15
|
|
6
|
+
|
|
7
|
+
- Add the shared `tcx-artifact` skill to all nine producing fixed roles so
|
|
8
|
+
deferred MCP calls receive the exact research-artifact, thesis-lifecycle,
|
|
9
|
+
retry, and forecast persistence procedure.
|
|
10
|
+
- Expand `create_research_artifact` and `issue_forecast` MCP schemas to expose
|
|
11
|
+
state-specific lifecycle fields, one-range probability rules, RFC 3339
|
|
12
|
+
timestamps, and the complete base-rate contract before a call is attempted.
|
|
13
|
+
Artifact validation errors now name the supported alternative fields, and
|
|
14
|
+
MCP resource-template discovery returns an empty supported list. Omitted
|
|
15
|
+
forecast `issued_at` and revision `revised_at` values now reuse the same
|
|
16
|
+
service receipt timestamp as `recorded_at`, eliminating a microsecond race
|
|
17
|
+
that rejected otherwise valid agent calls.
|
|
18
|
+
- Require Codex CLI 0.144.4, the validated reference for generated permission
|
|
19
|
+
profiles, V2 fixed-role dispatch, hooks, and deferred TradingCodex MCP calls.
|
|
20
|
+
Older clients now fail the runtime doctor check with upgrade guidance.
|
|
21
|
+
|
|
5
22
|
## 1.0.0 - 2026-07-15
|
|
6
23
|
|
|
7
24
|
- Raise the validated Codex CLI reference to 0.144.4 while retaining the
|
|
@@ -47,7 +47,7 @@ If these layers disagree, treat `docs/` as the durable product intent and fix th
|
|
|
47
47
|
|
|
48
48
|
| Document | Purpose |
|
|
49
49
|
| --- | --- |
|
|
50
|
-
| [release-readiness.md](./release-readiness.md) | v1.0.
|
|
50
|
+
| [release-readiness.md](./release-readiness.md) | v1.0.1 source readiness, final-commit and exact-artifact validation, and pending tag, publication, and post-publish gates. |
|
|
51
51
|
|
|
52
52
|
## Workflow And Agent Documents
|
|
53
53
|
|
|
@@ -252,7 +252,7 @@ sh "$SOURCE_ROOT/install.sh" \
|
|
|
252
252
|
On native Windows PowerShell:
|
|
253
253
|
|
|
254
254
|
```powershell
|
|
255
|
-
$ReleaseVersion = "1.0.
|
|
255
|
+
$ReleaseVersion = "1.0.1"
|
|
256
256
|
$Workspace = Join-Path $env:TEMP "tcx-pypi-$ReleaseVersion"
|
|
257
257
|
New-Item -ItemType Directory -Force $Workspace | Out-Null
|
|
258
258
|
Set-Location $Workspace
|
|
@@ -60,7 +60,7 @@ design, migration, and validation evidence.
|
|
|
60
60
|
- Provider canary regressions prove that submit/cancel results, health details,
|
|
61
61
|
account-sync exceptions, and successful account display metadata do not
|
|
62
62
|
reappear in DB rows, API/MCP projections, execution results, or audit events.
|
|
63
|
-
- A disposable generated workspace reports nine fixed roles and
|
|
63
|
+
- A disposable generated workspace reports nine fixed roles and 32 skills,
|
|
64
64
|
contains no retired execution role, and exposes no ungated submit, cancel, or
|
|
65
65
|
broker status-refresh mutation. Its one execution-risk MCP tool is
|
|
66
66
|
`use_order_turn_grant`, which has no authority without hook-injected proof.
|
|
@@ -737,11 +737,11 @@ uvx --refresh --from tradingcodex tcx update . --from tradingcodex
|
|
|
737
737
|
Generated root config sets `default_permissions = "trading-research"` and
|
|
738
738
|
defines two custom profiles. It deliberately omits legacy `sandbox_mode` from
|
|
739
739
|
the root and every fixed-role TOML because any loaded `sandbox_mode` overrides
|
|
740
|
-
custom permission profiles in Codex. This contract
|
|
740
|
+
custom permission profiles in Codex. This contract requires Codex CLI 0.144.4
|
|
741
741
|
or later on a locally supported platform. Version 0.144.4 is the current
|
|
742
|
-
release-validation reference for permission profiles, hooks, required MCP
|
|
743
|
-
|
|
744
|
-
|
|
742
|
+
release-validation reference for permission profiles, hooks, required MCP,
|
|
743
|
+
deferred MCP calls, and the explicit V2 feature table. Older versions fail the
|
|
744
|
+
Codex runtime doctor check. These remain version-sensitive
|
|
745
745
|
surfaces, so release validation includes strict config/feature inspection and
|
|
746
746
|
a real native smoke.
|
|
747
747
|
See the [Codex permissions reference](https://learn.chatgpt.com/docs/permissions).
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
# TradingCodex 1.0.
|
|
1
|
+
# TradingCodex 1.0.1 Release Status
|
|
2
2
|
|
|
3
|
-
Status:
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
Status: local source, frontend, disposable native workflow, and exact
|
|
4
|
+
distribution gates complete; candidate CI, tag-bound rehearsal, tag, and
|
|
5
|
+
publication remain pending
|
|
6
6
|
Updated: 2026-07-15
|
|
7
7
|
|
|
8
|
-
This page records the current `1.0.
|
|
8
|
+
This page records the current `1.0.1` release state. It is not an implementation
|
|
9
9
|
roadmap and does not treat source changes as proof that an exact distribution
|
|
10
10
|
artifact or public release has passed its gates.
|
|
11
11
|
|
|
12
|
-
## v1.0.
|
|
12
|
+
## v1.0.1 Contract
|
|
13
13
|
|
|
14
14
|
- `tradingcodex_service/version.py` is the single version source for package
|
|
15
15
|
metadata, `tcx --version`, generated workspaces, release input, and tags.
|
|
@@ -33,22 +33,49 @@ artifact or public release has passed its gates.
|
|
|
33
33
|
|
|
34
34
|
| Area | Current state | Evidence or remaining gate |
|
|
35
35
|
| --- | --- | --- |
|
|
36
|
-
| Version identity | Verified in the working tree | `TRADINGCODEX_VERSION` is `1.0.
|
|
36
|
+
| Version identity | Verified in the working tree | `TRADINGCODEX_VERSION` is `1.0.1`; `pyproject.toml` reads it dynamically; `tcx --version` uses the same source. |
|
|
37
37
|
| Schema baseline | Verified in the working tree | Project apps contain only `0001_v1_initial`; migration-graph and model-state checks live in `tests/test_v1_migrations.py`. |
|
|
38
|
-
| Workspace baseline |
|
|
39
|
-
| Interfaces and safety |
|
|
38
|
+
| Workspace baseline | Exact candidate native acceptance passes locally | The v1.0.1 candidate projects the shared artifact skill to all producing roles, requires the current reference Codex client, and exposes the nested MCP contracts. A disposable generated workspace passed strict config/hook preflight plus artifact, forecast, and proof-protected Brain MCP smokes. |
|
|
39
|
+
| Interfaces and safety | Full local candidate suite passes | MCP schema, lifecycle-error, skill-projection, resource-template discovery, Codex-version, forecast receipt-time, Django, migration, compile, and full test gates pass. |
|
|
40
40
|
| Frontend | Viewer source, build, and browser acceptance pass | Ten focused tests, typecheck/build, deterministic committed assets, three-section routing, read-only source checks, 1440px/900px/600px layouts, keyboard focus, workspace switching, long-label containment, and invalid-selection failure rendering pass. |
|
|
41
41
|
| Release automation | Structurally verified | The release contract suite verifies tag and artifact gating; a manual `publish_pypi=false` rehearsal remains required. |
|
|
42
|
-
| Distribution artifacts | Exact
|
|
43
|
-
| Git tag and PyPI | Not performed by this status | Merge/CI, annotated `v1.0.
|
|
42
|
+
| Distribution artifacts | Exact local candidate passes | Fresh `1.0.1` sdist/wheel build, `twine check`, and the isolated macOS packaged-wheel smoke pass. Native CI reuse on Ubuntu, macOS, and Windows remains required. |
|
|
43
|
+
| Git tag and PyPI | Not performed by this status | Merge/CI, annotated `v1.0.1` tag, protected-environment approval, and manual publication remain release-operator actions. |
|
|
44
44
|
| Post-publish verification | Blocked on publication | Exact-version POSIX and native Windows attach/doctor smokes run only after PyPI contains the immutable artifacts. |
|
|
45
45
|
|
|
46
46
|
Release-branch status describes candidate source shape, not release sign-off.
|
|
47
47
|
The merged commit and exact uploaded artifacts remain authoritative.
|
|
48
48
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
The local v1.0.1 candidate evidence recorded on 2026-07-15 is:
|
|
50
|
+
|
|
51
|
+
- `python3.11 -m pytest`: **617 passed** with three dependency-level Pydantic
|
|
52
|
+
deprecation warnings and no failures.
|
|
53
|
+
- `python3.11 manage.py check`, migration dry-run, compile pass, skill
|
|
54
|
+
validation, JSON-schema validation, and diff checks: passed.
|
|
55
|
+
- `npm ci --prefix frontend`, the ten-test frontend suite, typecheck/build, and
|
|
56
|
+
deterministic committed-asset comparison: passed.
|
|
57
|
+
- A fresh `tradingcodex-1.0.1` sdist and wheel built in isolation; both passed
|
|
58
|
+
`twine check`, and the wheel passed the macOS isolated-install platform smoke
|
|
59
|
+
with runtime version `1.0.1`.
|
|
60
|
+
- A fresh generated development workspace passed `tcx doctor` and the strict
|
|
61
|
+
current-reference Codex CLI contract, including all eight trusted hooks.
|
|
62
|
+
- Native artifact persistence completed with one exact
|
|
63
|
+
`fundamental-analyst` child after it loaded `tcx-artifact`; the accepted
|
|
64
|
+
artifact id was
|
|
65
|
+
`research_report-ACME-synthetic-fixture-fundamental-artifact-persistence-smoke-76d0866c5fa1`.
|
|
66
|
+
- Native forecast persistence completed in one exact child without an MCP
|
|
67
|
+
retry: artifact
|
|
68
|
+
`fundamental_report-receipt-race-fixed-synthetic-recurring-revenue-smoke-e3e03d1566da`
|
|
69
|
+
produced forecast `forecast-261e59a11d6d4bb39fe0e8c80c95042d`.
|
|
70
|
+
The omitted caller timestamp resolved to one service receipt time, so
|
|
71
|
+
`issued_at` equaled `recorded_at`.
|
|
72
|
+
- A fresh exact `$tcx-brain` management turn received the hook-owned build-turn
|
|
73
|
+
proof and completed the protected list call, confirming the current-reference
|
|
74
|
+
deferred MCP proof path.
|
|
75
|
+
|
|
76
|
+
The v1.0.0 baseline evidence recorded on 2026-07-15 is listed below. It does
|
|
77
|
+
not substitute for v1.0.1 validation, CI on the candidate commit, or the
|
|
78
|
+
tag-bound rehearsal of the immutable patch artifacts:
|
|
52
79
|
|
|
53
80
|
- GitHub Actions [CI run 29403737708](https://github.com/monarchjuno/tradingcodex/actions/runs/29403737708)
|
|
54
81
|
passed on release-branch commit `12649b0`: the safety and financial invariant
|
|
@@ -223,13 +250,13 @@ Trusted Publisher configuration must be reviewed before publication.
|
|
|
223
250
|
## Tag And Publication State
|
|
224
251
|
|
|
225
252
|
This document does not assert that the final commit is on `main`, CI is green,
|
|
226
|
-
the tag exists, or PyPI contains `1.0.
|
|
253
|
+
the tag exists, or PyPI contains `1.0.1`. After every final-commit and artifact
|
|
227
254
|
gate passes:
|
|
228
255
|
|
|
229
256
|
1. Merge the release commit to `main` and wait for CI.
|
|
230
|
-
2. Create and push the annotated tag `v1.0.
|
|
257
|
+
2. Create and push the annotated tag `v1.0.1` at that commit.
|
|
231
258
|
3. Rehearse the manual workflow with `publish_pypi=false` and
|
|
232
|
-
`release_version=1.0.
|
|
259
|
+
`release_version=1.0.1`.
|
|
233
260
|
4. With protected-environment approval, run the same tag with
|
|
234
261
|
`publish_pypi=true`.
|
|
235
262
|
5. Verify the immutable PyPI files, release notes, and exact-version POSIX and
|
|
@@ -243,6 +243,12 @@ Codex and subagents should use service-layer tools when available:
|
|
|
243
243
|
`create_blind_review_assignment`, `get_blind_review_packet`,
|
|
244
244
|
`record_blind_human_review`, and `compare_evaluation_runs`
|
|
245
245
|
|
|
246
|
+
For forecast issue and revision, agents normally omit `issued_at` and
|
|
247
|
+
`revised_at`. The service assigns the event time and `recorded_at` from one
|
|
248
|
+
receipt timestamp, avoiding client-clock drift and preserving the invariant
|
|
249
|
+
that an event cannot occur after its system record. Explicit caller timestamps
|
|
250
|
+
remain timezone-aware and fail closed when they are in the future.
|
|
251
|
+
|
|
246
252
|
`source_snapshot_ids` are service-issued references, not agent-authored labels.
|
|
247
253
|
When reproducibility requires a snapshot, the producing role calls
|
|
248
254
|
`record_source_snapshot` first and copies only the exact returned `snapshot_id`
|
|
@@ -118,6 +118,14 @@ Required quality includes source/as-of posture, non-empty readiness label,
|
|
|
118
118
|
context and reader summaries, confidence, missing evidence, next action,
|
|
119
119
|
blocked actions, and explicit handoff state.
|
|
120
120
|
|
|
121
|
+
Every producing fixed role receives the shared `tcx-artifact` skill. It maps
|
|
122
|
+
the service's state-specific thesis lifecycle, single-range probability,
|
|
123
|
+
follow-up request, RFC 3339, and complete forecast base-rate requirements into
|
|
124
|
+
a compact persistence procedure. MCP schemas expose the same nested fields so
|
|
125
|
+
deferred tool discovery supplies the contract before the call. A role applies
|
|
126
|
+
all returned corrections in one targeted retry and stops in `waiting` if the
|
|
127
|
+
same contract error repeats.
|
|
128
|
+
|
|
121
129
|
For run-bound artifacts, provide `workflow_run_id` and exact consumed
|
|
122
130
|
`input_artifact_ids`. The service derives producer identity, schema version,
|
|
123
131
|
content hash, and input hashes. `plan_hash`, `stage_id`, and `task_id` are not v1
|
|
@@ -328,7 +336,7 @@ judgment, or mutate state. Operational diagnosis and recovery remain
|
|
|
328
336
|
|
|
329
337
|
## Validation
|
|
330
338
|
|
|
331
|
-
Validate the nine-role fixed roster and projections,
|
|
339
|
+
Validate the nine-role fixed roster and projections, 32 skill bundles, absence
|
|
332
340
|
of raw public execution-mutation tools, protected grant-tool proof behavior,
|
|
333
341
|
deterministic native-action and `$tcx-order-allow` hook behavior,
|
|
334
342
|
exact V2 dispatch, multilingual analysis requests,
|
|
@@ -6,7 +6,7 @@ shape, automate, or review workflows without granting extra authority.
|
|
|
6
6
|
|
|
7
7
|
## Naming Contract
|
|
8
8
|
|
|
9
|
-
All
|
|
9
|
+
All 32 bundled TradingCodex skills use the `tcx-` namespace. Prefer one word
|
|
10
10
|
after the prefix and use at most two words when clarity or safety requires it,
|
|
11
11
|
as in `tcx-order-submit` or `tcx-investor-context`. Folder names, frontmatter
|
|
12
12
|
names, registry ids, projected paths, UI metadata, and explicit `$` invocations
|
|
@@ -16,6 +16,10 @@ The namespace is reserved for bundled product skills. User-owned
|
|
|
16
16
|
`strategy-*`, `investment-brain-*`, and optional role skills remain separate;
|
|
17
17
|
an optional skill cannot claim a `tcx-*` id.
|
|
18
18
|
|
|
19
|
+
The shared internal `tcx-artifact` skill is projected to every producing fixed
|
|
20
|
+
role. It teaches the exact research-artifact, thesis-lifecycle, and forecast
|
|
21
|
+
ledger contracts; users do not invoke it as a Head Manager entrypoint.
|
|
22
|
+
|
|
19
23
|
## Primary Entrypoints
|
|
20
24
|
|
|
21
25
|
| Skill | Primary use | Main output |
|
|
@@ -48,7 +48,7 @@ The target workspace should be empty. A directory with only `.git` already
|
|
|
48
48
|
initialized is fine, as is an empty directory inside an existing parent
|
|
49
49
|
worktree.
|
|
50
50
|
|
|
51
|
-
Use Codex CLI 0.144.
|
|
51
|
+
Use Codex CLI 0.144.4 or later on macOS, Linux, WSL, or native Windows. Version
|
|
52
52
|
0.144.4 is the current TradingCodex reference for custom permission profiles,
|
|
53
53
|
hooks, required MCP startup, and explicit MultiAgent V2 configuration. Verify
|
|
54
54
|
with `codex --version`; `./tcx doctor --layer guidance` fails below the
|
|
@@ -12,8 +12,8 @@ from tradingcodex_cli.commands import doctor
|
|
|
12
12
|
("installed", "ok", "warn"),
|
|
13
13
|
[
|
|
14
14
|
("0.144.0", False, False),
|
|
15
|
-
("0.144.1",
|
|
16
|
-
("0.144.2",
|
|
15
|
+
("0.144.1", False, False),
|
|
16
|
+
("0.144.2", False, False),
|
|
17
17
|
("0.144.4", True, False),
|
|
18
18
|
("0.145.0", True, True),
|
|
19
19
|
],
|
|
@@ -41,10 +41,10 @@ def test_codex_cli_reference_version_check(
|
|
|
41
41
|
assert result["ok"] is ok
|
|
42
42
|
assert bool(result.get("warn")) is warn
|
|
43
43
|
assert f"installed={installed}" in result["detail"]
|
|
44
|
-
assert "required>=0.144.
|
|
44
|
+
assert "required>=0.144.4" in result["detail"]
|
|
45
45
|
assert "reference=0.144.4" in result["detail"]
|
|
46
46
|
if installed in {"0.144.1", "0.144.2"}:
|
|
47
|
-
assert "
|
|
47
|
+
assert "older than required" in result["detail"]
|
|
48
48
|
if installed == "0.145.0":
|
|
49
49
|
assert "newer client requires harness revalidation" in result["detail"]
|
|
50
50
|
|
|
@@ -72,6 +72,25 @@ def test_mcp_surface_has_one_lightweight_run_tool_and_no_server_orchestrator() -
|
|
|
72
72
|
improvement_item = artifact_properties["improvements"]["items"]
|
|
73
73
|
assert improvement_item["type"] == "object"
|
|
74
74
|
assert improvement_item["additionalProperties"] is False
|
|
75
|
+
lifecycle = artifact_properties["thesis_lifecycle"]
|
|
76
|
+
assert lifecycle["required"] == ["state"]
|
|
77
|
+
assert lifecycle["properties"]["state"]["enum"] == [
|
|
78
|
+
"exploring",
|
|
79
|
+
"testing",
|
|
80
|
+
"validated",
|
|
81
|
+
"rejected",
|
|
82
|
+
"monitoring",
|
|
83
|
+
]
|
|
84
|
+
assert {"monitoring_artifact", "review_cadence"} <= set(lifecycle["properties"])
|
|
85
|
+
forecast_properties = TOOL_REGISTRY["issue_forecast"].input_schema["properties"]
|
|
86
|
+
assert forecast_properties["horizon"]["format"] == "date-time"
|
|
87
|
+
assert forecast_properties["issued_at"]["description"].startswith("Optional")
|
|
88
|
+
assert forecast_properties["base_rate"]["required"] == [
|
|
89
|
+
"cohort",
|
|
90
|
+
"source_snapshot_id",
|
|
91
|
+
"sample_size",
|
|
92
|
+
"selection_rule",
|
|
93
|
+
]
|
|
75
94
|
|
|
76
95
|
|
|
77
96
|
def test_authenticated_artifacts_bind_run_local_lineage(tmp_path: Path) -> None:
|
|
@@ -256,7 +275,7 @@ def test_generated_contract_projects_sol_head_and_terra_roles(workspace: Path) -
|
|
|
256
275
|
assert 'enabled = true' in config
|
|
257
276
|
assert 'max_concurrent_threads_per_session = 7' in config
|
|
258
277
|
assert 'max_threads = 6' not in config
|
|
259
|
-
assert model_policy["roles"]["head-manager"]["minimum_codex_version"] == "0.144.
|
|
278
|
+
assert model_policy["roles"]["head-manager"]["minimum_codex_version"] == "0.144.4"
|
|
260
279
|
assert model_policy["roles"]["head-manager"]["reference_codex_version"] == "0.144.4"
|
|
261
280
|
assert "required = true" in config
|
|
262
281
|
assert '"begin_analysis_run"' in config
|
|
@@ -81,6 +81,27 @@ def test_explicit_quality_requirements_still_fail_closed(tmp_path: Path) -> None
|
|
|
81
81
|
assert "decision_quality.contrary_evidence" in result["required_fields_missing"]
|
|
82
82
|
|
|
83
83
|
|
|
84
|
+
def test_monitoring_lifecycle_error_names_the_two_supported_fields(tmp_path: Path) -> None:
|
|
85
|
+
artifact_path = _write_artifact(
|
|
86
|
+
tmp_path,
|
|
87
|
+
"decision_quality_required: true\n"
|
|
88
|
+
"contrary_evidence: []\n"
|
|
89
|
+
"update_triggers: []\n"
|
|
90
|
+
"invalidation_conditions: []\n"
|
|
91
|
+
"source_trust_notes: []\n"
|
|
92
|
+
"thesis_lifecycle:\n"
|
|
93
|
+
" state: monitoring\n",
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
result = evaluate_decision_quality(tmp_path, artifact_path, strict=True)
|
|
97
|
+
|
|
98
|
+
assert "decision_quality.thesis_lifecycle.monitoring_artifact_or_cadence" in result["required_fields_missing"]
|
|
99
|
+
assert (
|
|
100
|
+
"thesis_lifecycle.state=monitoring requires either monitoring_artifact or review_cadence"
|
|
101
|
+
in result["warnings"]
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
|
|
84
105
|
def test_explicit_context_gate_is_not_suppressed_by_producer_role(tmp_path: Path) -> None:
|
|
85
106
|
artifact_path = _write_artifact(
|
|
86
107
|
tmp_path,
|
|
@@ -242,7 +242,7 @@ def test_generated_workspace_codex_cli_user_scenario_matrix(tmp_path: Path) -> N
|
|
|
242
242
|
status = json.loads(tcx(workspace, env_extra, "subagents", "status").stdout)
|
|
243
243
|
assert status["installed_count"] == 9
|
|
244
244
|
assert status["fixed_roster_ok"] is True
|
|
245
|
-
assert status["skills_installed"] ==
|
|
245
|
+
assert status["skills_installed"] == 32
|
|
246
246
|
plan = json.loads(tcx(workspace, env_extra, "subagents", "plan", "--all").stdout)
|
|
247
247
|
assert plan["requested_count"] == 9
|
|
248
248
|
assert plan["parallel_spawn_ok"] is False
|
|
@@ -254,10 +254,11 @@ def test_generated_workspace_codex_cli_user_scenario_matrix(tmp_path: Path) -> N
|
|
|
254
254
|
"tcx-data-qc",
|
|
255
255
|
"tcx-scenarios",
|
|
256
256
|
"tcx-forecast",
|
|
257
|
+
"tcx-artifact",
|
|
257
258
|
"tcx-fundamental",
|
|
258
259
|
]
|
|
259
260
|
judgment_inspect = json.loads(tcx(workspace, env_extra, "subagents", "inspect", "judgment-reviewer").stdout)
|
|
260
|
-
assert judgment_inspect["effective_skills"] == ["tcx-judgment"]
|
|
261
|
+
assert judgment_inspect["effective_skills"] == ["tcx-artifact", "tcx-judgment"]
|
|
261
262
|
|
|
262
263
|
optional_body = workspace / "source-quality-body.md"
|
|
263
264
|
optional_body.write_text("# Source Quality Check\n\nCheck source dates and cite stale evidence warnings.\n", encoding="utf-8")
|
|
@@ -53,6 +53,7 @@ from tradingcodex_service.application.common import (
|
|
|
53
53
|
workspace_launcher_command,
|
|
54
54
|
)
|
|
55
55
|
from tradingcodex_service.application.customization import write_codex_mcp_server_config
|
|
56
|
+
from tradingcodex_service.version import TRADINGCODEX_VERSION
|
|
56
57
|
|
|
57
58
|
|
|
58
59
|
ROOT = Path(__file__).resolve().parents[1]
|
|
@@ -785,7 +786,7 @@ def test_service_version_mismatch_never_exposes_explicit_local_source(
|
|
|
785
786
|
monkeypatch.setenv("TRADINGCODEX_MCP_PACKAGE_SPEC", str(local_source))
|
|
786
787
|
monkeypatch.setenv(PACKAGE_SOURCE_KIND_ENV, "local-explicit")
|
|
787
788
|
|
|
788
|
-
action = _version_mismatch_next_action("1.0.
|
|
789
|
+
action = _version_mismatch_next_action("1.0.2", "127.0.0.1:48267")
|
|
789
790
|
|
|
790
791
|
assert str(local_source) not in action
|
|
791
792
|
assert "<package-spec>" in action
|
|
@@ -858,7 +859,7 @@ def test_real_custom_source_attach_patch_update_and_same_version_refresh(
|
|
|
858
859
|
assert first_python.is_file()
|
|
859
860
|
|
|
860
861
|
version_path = source / "tradingcodex_service/version.py"
|
|
861
|
-
version_path.write_text('TRADINGCODEX_VERSION = "1.0.
|
|
862
|
+
version_path.write_text('TRADINGCODEX_VERSION = "1.0.2"\n', encoding="utf-8")
|
|
862
863
|
before_explicit_override = {
|
|
863
864
|
path: path.read_bytes()
|
|
864
865
|
for path in (
|
|
@@ -913,7 +914,7 @@ def test_real_custom_source_attach_patch_update_and_same_version_refresh(
|
|
|
913
914
|
lock = json.loads(
|
|
914
915
|
(workspace / ".tradingcodex/generated/module-lock.json").read_text(encoding="utf-8")
|
|
915
916
|
)
|
|
916
|
-
assert lock["tradingcodex_version"] == "1.0.
|
|
917
|
+
assert lock["tradingcodex_version"] == "1.0.2"
|
|
917
918
|
assert lock["tradingcodex_package_spec"] == LOCAL_EXECUTABLE_SOURCE_PROVENANCE
|
|
918
919
|
|
|
919
920
|
main_path = source / "tradingcodex_cli/__main__.py"
|
|
@@ -956,7 +957,7 @@ def test_real_custom_source_attach_patch_update_and_same_version_refresh(
|
|
|
956
957
|
timeout=60,
|
|
957
958
|
check=True,
|
|
958
959
|
)
|
|
959
|
-
assert version.stdout.strip() == f"{marker}:1.0.
|
|
960
|
+
assert version.stdout.strip() == f"{marker}:1.0.2"
|
|
960
961
|
|
|
961
962
|
request = '{"jsonrpc":"2.0","id":1,"method":"tools/list"}\n'
|
|
962
963
|
config_paths = [
|
|
@@ -1029,7 +1030,7 @@ def test_uv_cache_removal_leaves_launchers_and_all_role_mcp_runnable(
|
|
|
1029
1030
|
timeout=30,
|
|
1030
1031
|
check=True,
|
|
1031
1032
|
)
|
|
1032
|
-
assert version.stdout.strip() ==
|
|
1033
|
+
assert version.stdout.strip() == TRADINGCODEX_VERSION
|
|
1033
1034
|
|
|
1034
1035
|
request = '{"jsonrpc":"2.0","id":1,"method":"tools/list"}\n'
|
|
1035
1036
|
for config in parsed:
|
|
@@ -1445,7 +1446,7 @@ def test_update_rejects_workspace_downgrade_before_writing(
|
|
|
1445
1446
|
bootstrap_workspace(workspace)
|
|
1446
1447
|
lock_path = workspace / ".tradingcodex/generated/module-lock.json"
|
|
1447
1448
|
lock = json.loads(lock_path.read_text(encoding="utf-8"))
|
|
1448
|
-
lock["tradingcodex_version"] = "1.0.
|
|
1449
|
+
lock["tradingcodex_version"] = "1.0.2"
|
|
1449
1450
|
lock_path.write_text(json.dumps(lock, indent=2) + "\n", encoding="utf-8")
|
|
1450
1451
|
before = {path.relative_to(workspace).as_posix(): path.read_bytes() for path in workspace.rglob("*") if path.is_file()}
|
|
1451
1452
|
|
|
@@ -80,7 +80,7 @@ def test_cli_hook_dispatch_preserves_standard_input_and_output(
|
|
|
80
80
|
def test_v1_package_metadata_has_one_stable_version_source() -> None:
|
|
81
81
|
project = tomllib.loads((ROOT / "pyproject.toml").read_text(encoding="utf-8"))
|
|
82
82
|
|
|
83
|
-
assert TRADINGCODEX_VERSION == "1.0.
|
|
83
|
+
assert TRADINGCODEX_VERSION == "1.0.1"
|
|
84
84
|
assert str(Version(TRADINGCODEX_VERSION)) == TRADINGCODEX_VERSION
|
|
85
85
|
assert project["project"]["dynamic"] == ["version"]
|
|
86
86
|
assert "version" not in project["project"]
|
|
@@ -145,7 +145,7 @@ def test_v1_release_checklist_does_not_preapprove_gates() -> None:
|
|
|
145
145
|
assert re.search(r"(?<![\d.])v?0\.\d+\.\d+\b", deployment) is None
|
|
146
146
|
assert re.search(r"(?<![\d.])v?0\.\d+\.\d+\b", checklist) is None
|
|
147
147
|
assert "- [x]" not in checklist.lower()
|
|
148
|
-
assert "release_version=1.0.
|
|
148
|
+
assert "release_version=1.0.1" in checklist
|
|
149
149
|
|
|
150
150
|
|
|
151
151
|
def test_attach_contract_has_no_overwrite_or_init_compatibility() -> None:
|
|
@@ -374,7 +374,7 @@ def test_update_status_requires_package_refresh_for_newer_workspace(monkeypatch,
|
|
|
374
374
|
"schema_version": 1,
|
|
375
375
|
"generated_at": "2026-07-11T00:00:00Z",
|
|
376
376
|
"workspace_id": "tcxw_" + "a" * 32,
|
|
377
|
-
"tradingcodex_version": "1.0.
|
|
377
|
+
"tradingcodex_version": "1.0.2",
|
|
378
378
|
"tradingcodex_package_spec": "tradingcodex",
|
|
379
379
|
"tradingcodex_home": str((tmp_path / "home").resolve()),
|
|
380
380
|
"home_source": "environment_override",
|
|
@@ -534,7 +534,7 @@ def test_update_status_never_treats_local_provenance_as_an_executable_spec(
|
|
|
534
534
|
"schema_version": 1,
|
|
535
535
|
"generated_at": "2026-07-11T00:00:00Z",
|
|
536
536
|
"workspace_id": "tcxw_" + "a" * 32,
|
|
537
|
-
"tradingcodex_version": "1.0.
|
|
537
|
+
"tradingcodex_version": "1.0.2",
|
|
538
538
|
"tradingcodex_package_spec": "local-explicit",
|
|
539
539
|
"tradingcodex_home": str((tmp_path / "home").resolve()),
|
|
540
540
|
"home_source": "environment_override",
|
|
@@ -134,6 +134,51 @@ def test_research_and_forecast_lists_filter_run_before_limit(monkeypatch, tmp_pa
|
|
|
134
134
|
assert [item["forecast_id"] for item in forecasts] == ["older-target"]
|
|
135
135
|
|
|
136
136
|
|
|
137
|
+
def test_omitted_forecast_event_times_use_the_same_system_receipt_time(
|
|
138
|
+
monkeypatch: pytest.MonkeyPatch,
|
|
139
|
+
tmp_path: Path,
|
|
140
|
+
) -> None:
|
|
141
|
+
base_snapshot_id = _snapshot(tmp_path, "base-rate", 0.45)
|
|
142
|
+
forecast_id = f"receipt-time-{uuid.uuid4().hex[:10]}"
|
|
143
|
+
issue_times = iter(
|
|
144
|
+
[
|
|
145
|
+
"2026-01-02T00:00:00.000000Z",
|
|
146
|
+
"2026-01-02T00:00:00.000001Z",
|
|
147
|
+
]
|
|
148
|
+
)
|
|
149
|
+
monkeypatch.setattr(forecasting_module, "now_iso", lambda: next(issue_times))
|
|
150
|
+
payload = _forecast_payload(base_snapshot_id, forecast_id)
|
|
151
|
+
payload.pop("issued_at")
|
|
152
|
+
|
|
153
|
+
issued = call_mcp_tool(
|
|
154
|
+
tmp_path,
|
|
155
|
+
"issue_forecast",
|
|
156
|
+
{"principal_id": "fundamental-analyst", **payload},
|
|
157
|
+
)["forecast"]
|
|
158
|
+
|
|
159
|
+
assert issued["issued_at"] == issued["recorded_at"]
|
|
160
|
+
|
|
161
|
+
revision_times = iter(
|
|
162
|
+
[
|
|
163
|
+
"2026-01-03T00:00:00.000000Z",
|
|
164
|
+
"2026-01-03T00:00:00.000001Z",
|
|
165
|
+
]
|
|
166
|
+
)
|
|
167
|
+
monkeypatch.setattr(forecasting_module, "now_iso", lambda: next(revision_times))
|
|
168
|
+
revised = call_mcp_tool(
|
|
169
|
+
tmp_path,
|
|
170
|
+
"revise_forecast",
|
|
171
|
+
{
|
|
172
|
+
"principal_id": "fundamental-analyst",
|
|
173
|
+
"forecast_id": forecast_id,
|
|
174
|
+
"revision_reason": "receipt-time regression check",
|
|
175
|
+
"probability": 0.61,
|
|
176
|
+
},
|
|
177
|
+
)["forecast"]
|
|
178
|
+
|
|
179
|
+
assert revised["revised_at"] == revised["recorded_at"]
|
|
180
|
+
|
|
181
|
+
|
|
137
182
|
def test_mcp_research_and_forecast_lifecycle_enforces_role_separation(monkeypatch, tmp_path: Path) -> None:
|
|
138
183
|
clock = ["2026-01-03T00:00:00Z"]
|
|
139
184
|
monkeypatch.setattr(forecasting_module, "now_iso", lambda: clock[0])
|
|
@@ -128,6 +128,22 @@ def test_mcp_transport_principal_cannot_be_spoofed_or_omitted(monkeypatch, tmp_p
|
|
|
128
128
|
assert spoofed and "does not match" in spoofed["error"]["message"]
|
|
129
129
|
|
|
130
130
|
|
|
131
|
+
def test_mcp_resource_template_discovery_returns_an_empty_supported_list(tmp_path: Path) -> None:
|
|
132
|
+
workspace = tmp_path / "resource-template-workspace"
|
|
133
|
+
bootstrap_workspace(workspace)
|
|
134
|
+
|
|
135
|
+
response = handle_mcp_rpc(
|
|
136
|
+
workspace,
|
|
137
|
+
{"jsonrpc": "2.0", "id": 1, "method": "resources/templates/list"},
|
|
138
|
+
)
|
|
139
|
+
|
|
140
|
+
assert response == {
|
|
141
|
+
"jsonrpc": "2.0",
|
|
142
|
+
"id": 1,
|
|
143
|
+
"result": {"resourceTemplates": []},
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
|
|
131
147
|
def test_mcp_registry_failure_exposes_only_static_safe_reads(monkeypatch, tmp_path: Path) -> None:
|
|
132
148
|
import tradingcodex_service.mcp_runtime as runtime
|
|
133
149
|
|
|
@@ -48,7 +48,7 @@ def test_bundled_skills_use_the_compact_tcx_namespace(tmp_path: Path) -> None:
|
|
|
48
48
|
if record["layer"] == "bundled_core"
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
assert len(SKILL_SPECS) ==
|
|
51
|
+
assert len(SKILL_SPECS) == 32
|
|
52
52
|
assert set(bundled) == set(SKILL_SPECS)
|
|
53
53
|
for skill_id, record in bundled.items():
|
|
54
54
|
assert SKILL_SPECS[skill_id].id == skill_id
|
|
@@ -67,6 +67,9 @@ def test_bundled_skills_use_the_compact_tcx_namespace(tmp_path: Path) -> None:
|
|
|
67
67
|
for agent in state["agents"].values()
|
|
68
68
|
for skill_id in agent["builtin_skills"]
|
|
69
69
|
)
|
|
70
|
+
for role, agent in state["agents"].items():
|
|
71
|
+
if role != "head-manager":
|
|
72
|
+
assert "tcx-artifact" in agent["builtin_skills"]
|
|
70
73
|
|
|
71
74
|
legacy_ids = {
|
|
72
75
|
"automate-workflow",
|
|
@@ -343,6 +343,8 @@ workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/ris
|
|
|
343
343
|
workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-risk/agents/openai.yaml
|
|
344
344
|
workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-anti-overfit/SKILL.md
|
|
345
345
|
workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-anti-overfit/agents/openai.yaml
|
|
346
|
+
workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-artifact/SKILL.md
|
|
347
|
+
workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-artifact/agents/openai.yaml
|
|
346
348
|
workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-data-qc/SKILL.md
|
|
347
349
|
workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-data-qc/agents/openai.yaml
|
|
348
350
|
workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-evidence/SKILL.md
|
|
@@ -205,7 +205,9 @@ def _codex_cli_runtime_check() -> dict[str, Any]:
|
|
|
205
205
|
compatible = parsed >= minimum
|
|
206
206
|
differs_from_reference = parsed != reference
|
|
207
207
|
reference_note = ""
|
|
208
|
-
if compatible
|
|
208
|
+
if not compatible:
|
|
209
|
+
reference_note = "; older than required; upgrade Codex before using the generated harness"
|
|
210
|
+
elif parsed < reference:
|
|
209
211
|
reference_note = "; compatible but older than reference; upgrade before release validation"
|
|
210
212
|
elif parsed > reference:
|
|
211
213
|
reference_note = "; newer client requires harness revalidation"
|