tradingcodex 1.2.0__tar.gz → 1.2.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.2.0 → tradingcodex-1.2.1}/CHANGELOG.md +20 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/PKG-INFO +1 -1
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/docs/README.md +2 -1
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/docs/data-sources-and-openbb.md +17 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/docs/deployment.md +24 -21
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/docs/generated-workspaces.md +13 -10
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/docs/harness.md +1 -1
- tradingcodex-1.2.1/docs/release-readiness.md +70 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/docs/roles-skills-and-workflows.md +9 -4
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/docs/system-architecture.md +1 -1
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/docs/user-facing-skills.md +5 -6
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/docs/validation-and-test-plan.md +12 -8
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_codex_native_orchestration.py +10 -9
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_e2e_user_scenarios.py +3 -15
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_guidebook_contract.py +8 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_investment_brain_provenance.py +3 -8
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_native_execution_gateway.py +2 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_order_turn_grant.py +7 -15
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_platform_runtime.py +2 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_release_contract.py +52 -17
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_skill_runtime_boundaries.py +17 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_source_snapshot_agent_contract.py +8 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex.egg-info/PKG-INFO +1 -1
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_cli/commands/doctor.py +1 -1
- tradingcodex-1.2.1/tradingcodex_service/version.py +1 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/codex-base/files/.codex/config.toml +2 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/codex-base/files/.codex/hooks/tradingcodex_hook.py +1 -34
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/codex-base/files/.codex/hooks.json +1 -1
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/codex-base/files/AGENTS.md +6 -3
- tradingcodex-1.2.1/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-investor-context/SKILL.md +89 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-workflow/SKILL.md +38 -36
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-data-qc/SKILL.md +6 -3
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-source-gate/SKILL.md +17 -0
- tradingcodex-1.2.0/docs/release-readiness.md +0 -151
- tradingcodex-1.2.0/tradingcodex_service/version.py +0 -1
- tradingcodex-1.2.0/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-investor-context/SKILL.md +0 -92
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/CONTRIBUTING.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/LICENSE +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/MANIFEST.in +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/NOTICE +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/README.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/TRADEMARKS.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/__init__.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/audit/__init__.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/audit/admin.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/audit/apps.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/audit/migrations/0001_v1_initial.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/audit/migrations/__init__.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/audit/models.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/harness/__init__.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/harness/admin.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/harness/apps.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/harness/migrations/0001_v1_initial.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/harness/migrations/__init__.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/harness/models.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/harness/templatetags/__init__.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/integrations/__init__.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/integrations/admin.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/integrations/apps.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/integrations/migrations/0001_v1_initial.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/integrations/migrations/__init__.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/integrations/models.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/mcp/__init__.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/mcp/admin.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/mcp/apps.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/mcp/migrations/0001_v1_initial.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/mcp/migrations/0002_remove_external_mcp_gate.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/mcp/migrations/__init__.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/mcp/models.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/mcp/services.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/orders/__init__.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/orders/admin.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/orders/apps.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/orders/migrations/0001_v1_initial.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/orders/migrations/__init__.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/orders/models.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/orders/services.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/policy/__init__.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/policy/admin.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/policy/apps.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/policy/migrations/0001_v1_initial.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/policy/migrations/__init__.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/policy/models.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/policy/services.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/portfolio/__init__.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/portfolio/admin.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/portfolio/apps.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/portfolio/migrations/0001_v1_initial.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/portfolio/migrations/__init__.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/apps/portfolio/models.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/assets/tradingcodex-banner-v1.png +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/assets/tradingcodex-banner-v2.png +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/assets/tradingcodex-banner-v3.png +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/assets/tradingcodex-banner.svg +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/docs/codex-native-orchestration.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/docs/decision-memory.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/docs/financial-workflow-references.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/docs/guardrails.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/docs/improvement-loop.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/docs/interfaces-and-surfaces.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/docs/investment-brain-plugins.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/docs/knowledge-wikis.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/docs/licensing-and-commercialization.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/docs/product-direction.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/docs/research-memory-and-artifacts.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/docs/safety-policy-and-execution.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/frontend/index.html +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/frontend/package-lock.json +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/frontend/package.json +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/frontend/src/App.tsx +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/frontend/src/ViewerShell.tsx +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/frontend/src/api.ts +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/frontend/src/domain.ts +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/frontend/src/features/LibraryPage.tsx +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/frontend/src/features/SystemPage.tsx +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/frontend/src/features/WikiPage.tsx +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/frontend/src/main.tsx +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/frontend/src/navigation.js +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/frontend/src/navigation.test.js +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/frontend/src/styles.css +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/frontend/src/ui.tsx +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/frontend/src/viewer-data.js +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/frontend/tsconfig.json +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/frontend/vite.config.ts +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/install.sh +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/installation.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/pyproject.toml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/setup.cfg +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_artifact_authentication.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_artifact_catalog.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_brain_skill.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_broker_center_prd.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_build_contract_metadata.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_build_hook.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_build_turn_grant.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_calculation_runner.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_clean_v1_cli_audit.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_codex_capabilities.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_codex_cli_compat.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_codex_cli_contract.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_datasets.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_decision_memory_core.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_dev_bootstrap.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_dynamic_artifact_quality.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_evaluation_lab_hardening.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_evaluation_profiles.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_investment_analysis.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_investment_brain_cli.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_investment_brain_prompt_layers.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_investment_brain_registry.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_investor_context.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_knowledge_wikis.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_mcp_broker_release_health.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_provider_source_approval.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_research_forecast_surfaces.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_research_object_catalog.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_research_objects.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_research_spec_profiles.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_runtime_paths.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_runtime_profile.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_security_invariants.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_v1_migrations.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_v1_state_integrity.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_viewer.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tests/test_workspace_git_contract.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex.egg-info/SOURCES.txt +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex.egg-info/dependency_links.txt +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex.egg-info/entry_points.txt +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex.egg-info/requires.txt +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex.egg-info/top_level.txt +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_cli/__init__.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_cli/__main__.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_cli/calculation-runtime-lock.json +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_cli/calculation-runtime-requirements.txt +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_cli/calculation_runner.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_cli/commands/__init__.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_cli/commands/bootstrap.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_cli/commands/build.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_cli/commands/connectors.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_cli/commands/data_sources.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_cli/commands/db.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_cli/commands/decision.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_cli/commands/evaluation.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_cli/commands/forecast.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_cli/commands/home.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_cli/commands/investment_brains.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_cli/commands/investor_context.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_cli/commands/mcp.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_cli/commands/orders.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_cli/commands/policy.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_cli/commands/profile.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_cli/commands/research.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_cli/commands/skills.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_cli/commands/strategies.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_cli/commands/subagents.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_cli/commands/utils.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_cli/commands/wikis.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_cli/commands/workflow.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_cli/commands/workspaces.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_cli/generator.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_cli/mcp_stdio.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_cli/package_source.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_cli/service_autostart.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_cli/startup_status.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_cli/versioning.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/__init__.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/admin.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/api.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/__init__.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/agents.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/analysis_runs.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/artifact_bindings.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/artifact_catalog.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/artifact_quality.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/audit.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/brokers.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/build_gateway.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/calculations.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/codex_capabilities.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/common.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/data_sources.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/datasets.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/decision_packages.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/evaluation_lab.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/execution_gateway.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/forecasting.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/git_subprocess.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/harness.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/health.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/investment_analysis.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/investment_brains.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/investor_context.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/knowledge_wikis.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/managed_package_sources.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/markdown_preview.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/operator_authority.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/orders.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/policy.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/portfolio.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/postmortems.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/research.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/research_object_catalog.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/research_objects.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/research_specs.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/runtime.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/skill_invocations.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/source_snapshots.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/viewer.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/wiki_viewer.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/workspace_git.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/application/workspaces.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/asgi.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/log_safety.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/mcp_runtime.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/runtime_profile.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/settings.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/static/tradingcodex_admin/favicon.svg +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/static/tradingcodex_web/assets/allPaths-DJ5oy6Ot.js +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/static/tradingcodex_web/assets/allPathsLoader-CRlwLu1z.js +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/static/tradingcodex_web/assets/index-c5e0ZsDr.js +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/static/tradingcodex_web/assets/index-y2v9zCLQ.css +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/static/tradingcodex_web/assets/paths-BDuITqPr.js +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/static/tradingcodex_web/assets/paths-CoispWSv.js +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/static/tradingcodex_web/assets/splitPathsBySizeLoader-x57jFwA3.js +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/static/tradingcodex_web/index.html +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/urls.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/viewer_api.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/web.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/tradingcodex_service/wsgi.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/__init__.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/audit/files/.tradingcodex/audit/README.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/audit/files/trading/audit/.gitkeep +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/audit/module.json +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/codex-base/files/.codex/prompts/base_instructions/fixed-role.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/codex-base/files/.codex/prompts/base_instructions/head-manager.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/codex-base/files/.codex/rules/tradingcodex.rules +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/codex-base/files/.tradingcodex/cli.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/codex-base/files/.tradingcodex/config.yaml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/codex-base/files/pyproject.toml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/codex-base/files/tcx +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/codex-base/files/tcx-calc +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/codex-base/files/tcx-calc.cmd +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/codex-base/files/tcx.cmd +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/codex-base/module.json +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/policies/restricted-list.yaml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/approval_receipt.schema.json +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/audit_event.schema.json +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/evidence_pack.schema.json +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/execution_result.schema.json +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/fundamental_report.schema.json +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/news_report.schema.json +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/order_ticket.schema.json +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/portfolio_review.schema.json +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/postmortem_report.schema.json +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/research_artifact.schema.json +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/risk_report.schema.json +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/technical_report.schema.json +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/thesis.schema.json +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/valuation.schema.json +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/enforcement-guardrails/module.json +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/fixed-subagents/files/.codex/agents/fundamental-analyst.toml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/fixed-subagents/files/.codex/agents/instrument-analyst.toml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/fixed-subagents/files/.codex/agents/judgment-reviewer.toml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/fixed-subagents/files/.codex/agents/macro-analyst.toml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/fixed-subagents/files/.codex/agents/news-analyst.toml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/fixed-subagents/files/.codex/agents/portfolio-manager.toml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/fixed-subagents/files/.codex/agents/risk-manager.toml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/fixed-subagents/files/.codex/agents/technical-analyst.toml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/fixed-subagents/files/.codex/agents/valuation-analyst.toml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/fixed-subagents/files/.tradingcodex/mainagent/skill-change-proposals/.gitkeep +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/fixed-subagents/module.json +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/guidance-guardrails/files/.tradingcodex/guidance/guardrails.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/guidance-guardrails/files/.tradingcodex/guidance/task-quality-checklist.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/guidance-guardrails/module.json +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/information-barriers/files/.tradingcodex/secrets.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/information-barriers/files/trading/forecasts/.gitkeep +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/information-barriers/files/trading/market-data/.gitkeep +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/information-barriers/files/trading/portfolio/.gitkeep +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/information-barriers/files/trading/reports/fundamental/.gitkeep +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/information-barriers/files/trading/reports/instrument/.gitkeep +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/information-barriers/files/trading/reports/macro/.gitkeep +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/information-barriers/files/trading/reports/news/.gitkeep +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/information-barriers/files/trading/reports/policy/.gitkeep +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/information-barriers/files/trading/reports/portfolio/.gitkeep +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/information-barriers/files/trading/reports/postmortem/.gitkeep +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/information-barriers/files/trading/reports/risk/.gitkeep +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/information-barriers/files/trading/reports/technical/.gitkeep +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/information-barriers/files/trading/reports/valuation/.gitkeep +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/information-barriers/files/trading/research/.gitkeep +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/information-barriers/module.json +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/paper-trading/module.json +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-automate/SKILL.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-automate/agents/openai.yaml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-brain/SKILL.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-brain/agents/openai.yaml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-brain/references/bundle-contract.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-build/SKILL.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-build/agents/openai.yaml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-investor-context/agents/openai.yaml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-memory/SKILL.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-memory/agents/openai.yaml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-allow/SKILL.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-allow/agents/openai.yaml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-cancel/SKILL.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-cancel/agents/openai.yaml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-submit/SKILL.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-submit/agents/openai.yaml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-plan/SKILL.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-plan/agents/openai.yaml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-server/SKILL.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-server/agents/openai.yaml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-strategy/SKILL.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-strategy/agents/openai.yaml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-wiki/SKILL.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-wiki/agents/openai.yaml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-wiki/references/bundle-contract.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-workflow/agents/openai.yaml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/fundamental-analyst/tcx-fundamental/SKILL.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/fundamental-analyst/tcx-fundamental/agents/openai.yaml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/instrument-analyst/tcx-instrument/SKILL.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/instrument-analyst/tcx-instrument/agents/openai.yaml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/judgment-reviewer/tcx-judgment/SKILL.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/judgment-reviewer/tcx-judgment/agents/openai.yaml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/macro-analyst/tcx-macro/SKILL.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/macro-analyst/tcx-macro/agents/openai.yaml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/news-analyst/tcx-news/SKILL.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/news-analyst/tcx-news/agents/openai.yaml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/portfolio-manager/tcx-order-draft/SKILL.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/portfolio-manager/tcx-order-draft/agents/openai.yaml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/portfolio-manager/tcx-portfolio/SKILL.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/portfolio-manager/tcx-portfolio/agents/openai.yaml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-order-approve/SKILL.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-order-approve/agents/openai.yaml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-policy/SKILL.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-policy/agents/openai.yaml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-risk/SKILL.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-risk/agents/openai.yaml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-anti-overfit/SKILL.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-anti-overfit/agents/openai.yaml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-artifact/SKILL.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-artifact/agents/openai.yaml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-calculation/SKILL.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-calculation/agents/openai.yaml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-calculation/references/data-runtime.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-calculation/references/finance-methods.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-data-qc/agents/openai.yaml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-evidence/SKILL.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-evidence/agents/openai.yaml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-forecast/SKILL.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-forecast/agents/openai.yaml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-scenarios/SKILL.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-scenarios/agents/openai.yaml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-source-gate/agents/openai.yaml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-source-gate/references/openbb-mcp.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/technical-analyst/tcx-technical/SKILL.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/technical-analyst/tcx-technical/agents/openai.yaml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/valuation-analyst/tcx-valuation/SKILL.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/valuation-analyst/tcx-valuation/agents/openai.yaml +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/repo-skills/module.json +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/tradingcodex-mcp/files/.tradingcodex/mcp/enforcer/README.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/tradingcodex-mcp/files/.tradingcodex/mcp/gateway/README.md +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/tradingcodex-mcp/files/.tradingcodex/mcp/server.py +0 -0
- {tradingcodex-1.2.0 → tradingcodex-1.2.1}/workspace_templates/modules/tradingcodex-mcp/module.json +0 -0
|
@@ -2,6 +2,26 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 1.2.1 - 2026-07-21
|
|
6
|
+
|
|
7
|
+
- Create or refresh the GitHub Release from the exact verified distributions
|
|
8
|
+
and matching changelog section only after protected PyPI publication succeeds.
|
|
9
|
+
- Run Python and frontend CI gates in parallel, verify releases on Apple Silicon
|
|
10
|
+
macOS, retain temporary distributions for seven days, remove the duplicate
|
|
11
|
+
Ubuntu wheel smoke, and reduce upgrade validation to the latest public
|
|
12
|
+
predecessor-to-candidate path.
|
|
13
|
+
|
|
14
|
+
- Let users author Investor Context directly with native Codex while retaining
|
|
15
|
+
lifecycle protection for enable, disable, and clear operations.
|
|
16
|
+
- Judge research evidence by the claim, intended use, and update cadence rather
|
|
17
|
+
than by an official-versus-available source label; preserve valid partial
|
|
18
|
+
fields and fetch only the missing decision-relevant coverage.
|
|
19
|
+
- Remove the generic analysis prompt-submit hook from ordinary requests while
|
|
20
|
+
retaining grant revocation and reserved safety actions.
|
|
21
|
+
- For short-horizon directional questions, resolve the relevant market session
|
|
22
|
+
and include market-wide or macro expertise when transmission could materially
|
|
23
|
+
change direction, range, or scenario weights without imposing a fixed roster.
|
|
24
|
+
|
|
5
25
|
## 1.2.0 - 2026-07-20
|
|
6
26
|
|
|
7
27
|
- Refresh the manual GitHub Pages workflow to the current Node 24 action
|
|
@@ -84,7 +84,8 @@ into every layer. If two layers disagree, fix the owning `docs/` page first.
|
|
|
84
84
|
|
|
85
85
|
- [Validation And Test Plan](validation-and-test-plan.md) — complete validation
|
|
86
86
|
matrix; use the smallest relevant subset during iteration.
|
|
87
|
-
- [Release Readiness](release-readiness.md) — release
|
|
87
|
+
- [Release Readiness](release-readiness.md) — reusable release and publication
|
|
88
|
+
checklist; live status remains in GitHub and PyPI.
|
|
88
89
|
- [Deployment](deployment.md) — packaging, publication, update, and CI policy.
|
|
89
90
|
- [Licensing And Commercialization](licensing-and-commercialization.md) — open
|
|
90
91
|
source, generated workspace, trademark, and legal-review boundaries.
|
|
@@ -31,6 +31,23 @@ they are not the user capability in step 2. For structured prices, OHLCV,
|
|
|
31
31
|
fundamentals, estimates, or macro series, an available direct OpenBB route is
|
|
32
32
|
attempted before that fallback unless the user selected another provider.
|
|
33
33
|
|
|
34
|
+
Evidence is fit to a claim and intended use rather than accepted or rejected by
|
|
35
|
+
provider class. Original public records remain preferred when a claim requires
|
|
36
|
+
source-of-record authority, but attributable non-primary evidence may support
|
|
37
|
+
the fields and periods it actually covers. Missing or ambiguous coverage limits
|
|
38
|
+
only dependent claims and actions; it does not erase independent valid fields
|
|
39
|
+
or prevent factual and screen-grade research. This preserves the distinction
|
|
40
|
+
between evidence usability and decision or execution readiness without adding
|
|
41
|
+
a provider trust score, allowlist, or routing registry.
|
|
42
|
+
|
|
43
|
+
Freshness is relative to the requested as-of, the source's observation or
|
|
44
|
+
publication cadence, the relevant instrument or venue session, and the claim.
|
|
45
|
+
The latest completed period may be the current usable anchor before another
|
|
46
|
+
period exists. Offset-free provider timestamps remain explicitly ambiguous and
|
|
47
|
+
epoch values are converted once; neither is repaired by inventing a timezone.
|
|
48
|
+
A material missing slice that remains obtainable is fetched from the next
|
|
49
|
+
relevant source or returned to its live owner before an evidence-gap abstention.
|
|
50
|
+
|
|
34
51
|
The procedure adds point-in-time context only when structured or historical
|
|
35
52
|
evidence matters to a conclusion. It preserves issuer identity and
|
|
36
53
|
instrument/venue, unit/currency/timezone, raw-versus-adjusted price policy,
|
|
@@ -109,9 +109,9 @@ files are never replaced.
|
|
|
109
109
|
## Maintainer Prerequisites
|
|
110
110
|
|
|
111
111
|
Release verification uses Python 3.11 and Node 22 for the complete source and
|
|
112
|
-
frontend gates.
|
|
113
|
-
|
|
114
|
-
|
|
112
|
+
frontend gates. The release workflow then builds the candidate once, and the
|
|
113
|
+
calculation-runtime matrix reuses that exact wheel on x86-64 Linux, Apple
|
|
114
|
+
Silicon macOS, and native Windows under Python 3.11, 3.12, 3.13, and 3.14.
|
|
115
115
|
Each matrix job provisions the hash-locked runtime and exercises attach,
|
|
116
116
|
doctor, direct package imports, exploratory compatibility, prepared recording,
|
|
117
117
|
and exact reuse. Node remains a maintainer-only build dependency and is not
|
|
@@ -156,7 +156,7 @@ find . -maxdepth 1 -name '*.egg-info' -type d -exec rm -rf {} +
|
|
|
156
156
|
python3.11 -m build
|
|
157
157
|
python3.11 -m twine check dist/*
|
|
158
158
|
python3.11 tests/platform_wheel_smoke.py --wheel-dir dist
|
|
159
|
-
python3.11 tests/release_upgrade_smoke.py --wheel-dir dist
|
|
159
|
+
python3.11 tests/release_upgrade_smoke.py --wheel-dir dist
|
|
160
160
|
```
|
|
161
161
|
|
|
162
162
|
The wheel smoke installs only the built wheel into a clean virtual environment,
|
|
@@ -166,13 +166,13 @@ stdio, exercises the local service, and loads the packaged SPA and assets.
|
|
|
166
166
|
It also provisions the content-addressed calculation runtime, verifies its
|
|
167
167
|
manifest/lock/launcher hashes and exact imports, and exercises prepared and
|
|
168
168
|
exploratory `tcx-calc` modes without importing Django from the runner.
|
|
169
|
-
The release-upgrade smoke
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
169
|
+
The release-upgrade smoke reads the candidate version from the built wheel,
|
|
170
|
+
selects the latest preceding stable release published on PyPI, and verifies
|
|
171
|
+
that single predecessor-to-candidate path. It preserves workspace and runtime
|
|
172
|
+
identity, user-owned state, explicit home, DB, service-address settings, and
|
|
173
|
+
provider approval evidence alongside the refreshed generated contract. Older
|
|
174
|
+
release pairs are not replayed unless a separate migration contract explicitly
|
|
175
|
+
requires them.
|
|
176
176
|
|
|
177
177
|
Harness, role, prompt, skill, hook, policy, MCP, or generated-template changes
|
|
178
178
|
also require the disposable-workspace and Codex-native checks documented in
|
|
@@ -180,8 +180,8 @@ also require the disposable-workspace and Codex-native checks documented in
|
|
|
180
180
|
|
|
181
181
|
## CI And Release Automation
|
|
182
182
|
|
|
183
|
-
`.github/workflows/ci.yml` is test-only.
|
|
184
|
-
|
|
183
|
+
`.github/workflows/ci.yml` is test-only. Parallel Ubuntu jobs run the frontend
|
|
184
|
+
determinism check and the Python 3.11 source/framework gates. It does
|
|
185
185
|
not construct or upload a wheel or source distribution, run release-upgrade or
|
|
186
186
|
native-runtime matrices, or publish anything. Documentation-, guide-, OpenWiki-,
|
|
187
187
|
and asset-only pushes or pull requests skip this workflow. Source-bearing pull
|
|
@@ -198,16 +198,18 @@ requests and pushes still receive the normal source-quality checks.
|
|
|
198
198
|
- the tagged commit is on `origin/main`
|
|
199
199
|
- the wheel and source-distribution filenames carry the same version
|
|
200
200
|
- `dist/` contains exactly that one wheel and one source distribution
|
|
201
|
-
- the built wheel passes the
|
|
201
|
+
- the built wheel passes the prior-release update smoke and the platform matrix
|
|
202
202
|
- the protected `pypi` environment approves Trusted Publishing
|
|
203
203
|
|
|
204
204
|
The release workflow has one build/verification job followed by the required
|
|
205
|
-
Python 3.11-3.14 Linux,
|
|
205
|
+
Python 3.11-3.14 Linux, Apple-Silicon-macOS, and native-Windows calculation-runtime
|
|
206
206
|
matrix. When publication is requested, one protected PyPI job downloads that
|
|
207
|
-
exact artifact and uploads it
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
207
|
+
exact artifact and uploads it. After PyPI succeeds, a GitHub Release job
|
|
208
|
+
downloads the same artifact, uses the matching `CHANGELOG.md` section as its
|
|
209
|
+
notes, and creates or refreshes the tag's wheel and source-distribution assets.
|
|
210
|
+
No job rebuilds the distribution after verification. These distribution and
|
|
211
|
+
platform jobs run only after an explicit `Manual Release` dispatch, never
|
|
212
|
+
because a branch, tag, development commit, or documentation change was pushed.
|
|
211
213
|
|
|
212
214
|
## User Guide Pages
|
|
213
215
|
|
|
@@ -246,7 +248,8 @@ The guide for this repository is published at
|
|
|
246
248
|
5. In GitHub Actions, run `Manual Release` from that tag with the exact
|
|
247
249
|
`release_version`. Use `publish_pypi=true` for an approved publication; use
|
|
248
250
|
the optional `publish_pypi=false` rehearsal when release risk warrants an
|
|
249
|
-
additional hosted build.
|
|
251
|
+
additional hosted build. A successful approved publication also creates or
|
|
252
|
+
refreshes the matching GitHub Release from the verified artifacts.
|
|
250
253
|
|
|
251
254
|
Pushing a branch or tag does not publish by itself.
|
|
252
255
|
|
|
@@ -283,7 +286,7 @@ sh "$SOURCE_ROOT/install.sh" \
|
|
|
283
286
|
On native Windows PowerShell:
|
|
284
287
|
|
|
285
288
|
```powershell
|
|
286
|
-
$ReleaseVersion = "
|
|
289
|
+
$ReleaseVersion = "<released-version>"
|
|
287
290
|
$Workspace = Join-Path $env:TEMP "tcx-pypi-$ReleaseVersion"
|
|
288
291
|
New-Item -ItemType Directory -Force $Workspace | Out-Null
|
|
289
292
|
Set-Location $Workspace
|
|
@@ -130,10 +130,10 @@ paths, reserved namespaces, and managed block markers define the boundary:
|
|
|
130
130
|
| Class | Representative paths | Update contract |
|
|
131
131
|
| --- | --- | --- |
|
|
132
132
|
| Release-managed generated files | `AGENTS.md`, `pyproject.toml`, `tcx`, `tcx.cmd`, `.codex/config.toml`, `.codex/agents/*.toml`, `.codex/hooks/*`, `.agents/skills/tcx-*`, bundled `.tradingcodex/subagents/skills/**/tcx-*`, schemas, policies, launchers, generated indexes, and protocol-owned workspace identity/status files | Template and projection files are listed and hashed in the module lock. The lock cannot inventory itself; the immutable workspace manifest and rebuildable bootstrap/status files are separately protocol-owned. Update re-renders or re-projects these files from the current package and canonical state. Direct edits are unsupported and may be replaced. |
|
|
133
|
-
| User-selected managed overlays | `.tradingcodex/agent-instructions/*.md`, `.
|
|
133
|
+
| User-selected managed overlays | `.tradingcodex/agent-instructions/*.md`, `.agents/skills/strategy-*`, optional role skills, `investment-brains/*` authoring sources, `wiki-packages/*` shareable Wiki sources, `wikis/local`, and installed Brain/Wiki registries, packages, and projections | The owning lifecycle service validates managed state. Update preserves canonical state, user-owned Wiki/Brain sources, local Wiki pages, installed packages, registries, and active projections. |
|
|
134
134
|
| Workflow and research artifacts | `trading/research/`, `trading/reports/`, `trading/forecasts/`, `trading/decisions/`, `trading/evaluations/`, postmortems, lesson state, and per-run provenance | These are workspace state, not release payload. Update preserves them; template-owned `.gitkeep` files in the same directories do not transfer ownership of sibling artifacts. |
|
|
135
135
|
| Local/private runtime state | The external `TRADINGCODEX_HOME`, central DB, ignored session/status/cache/audit files, secrets, credentials, and private Investor Context | These remain outside versionable product state or inside the managed privacy-ignore block. Rebuildable status/cache files may be refreshed; durable authority never moves into the workspace. |
|
|
136
|
-
| Ordinary user files |
|
|
136
|
+
| Ordinary user files | `.tradingcodex/user/*` and any non-reserved path not listed in the generated-file inventory | Native workspace tools may update these files within the active permission profile. Update leaves them untouched. A file placed in another reserved managed namespace may be rejected as a collision rather than adopted or deleted. |
|
|
137
137
|
|
|
138
138
|
In particular, `.tradingcodex/config.yaml` is a generated control input despite
|
|
139
139
|
its name; use the documented customization and lifecycle surfaces instead of
|
|
@@ -289,9 +289,9 @@ Generated workspaces contain:
|
|
|
289
289
|
- no default ticker team: a broad company prompt does not expand to a fixed
|
|
290
290
|
analyst roster. Head Manager derives current questions, dispatches only roles
|
|
291
291
|
justified by them, and reassesses from authenticated evidence
|
|
292
|
-
- compact hook context contains session health or
|
|
293
|
-
Head Manager owns run creation, decision-quality,
|
|
294
|
-
and method choices
|
|
292
|
+
- compact hook context contains session health or explicit current-turn
|
|
293
|
+
authority context only; Head Manager owns run creation, decision-quality,
|
|
294
|
+
forecast, Investor Context, and method choices
|
|
295
295
|
- native role-profile delegation: generated config exposes the nine specialist
|
|
296
296
|
profiles through MultiAgent V2. Head Manager prefers the exact profile, uses
|
|
297
297
|
`followup_task` for owner corrections, and follows the canonical role and
|
|
@@ -823,7 +823,10 @@ Inside a generated workspace, normal `head-manager` and fixed-role analysis
|
|
|
823
823
|
threads inherit the `trading-research` permission profile. They can use normal
|
|
824
824
|
shell, data tools, and credential-free public HTTP, read ordinary
|
|
825
825
|
workspace inputs, and write user-owned files outside `trading/`; disposable
|
|
826
|
-
intermediates belong under `$TRADINGCODEX_SCRATCH`.
|
|
826
|
+
intermediates belong under `$TRADINGCODEX_SCRATCH`. The exact
|
|
827
|
+
`.tradingcodex/user/` subtree is also user-owned and writable so confirmed
|
|
828
|
+
Investor Context can be managed with native file tools; the rest of
|
|
829
|
+
`.tradingcodex/` remains protected. Fixed-role Python
|
|
827
830
|
calculations use only the generated scratch-local `tcx-calc` contract. They
|
|
828
831
|
cannot modify
|
|
829
832
|
`trading/`, generated control files, or the TradingCodex home, DB, attached
|
|
@@ -1357,10 +1360,10 @@ because hook policy is an agent-runtime boundary.
|
|
|
1357
1360
|
detector participates
|
|
1358
1361
|
- compact `SessionStart` health context with service status, viewer location,
|
|
1359
1362
|
and restart posture only
|
|
1360
|
-
-
|
|
1361
|
-
request directly, keeps narrow answers direct, calls
|
|
1362
|
-
only for a new workflow that needs durable provenance,
|
|
1363
|
-
task's run ID when continuing that workflow
|
|
1363
|
+
- ordinary `UserPromptSubmit` turns emit no analysis context. Head Manager
|
|
1364
|
+
interprets the request directly, keeps narrow answers direct, calls
|
|
1365
|
+
`begin_analysis_run` only for a new workflow that needs durable provenance,
|
|
1366
|
+
and reuses the current task's run ID when continuing that workflow
|
|
1364
1367
|
- audit records TradingCodex safety gates, grants, immediate execution, and
|
|
1365
1368
|
service failures. `PreToolUse` also records a sanitized external-tool
|
|
1366
1369
|
observation containing only the exact tool FQN, a secret-free canonical
|
|
@@ -76,7 +76,7 @@ source dumps. This is skill guidance, not a provider router or trust engine.
|
|
|
76
76
|
|
|
77
77
|
The generated hook is deliberately small. It owns:
|
|
78
78
|
|
|
79
|
-
- compact session health and
|
|
79
|
+
- compact session health and explicit current-turn authority context;
|
|
80
80
|
- exact parsing of reserved root action prompts;
|
|
81
81
|
- current-turn proof issue, reservation, and injection for Build, Brain,
|
|
82
82
|
Strategy, and final order service calls;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Release Readiness
|
|
2
|
+
|
|
3
|
+
This is a reusable release checklist, not a live status page. GitHub Actions,
|
|
4
|
+
GitHub Releases, and PyPI own the current state of a particular release.
|
|
5
|
+
|
|
6
|
+
## Candidate Contract
|
|
7
|
+
|
|
8
|
+
- `tradingcodex_service/version.py` is the only package-version source.
|
|
9
|
+
- `CHANGELOG.md` contains a matching dated release section.
|
|
10
|
+
- The release tag is the annotated `v<version>` tag on a commit in `main`.
|
|
11
|
+
- One build produces exactly one wheel and one source distribution. Every
|
|
12
|
+
later job downloads those files instead of rebuilding them.
|
|
13
|
+
|
|
14
|
+
## Required Gates
|
|
15
|
+
|
|
16
|
+
| Area | Evidence required |
|
|
17
|
+
| --- | --- |
|
|
18
|
+
| Source and schema | Full Python suite, Django check, migration dry-run, compileall, and whitespace review pass. |
|
|
19
|
+
| Frontend | Locked tests and build pass; committed static assets are deterministic. |
|
|
20
|
+
| Generated workspace | A disposable development workspace passes doctor, service, launcher, MCP, and affected projection checks. |
|
|
21
|
+
| Native Codex | Prompt, role, skill, hook, or orchestration changes pass the observed acceptance route in the validation plan. |
|
|
22
|
+
| Distribution | Wheel and source distribution pass metadata checks and the clean-wheel smoke. |
|
|
23
|
+
| Platform runtime | The exact wheel passes Python 3.11-3.14 on supported Linux, Apple Silicon macOS, and native Windows runners. |
|
|
24
|
+
| Upgrade | The latest preceding stable PyPI release updates to the candidate while preserving user and service identity. |
|
|
25
|
+
| Publication | Protected PyPI publishing succeeds before the matching GitHub Release is created or refreshed. |
|
|
26
|
+
| Post-publish | A pinned PyPI install passes fresh attach, doctor, metadata, and update checks. |
|
|
27
|
+
|
|
28
|
+
Use the smallest applicable gates while iterating. Run the complete release
|
|
29
|
+
set only for a candidate that is ready to publish.
|
|
30
|
+
|
|
31
|
+
## Upgrade Gate
|
|
32
|
+
|
|
33
|
+
The default and only routine cross-version check is:
|
|
34
|
+
|
|
35
|
+
```text
|
|
36
|
+
latest preceding public release -> candidate release
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
`tests/release_upgrade_smoke.py` reads the candidate version from the built
|
|
40
|
+
wheel and selects the greatest stable PyPI version below it. It does not replay
|
|
41
|
+
every historical release pair. A major-version migration or an explicitly
|
|
42
|
+
supported older direct-upgrade path requires its own documented gate.
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
python3.11 tests/release_upgrade_smoke.py --wheel-dir dist
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
The smoke verifies preserved workspace identity, paper scope, workspace-native
|
|
49
|
+
artifacts, user-owned Brains and Strategies, connector state, runtime home,
|
|
50
|
+
database override, service address, and provider approval evidence.
|
|
51
|
+
|
|
52
|
+
## Publish
|
|
53
|
+
|
|
54
|
+
After the candidate gates pass:
|
|
55
|
+
|
|
56
|
+
1. Merge the release commit to `main` and wait for CI.
|
|
57
|
+
2. Create and push the annotated `v<version>` tag.
|
|
58
|
+
3. In GitHub Actions, dispatch `Manual Release` from that tag with
|
|
59
|
+
`release_version=$RELEASE_VERSION` and `publish_pypi=true`.
|
|
60
|
+
4. Approve the protected `pypi` environment.
|
|
61
|
+
5. Verify the exact PyPI files and GitHub Release, then run the post-publish
|
|
62
|
+
checks from [Deployment](deployment.md).
|
|
63
|
+
|
|
64
|
+
Pushing a branch or tag alone does not publish anything.
|
|
65
|
+
|
|
66
|
+
## Claim Boundary
|
|
67
|
+
|
|
68
|
+
Software release readiness does not establish investment performance, return
|
|
69
|
+
improvement, model superiority, or financial safety. Those claims require
|
|
70
|
+
separate evidence and review.
|
|
@@ -14,7 +14,7 @@ orchestration, handoffs, overlays, and execution separation.
|
|
|
14
14
|
| Fixed-role base prompt | shared child safety, evidence/handoff invariants, compact artifact reads, and gap handling | provider procedure, specialist identity, cross-role scheduling |
|
|
15
15
|
| Fixed-role TOML | concise specialist identity, unique boundary, web posture, tools, and MCP principal | shared evidence procedure, cross-role scheduling, or model policy |
|
|
16
16
|
| Role skills | domain procedure and output quality | role identity or authority |
|
|
17
|
-
| Hooks | compact session health and
|
|
17
|
+
| Hooks | compact session health and current-turn authority context, reserved action parsing, proof injection, and TradingCodex-owned safety-gate audit | natural-language routing, run/session ownership, child lifecycle, role selection, generic shell/network policy, or lane/team/DAG selection |
|
|
18
18
|
| Django services/MCP | run provenance, principal/tool checks, artifact lineage, policy/order/approval/broker/execution/audit state; one protected turn-grant consumer plus no raw final mutation | investment research orchestration or model-granted execution authority |
|
|
19
19
|
|
|
20
20
|
The current Codex authoring contract follows the official
|
|
@@ -143,9 +143,14 @@ readiness limits. It does not impose sentence tags or a template on narrow
|
|
|
143
143
|
answers or intermediate role work.
|
|
144
144
|
|
|
145
145
|
Broad analysis is not a fixed template. A factual company profile may need one
|
|
146
|
-
fundamental role.
|
|
147
|
-
|
|
148
|
-
|
|
146
|
+
fundamental role. For a horizon-sensitive directional forecast, Head Manager
|
|
147
|
+
first resolves the relevant market session and separates instrument-specific
|
|
148
|
+
from market-wide drivers. At one market session or less, market-wide regime or
|
|
149
|
+
cross-asset transmission is presumed material unless the request isolates an
|
|
150
|
+
idiosyncratic event; `macro-analyst` owns that question when it could change
|
|
151
|
+
direction, range, or scenario weights. This is a causal-coverage rule, not a
|
|
152
|
+
fixed macro/technical/news roster. A recommendation or portfolio/risk decision
|
|
153
|
+
usually needs independent judgment. Evidence can change the next role.
|
|
149
154
|
|
|
150
155
|
The shared workflow treats inside-out economics, outside-in peers and base
|
|
151
156
|
rates, upstream/downstream value-chain position, time and expectations, and
|
|
@@ -137,7 +137,7 @@ Control-plane maintainability depends on clear ownership:
|
|
|
137
137
|
and the three native execution protocol bundles;
|
|
138
138
|
`.tradingcodex/subagents/skills/*` owns role procedures and output shape.
|
|
139
139
|
Skill files do not own durable role eligibility or MCP authority.
|
|
140
|
-
- `.codex/hooks/*` owns compact session health and
|
|
140
|
+
- `.codex/hooks/*` owns compact session health and current-turn authority context, exact
|
|
141
141
|
explicit extension syntax reporting, safety-gate audit, and deterministic interception of
|
|
142
142
|
the three root-native execution skills plus normalized first-meaningful-line
|
|
143
143
|
`$tcx-build`, `$tcx-brain`, `$tcx-wiki`, and `$tcx-strategy` contracts. It does not classify natural language, select roles,
|
|
@@ -44,7 +44,7 @@ is not a Head Manager entrypoint.
|
|
|
44
44
|
| --- | --- | --- |
|
|
45
45
|
| `tcx-plan` | Clarify scope, constraints, action boundaries, and stop conditions before an immediate or recurring task. | Compact user mandate and missing-field or blocked posture; never a server dispatch plan or selected team. |
|
|
46
46
|
| `tcx-automate` | Create or update Codex app Scheduled Tasks for simple research, monitoring, recurring analysis, portfolio/status review, order drafting, assisted execution, optional turn-authorized execution, or explicitly delegated turn-authorized Build work. | Schedule plus a durable runtime prompt that invokes the actual work skill, not `tcx-automate` recursively. |
|
|
47
|
-
| `tcx-investor-context` | Interview and
|
|
47
|
+
| `tcx-investor-context` | Interview and manage workspace suitability context as an ordinary user-owned file. | Confirmed saved values, default application state, and remaining gaps. |
|
|
48
48
|
|
|
49
49
|
## Entrypoint Rules
|
|
50
50
|
|
|
@@ -107,11 +107,10 @@ answer ends with one concise `Wiki used:` line containing only the
|
|
|
107
107
|
workspace-relative paths of pages actually used. Current facts that support an
|
|
108
108
|
investment conclusion still require normal Source Gate verification.
|
|
109
109
|
|
|
110
|
-
`tcx-investor-context` interviews
|
|
111
|
-
workspace-local suitability file
|
|
112
|
-
|
|
113
|
-
terminal
|
|
114
|
-
Build shell gate. Its persistent enable/disable state is separate from skill availability,
|
|
110
|
+
`tcx-investor-context` reads, interviews for, previews, and updates the optional
|
|
111
|
+
workspace-local suitability file with native workspace file tools after user
|
|
112
|
+
confirmation. This ordinary user-owned file does not require a Build turn, MCP
|
|
113
|
+
service, or terminal handoff. Its persistent enable/disable state is separate from skill availability,
|
|
115
114
|
strategy rules, and internal paper account scope. It does not run investment
|
|
116
115
|
analysis or grant authority. Native run binding follows the saved workspace default;
|
|
117
116
|
the read-only viewer offers no one-run override and never rewrites the file.
|
|
@@ -293,21 +293,22 @@ flags and fixed read-only Codex inventory subprocess handling.
|
|
|
293
293
|
|
|
294
294
|
Calculation runtime release coverage must additionally resolve the complete
|
|
295
295
|
hash-locked wheel set for Python 3.11, 3.12, 3.13, and 3.14 on supported
|
|
296
|
-
macOS, Linux, and native Windows x86-64 targets. Every
|
|
297
|
-
runtime manifest, launcher hash, exact package imports, one
|
|
298
|
-
and one exploratory compatibility run. Missing wheels must
|
|
299
|
-
workspace mutation; validation must never permit a source
|
|
296
|
+
Apple Silicon macOS, Linux x86-64, and native Windows x86-64 targets. Every
|
|
297
|
+
target verifies the runtime manifest, launcher hash, exact package imports, one
|
|
298
|
+
prepared envelope, and one exploratory compatibility run. Missing wheels must
|
|
299
|
+
fail attach before workspace mutation; validation must never permit a source
|
|
300
|
+
build as fallback.
|
|
300
301
|
|
|
301
302
|
After building a wheel, run:
|
|
302
303
|
|
|
303
304
|
```bash
|
|
304
305
|
python tests/platform_wheel_smoke.py --wheel-dir dist
|
|
305
|
-
python tests/release_upgrade_smoke.py --wheel-dir dist
|
|
306
|
+
python tests/release_upgrade_smoke.py --wheel-dir dist
|
|
306
307
|
```
|
|
307
308
|
|
|
308
309
|
GitHub Actions keeps the complete Python/Django suite on Ubuntu/Python 3.11 and
|
|
309
310
|
then runs that same clean-wheel helper for Python 3.11-3.14 on x86-64 Linux,
|
|
310
|
-
|
|
311
|
+
Apple Silicon macOS, and native Windows. Release publication depends on the full matrix.
|
|
311
312
|
The helper uses
|
|
312
313
|
`tempfile`, a space-containing wheel path and workspace, parses root plus all
|
|
313
314
|
role TOML and generated YAML/JSON, runs `tcx` on POSIX or `tcx.cmd` on Windows,
|
|
@@ -645,7 +646,7 @@ Scenarios should include:
|
|
|
645
646
|
- explicit investor-context updates persist to the workspace Markdown file;
|
|
646
647
|
enable/disable changes the default, native run binding follows that default,
|
|
647
648
|
while the viewer offers no one-run override
|
|
648
|
-
- Codex `UserPromptSubmit` generated hooks
|
|
649
|
+
- Codex `UserPromptSubmit` generated hooks emit no context for ordinary prompts
|
|
649
650
|
and never classify meaning, choose roles, or create a run; `begin_analysis_run` seals enabled
|
|
650
651
|
workspace Investor Context and an exact explicitly invoked `$strategy-*`
|
|
651
652
|
before Head Manager dispatches any role
|
|
@@ -923,7 +924,10 @@ Also install the built wheel in a clean environment and run:
|
|
|
923
924
|
|
|
924
925
|
```bash
|
|
925
926
|
python tests/platform_wheel_smoke.py --wheel-dir dist
|
|
926
|
-
python tests/release_upgrade_smoke.py --wheel-dir dist
|
|
927
|
+
python tests/release_upgrade_smoke.py --wheel-dir dist
|
|
927
928
|
```
|
|
928
929
|
|
|
930
|
+
The upgrade smoke selects only the latest stable PyPI release preceding the
|
|
931
|
+
candidate version. Historical release pairs are not replayed by default.
|
|
932
|
+
|
|
929
933
|
Detailed release workflow lives in [deployment.md](./deployment.md).
|
|
@@ -329,7 +329,8 @@ def test_generated_hook_leaves_native_child_lifecycle_to_codex(workspace: Path)
|
|
|
329
329
|
source = hook.read_text(encoding="utf-8")
|
|
330
330
|
hooks = json.loads((workspace / ".codex/hooks.json").read_text(encoding="utf-8"))["hooks"]
|
|
331
331
|
assert set(hooks) == {"SessionStart", "UserPromptSubmit", "PreToolUse", "PermissionRequest", "Stop"}
|
|
332
|
-
assert "
|
|
332
|
+
assert "analysis_prompt_context" not in source
|
|
333
|
+
assert "tradingcodex-agentic-analysis" not in source
|
|
333
334
|
assert "classify_starter_request" not in source
|
|
334
335
|
assert "record_workflow_plan" not in source
|
|
335
336
|
assert "dispatch_tasks_for_state" not in source
|
|
@@ -344,14 +345,7 @@ def test_generated_hook_leaves_native_child_lifecycle_to_codex(workspace: Path)
|
|
|
344
345
|
env={**os.environ, "PYTHONPATH": str(ROOT)},
|
|
345
346
|
check=True,
|
|
346
347
|
)
|
|
347
|
-
|
|
348
|
-
assert context["orchestration_owner"] == "codex-head-manager"
|
|
349
|
-
assert context["run_start_tool"] == "begin_analysis_run"
|
|
350
|
-
assert "run_status" not in context
|
|
351
|
-
assert "workflow_run_id" not in context
|
|
352
|
-
assert "reuse its existing workflow_run_id" in context["planning_instruction"]
|
|
353
|
-
assert "lane" not in context
|
|
354
|
-
assert "selected_team" not in context
|
|
348
|
+
assert prompt.stdout == ""
|
|
355
349
|
assert not (workspace / ".tradingcodex/mainagent/session-workflow-runs.json").exists()
|
|
356
350
|
|
|
357
351
|
def pre_spawn(tool_input: dict[str, object]) -> dict[str, object] | None:
|
|
@@ -473,6 +467,13 @@ def test_generated_contract_inherits_root_model_and_keeps_role_profiles_optional
|
|
|
473
467
|
assert "causal cruxes" in flat_skill
|
|
474
468
|
assert "dependent repetition is not confirmation" in flat_skill
|
|
475
469
|
assert "likely to change the answer or readiness" in flat_skill
|
|
470
|
+
assert "material missing slice remains obtainable" in flat_skill
|
|
471
|
+
assert "one bounded follow-up" in flat_skill
|
|
472
|
+
assert "resolve the relevant market session" in flat_skill
|
|
473
|
+
assert "separate instrument-specific from market-wide drivers" in flat_skill
|
|
474
|
+
assert "At one market session or less" in flat_skill
|
|
475
|
+
assert "change direction, range, or scenario weights" in flat_skill
|
|
476
|
+
assert "fixed forecast roster" in flat_skill
|
|
476
477
|
assert "ALL_TOOLS.filter" not in head + fixed_role + skill
|
|
477
478
|
assert "record_workflow_plan" not in head + role + skill
|
|
478
479
|
|
|
@@ -98,9 +98,7 @@ def test_generated_workspace_connects_mock_broker(
|
|
|
98
98
|
) -> None:
|
|
99
99
|
workspace, env_extra = init_workspace(tmp_path)
|
|
100
100
|
gate = hook_context(workspace, "Connect mock-json broker. No order, no trading, do not read secrets.", env_extra)
|
|
101
|
-
assert gate is
|
|
102
|
-
assert gate["orchestration_owner"] == "codex-head-manager"
|
|
103
|
-
assert "heuristic_lane" not in gate
|
|
101
|
+
assert gate is None
|
|
104
102
|
|
|
105
103
|
write_mock_provider(
|
|
106
104
|
workspace,
|
|
@@ -217,13 +215,7 @@ def test_generated_workspace_codex_cli_user_scenario_matrix(tmp_path: Path) -> N
|
|
|
217
215
|
]
|
|
218
216
|
for index, prompt in enumerate(prompt_cases):
|
|
219
217
|
context = hook_context(workspace, prompt, env_extra, via_hooks_json=index == 0)
|
|
220
|
-
assert context is
|
|
221
|
-
assert context["orchestration_owner"] == "codex-head-manager"
|
|
222
|
-
assert context["run_start_tool"] == "begin_analysis_run"
|
|
223
|
-
assert "heuristic_lane" not in context
|
|
224
|
-
assert "heuristic_roles" not in context
|
|
225
|
-
assert "starter_prompt" not in context
|
|
226
|
-
assert len(json.dumps(context, ensure_ascii=False)) < 1800
|
|
218
|
+
assert context is None
|
|
227
219
|
|
|
228
220
|
assert not (workspace / "trading" / "audit" / "codex-hooks.jsonl").exists()
|
|
229
221
|
|
|
@@ -463,11 +455,7 @@ def test_long_multi_subagent_artifacts_keep_context_compact_without_lifecycle_st
|
|
|
463
455
|
|
|
464
456
|
for round_index, (prompt, roles) in enumerate(scenarios, start=1):
|
|
465
457
|
context = hook_context(workspace, prompt, env_extra)
|
|
466
|
-
assert context is
|
|
467
|
-
assert context["orchestration_owner"] == "codex-head-manager"
|
|
468
|
-
assert "heuristic_lane" not in context
|
|
469
|
-
assert "starter_prompt" not in context
|
|
470
|
-
assert len(json.dumps(context, ensure_ascii=False)) < 1600
|
|
458
|
+
assert context is None
|
|
471
459
|
|
|
472
460
|
for role in roles:
|
|
473
461
|
artifact_id = f"long-{round_index}-{role}"
|
|
@@ -81,3 +81,11 @@ def test_full_desktop_shell_does_not_double_count_viewport_gutters() -> None:
|
|
|
81
81
|
assert "max-width: 1460px" in shell_rule
|
|
82
82
|
assert "padding: 2.75rem 1.5rem" in shell_rule
|
|
83
83
|
assert "calc((100vw - 1460px) / 2)" not in shell_rule
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def test_investor_context_guide_uses_direct_workspace_updates() -> None:
|
|
87
|
+
page = _html(GUIDEBOOK / "skill-investor-context.html")
|
|
88
|
+
|
|
89
|
+
assert "Codex updates the workspace-local Investor Context file directly" in page
|
|
90
|
+
assert "need neither a Build turn nor a terminal command" in page
|
|
91
|
+
assert "gives one exact user-terminal command" not in page
|
|
@@ -298,7 +298,7 @@ def test_artifacts_and_decision_memory_derive_immutable_brain_lineage(
|
|
|
298
298
|
assert get_decision_snapshot(workspace, "brain-decision")["verification_status"] == "verified"
|
|
299
299
|
|
|
300
300
|
|
|
301
|
-
def
|
|
301
|
+
def test_generated_hook_leaves_explicit_brain_binding_to_analysis_run(
|
|
302
302
|
brain_workspace: tuple[Path, dict[str, object]],
|
|
303
303
|
) -> None:
|
|
304
304
|
workspace, _installed = brain_workspace
|
|
@@ -312,11 +312,7 @@ def test_generated_hook_reports_explicit_syntax_without_semantic_routing(
|
|
|
312
312
|
env={**os.environ, "PYTHONPATH": str(ROOT)},
|
|
313
313
|
check=True,
|
|
314
314
|
)
|
|
315
|
-
|
|
316
|
-
assert context["investment_brain_id"] == BRAIN_ID
|
|
317
|
-
assert context["run_start_tool"] == "begin_analysis_run"
|
|
318
|
-
assert "selected_team" not in context
|
|
319
|
-
assert "DAG" not in context
|
|
315
|
+
assert result.stdout == ""
|
|
320
316
|
|
|
321
317
|
|
|
322
318
|
def test_native_skill_loading_and_run_binding_own_brain_references(
|
|
@@ -335,8 +331,7 @@ def test_native_skill_loading_and_run_binding_own_brain_references(
|
|
|
335
331
|
env={**os.environ, "PYTHONPATH": str(ROOT)},
|
|
336
332
|
check=True,
|
|
337
333
|
)
|
|
338
|
-
|
|
339
|
-
assert "workflow_run_id" not in context
|
|
334
|
+
assert submitted.stdout == ""
|
|
340
335
|
run_id = "analysis-brain-native-skill"
|
|
341
336
|
run = begin_analysis_run(
|
|
342
337
|
workspace,
|
|
@@ -480,6 +480,7 @@ def test_generated_hook_covers_current_exec_tool_names_and_disables_unified_exec
|
|
|
480
480
|
assert research["filesystem"][":workspace_roots"][".git"] == "read"
|
|
481
481
|
assert research["filesystem"][":workspace_roots"][".gitignore"] == "read"
|
|
482
482
|
assert research["filesystem"][":workspace_roots"][".agents"] == "read"
|
|
483
|
+
assert research["filesystem"][":workspace_roots"][".tradingcodex/user"] == "write"
|
|
483
484
|
assert research["filesystem"][":workspace_roots"]["AGENTS.md"] == "read"
|
|
484
485
|
assert research["filesystem"][":workspace_roots"]["tcx"] == "read"
|
|
485
486
|
assert research["filesystem"][":workspace_roots"]["tcx.cmd"] == "read"
|
|
@@ -497,6 +498,7 @@ def test_generated_hook_covers_current_exec_tool_names_and_disables_unified_exec
|
|
|
497
498
|
assert build["filesystem"][":workspace_roots"]["."] == "write"
|
|
498
499
|
assert build["filesystem"][":workspace_roots"][".tradingcodex/cli.py"] == "read"
|
|
499
500
|
assert build["filesystem"][":workspace_roots"][".tradingcodex/workspace.json"] == "read"
|
|
501
|
+
assert build["filesystem"][":workspace_roots"][".tradingcodex/user"] == "write"
|
|
500
502
|
assert build["filesystem"][":workspace_roots"]["trading/reports"] == "deny"
|
|
501
503
|
assert build["network"] == {
|
|
502
504
|
"enabled": True,
|