tradingcodex 2.1.0__tar.gz → 2.1.2__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.
Files changed (409) hide show
  1. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/CHANGELOG.md +19 -0
  2. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/PKG-INFO +1 -1
  3. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/docs/deployment.md +2 -1
  4. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/docs/generated-workspaces.md +6 -4
  5. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/docs/harness.md +9 -4
  6. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/docs/roles-skills-and-workflows.md +52 -27
  7. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/docs/safety-policy-and-execution.md +22 -17
  8. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_build_turn_grant.py +1 -1
  9. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_codex_native_orchestration.py +10 -2
  10. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_investment_brain_prompt_layers.py +4 -0
  11. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_investment_brain_provenance.py +10 -0
  12. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_investor_context.py +10 -0
  13. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_native_execution_gateway.py +20 -1
  14. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_order_turn_grant.py +3 -1
  15. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_release_contract.py +1 -1
  16. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_source_snapshot_agent_contract.py +6 -0
  17. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex.egg-info/PKG-INFO +1 -1
  18. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_cli/commands/doctor.py +3 -2
  19. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/execution_gateway.py +26 -12
  20. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/skill_invocations.py +54 -21
  21. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/mcp_runtime.py +3 -2
  22. tradingcodex-2.1.2/tradingcodex_service/version.py +1 -0
  23. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/codex-base/files/.codex/prompts/base_instructions/fixed-role.md +13 -3
  24. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/codex-base/files/.codex/prompts/base_instructions/head-manager.md +10 -2
  25. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/judgment-reviewer.toml +12 -9
  26. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-allow/SKILL.md +10 -11
  27. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-cancel/SKILL.md +4 -3
  28. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-submit/SKILL.md +4 -3
  29. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-workflow/SKILL.md +10 -2
  30. tradingcodex-2.1.2/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/judgment-reviewer/tcx-judgment/SKILL.md +106 -0
  31. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-evidence/SKILL.md +7 -1
  32. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-source-gate/SKILL.md +16 -1
  33. tradingcodex-2.1.0/tradingcodex_service/version.py +0 -1
  34. tradingcodex-2.1.0/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/judgment-reviewer/tcx-judgment/SKILL.md +0 -72
  35. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/CONTRIBUTING.md +0 -0
  36. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/LICENSE +0 -0
  37. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/MANIFEST.in +0 -0
  38. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/NOTICE +0 -0
  39. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/README.md +0 -0
  40. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/TRADEMARKS.md +0 -0
  41. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/__init__.py +0 -0
  42. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/audit/__init__.py +0 -0
  43. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/audit/admin.py +0 -0
  44. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/audit/apps.py +0 -0
  45. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/audit/migrations/0001_v1_initial.py +0 -0
  46. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/audit/migrations/__init__.py +0 -0
  47. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/audit/models.py +0 -0
  48. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/harness/__init__.py +0 -0
  49. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/harness/admin.py +0 -0
  50. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/harness/apps.py +0 -0
  51. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/harness/migrations/0001_v1_initial.py +0 -0
  52. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/harness/migrations/__init__.py +0 -0
  53. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/harness/models.py +0 -0
  54. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/harness/templatetags/__init__.py +0 -0
  55. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/integrations/__init__.py +0 -0
  56. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/integrations/admin.py +0 -0
  57. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/integrations/apps.py +0 -0
  58. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/integrations/migrations/0001_v1_initial.py +0 -0
  59. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/integrations/migrations/__init__.py +0 -0
  60. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/integrations/models.py +0 -0
  61. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/mcp/__init__.py +0 -0
  62. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/mcp/admin.py +0 -0
  63. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/mcp/apps.py +0 -0
  64. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/mcp/migrations/0001_v1_initial.py +0 -0
  65. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/mcp/migrations/0002_remove_external_mcp_gate.py +0 -0
  66. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/mcp/migrations/__init__.py +0 -0
  67. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/mcp/models.py +0 -0
  68. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/mcp/services.py +0 -0
  69. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/orders/__init__.py +0 -0
  70. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/orders/admin.py +0 -0
  71. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/orders/apps.py +0 -0
  72. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/orders/migrations/0001_v1_initial.py +0 -0
  73. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/orders/migrations/__init__.py +0 -0
  74. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/orders/models.py +0 -0
  75. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/orders/services.py +0 -0
  76. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/policy/__init__.py +0 -0
  77. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/policy/admin.py +0 -0
  78. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/policy/apps.py +0 -0
  79. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/policy/migrations/0001_v1_initial.py +0 -0
  80. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/policy/migrations/__init__.py +0 -0
  81. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/policy/models.py +0 -0
  82. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/policy/services.py +0 -0
  83. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/portfolio/__init__.py +0 -0
  84. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/portfolio/admin.py +0 -0
  85. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/portfolio/apps.py +0 -0
  86. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/portfolio/migrations/0001_v1_initial.py +0 -0
  87. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/portfolio/migrations/__init__.py +0 -0
  88. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/apps/portfolio/models.py +0 -0
  89. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/assets/tradingcodex-banner-v1.png +0 -0
  90. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/assets/tradingcodex-banner-v2.png +0 -0
  91. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/assets/tradingcodex-banner-v3.png +0 -0
  92. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/assets/tradingcodex-banner.svg +0 -0
  93. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/docs/README.md +0 -0
  94. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/docs/architecture.md +0 -0
  95. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/docs/codex-native-orchestration.md +0 -0
  96. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/docs/data-sources-and-openbb.md +0 -0
  97. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/docs/decision-memory.md +0 -0
  98. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/docs/financial-workflow-references.md +0 -0
  99. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/docs/guardrails.md +0 -0
  100. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/docs/improvement-loop.md +0 -0
  101. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/docs/interfaces-and-surfaces.md +0 -0
  102. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/docs/investment-brain-plugins.md +0 -0
  103. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/docs/knowledge-wikis.md +0 -0
  104. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/docs/licensing-and-commercialization.md +0 -0
  105. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/docs/product-direction.md +0 -0
  106. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/docs/release-readiness.md +0 -0
  107. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/docs/research-memory-and-artifacts.md +0 -0
  108. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/docs/user-facing-skills.md +0 -0
  109. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/docs/validation-and-test-plan.md +0 -0
  110. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/frontend/index.html +0 -0
  111. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/frontend/package-lock.json +0 -0
  112. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/frontend/package.json +0 -0
  113. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/frontend/src/App.tsx +0 -0
  114. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/frontend/src/ViewerShell.tsx +0 -0
  115. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/frontend/src/api.ts +0 -0
  116. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/frontend/src/domain.ts +0 -0
  117. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/frontend/src/features/EpisodesPage.tsx +0 -0
  118. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/frontend/src/features/LibraryPage.tsx +0 -0
  119. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/frontend/src/features/SystemPage.tsx +0 -0
  120. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/frontend/src/features/WikiPage.tsx +0 -0
  121. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/frontend/src/main.tsx +0 -0
  122. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/frontend/src/navigation.js +0 -0
  123. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/frontend/src/navigation.test.js +0 -0
  124. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/frontend/src/styles.css +0 -0
  125. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/frontend/src/ui.tsx +0 -0
  126. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/frontend/src/viewer-data.js +0 -0
  127. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/frontend/tsconfig.json +0 -0
  128. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/frontend/vite.config.ts +0 -0
  129. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/install.sh +0 -0
  130. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/installation.md +0 -0
  131. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/pyproject.toml +0 -0
  132. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/setup.cfg +0 -0
  133. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_artifact_authentication.py +0 -0
  134. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_artifact_catalog.py +0 -0
  135. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_artifact_v2.py +0 -0
  136. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_brain_skill.py +0 -0
  137. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_broker_center_prd.py +0 -0
  138. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_build_contract_metadata.py +0 -0
  139. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_build_hook.py +0 -0
  140. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_calculation_runner.py +0 -0
  141. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_clean_v1_cli_audit.py +0 -0
  142. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_codex_capabilities.py +0 -0
  143. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_codex_cli_compat.py +0 -0
  144. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_codex_cli_contract.py +0 -0
  145. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_datasets.py +0 -0
  146. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_decision_memory_core.py +0 -0
  147. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_dev_bootstrap.py +0 -0
  148. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_dynamic_artifact_quality.py +0 -0
  149. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_e2e_user_scenarios.py +0 -0
  150. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_evaluation_lab_hardening.py +0 -0
  151. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_evaluation_profiles.py +0 -0
  152. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_guidebook_contract.py +0 -0
  153. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_investment_analysis.py +0 -0
  154. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_investment_brain_cli.py +0 -0
  155. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_investment_brain_registry.py +0 -0
  156. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_knowledge_wikis.py +0 -0
  157. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_mcp_broker_release_health.py +0 -0
  158. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_platform_runtime.py +0 -0
  159. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_provider_source_approval.py +0 -0
  160. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_research_forecast_surfaces.py +0 -0
  161. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_research_object_catalog.py +0 -0
  162. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_research_objects.py +0 -0
  163. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_research_spec_profiles.py +0 -0
  164. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_runtime_paths.py +0 -0
  165. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_runtime_profile.py +0 -0
  166. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_security_invariants.py +0 -0
  167. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_skill_runtime_boundaries.py +0 -0
  168. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_v1_migrations.py +0 -0
  169. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_v1_state_integrity.py +0 -0
  170. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_viewer.py +0 -0
  171. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tests/test_workspace_git_contract.py +0 -0
  172. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex.egg-info/SOURCES.txt +0 -0
  173. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex.egg-info/dependency_links.txt +0 -0
  174. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex.egg-info/entry_points.txt +0 -0
  175. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex.egg-info/requires.txt +0 -0
  176. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex.egg-info/top_level.txt +0 -0
  177. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_cli/__init__.py +0 -0
  178. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_cli/__main__.py +0 -0
  179. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_cli/calculation-runtime-lock.json +0 -0
  180. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_cli/calculation-runtime-requirements.txt +0 -0
  181. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_cli/calculation_runner.py +0 -0
  182. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_cli/commands/__init__.py +0 -0
  183. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_cli/commands/bootstrap.py +0 -0
  184. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_cli/commands/build.py +0 -0
  185. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_cli/commands/connectors.py +0 -0
  186. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_cli/commands/data_sources.py +0 -0
  187. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_cli/commands/db.py +0 -0
  188. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_cli/commands/decision.py +0 -0
  189. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_cli/commands/evaluation.py +0 -0
  190. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_cli/commands/forecast.py +0 -0
  191. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_cli/commands/home.py +0 -0
  192. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_cli/commands/investment_brains.py +0 -0
  193. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_cli/commands/investor_context.py +0 -0
  194. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_cli/commands/mcp.py +0 -0
  195. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_cli/commands/orders.py +0 -0
  196. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_cli/commands/policy.py +0 -0
  197. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_cli/commands/profile.py +0 -0
  198. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_cli/commands/research.py +0 -0
  199. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_cli/commands/skills.py +0 -0
  200. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_cli/commands/strategies.py +0 -0
  201. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_cli/commands/subagents.py +0 -0
  202. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_cli/commands/utils.py +0 -0
  203. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_cli/commands/wikis.py +0 -0
  204. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_cli/commands/workflow.py +0 -0
  205. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_cli/commands/workspaces.py +0 -0
  206. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_cli/generator.py +0 -0
  207. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_cli/mcp_stdio.py +0 -0
  208. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_cli/package_source.py +0 -0
  209. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_cli/service_autostart.py +0 -0
  210. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_cli/startup_status.py +0 -0
  211. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_cli/versioning.py +0 -0
  212. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/__init__.py +0 -0
  213. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/admin.py +0 -0
  214. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/api.py +0 -0
  215. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/__init__.py +0 -0
  216. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/agents.py +0 -0
  217. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/analysis_runs.py +0 -0
  218. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/artifact_bindings.py +0 -0
  219. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/artifact_catalog.py +0 -0
  220. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/artifact_quality.py +0 -0
  221. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/artifact_v2.py +0 -0
  222. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/audit.py +0 -0
  223. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/brokers.py +0 -0
  224. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/build_gateway.py +0 -0
  225. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/calculations.py +0 -0
  226. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/codex_capabilities.py +0 -0
  227. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/common.py +0 -0
  228. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/data_sources.py +0 -0
  229. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/datasets.py +0 -0
  230. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/decision_episodes.py +0 -0
  231. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/decision_packages.py +0 -0
  232. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/evaluation_lab.py +0 -0
  233. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/forecasting.py +0 -0
  234. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/git_subprocess.py +0 -0
  235. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/harness.py +0 -0
  236. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/health.py +0 -0
  237. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/investment_analysis.py +0 -0
  238. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/investment_brains.py +0 -0
  239. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/investor_context.py +0 -0
  240. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/judgment_postmortems.py +0 -0
  241. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/judgments.py +0 -0
  242. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/knowledge_wikis.py +0 -0
  243. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/managed_package_sources.py +0 -0
  244. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/markdown_preview.py +0 -0
  245. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/operator_authority.py +0 -0
  246. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/orders.py +0 -0
  247. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/policy.py +0 -0
  248. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/portfolio.py +0 -0
  249. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/postmortems.py +0 -0
  250. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/research.py +0 -0
  251. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/research_object_catalog.py +0 -0
  252. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/research_objects.py +0 -0
  253. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/research_specs.py +0 -0
  254. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/runtime.py +0 -0
  255. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/source_snapshots.py +0 -0
  256. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/viewer.py +0 -0
  257. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/wiki_viewer.py +0 -0
  258. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/workspace_git.py +0 -0
  259. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/application/workspaces.py +0 -0
  260. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/asgi.py +0 -0
  261. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/log_safety.py +0 -0
  262. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/runtime_profile.py +0 -0
  263. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/settings.py +0 -0
  264. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/static/tradingcodex_admin/favicon.svg +0 -0
  265. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/static/tradingcodex_web/assets/allPaths-DTYZmYwK.js +0 -0
  266. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/static/tradingcodex_web/assets/allPathsLoader-DcM0tTg5.js +0 -0
  267. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/static/tradingcodex_web/assets/index-Bb8LR_4w.css +0 -0
  268. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/static/tradingcodex_web/assets/index-C4QYjUvS.js +0 -0
  269. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/static/tradingcodex_web/assets/paths-BOuWfKow.js +0 -0
  270. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/static/tradingcodex_web/assets/paths-CI3Rjsyg.js +0 -0
  271. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/static/tradingcodex_web/assets/splitPathsBySizeLoader-B1K4iYsq.js +0 -0
  272. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/static/tradingcodex_web/index.html +0 -0
  273. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/urls.py +0 -0
  274. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/viewer_api.py +0 -0
  275. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/web.py +0 -0
  276. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/tradingcodex_service/wsgi.py +0 -0
  277. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/__init__.py +0 -0
  278. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/audit/files/.tradingcodex/audit/README.md +0 -0
  279. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/audit/files/trading/audit/.gitkeep +0 -0
  280. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/audit/module.json +0 -0
  281. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/codex-base/files/.codex/config.toml +0 -0
  282. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/codex-base/files/.codex/hooks/tradingcodex_hook.py +0 -0
  283. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/codex-base/files/.codex/hooks.json +0 -0
  284. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/codex-base/files/.codex/rules/tradingcodex.rules +0 -0
  285. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/codex-base/files/.tradingcodex/cli.py +0 -0
  286. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/codex-base/files/.tradingcodex/config.yaml +0 -0
  287. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/codex-base/files/AGENTS.md +0 -0
  288. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/codex-base/files/pyproject.toml +0 -0
  289. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/codex-base/files/tcx +0 -0
  290. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/codex-base/files/tcx-calc +0 -0
  291. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/codex-base/files/tcx-calc.cmd +0 -0
  292. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/codex-base/files/tcx.cmd +0 -0
  293. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/codex-base/module.json +0 -0
  294. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/policies/restricted-list.yaml +0 -0
  295. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/approval_receipt.schema.json +0 -0
  296. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/audit_event.schema.json +0 -0
  297. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/evidence_pack.schema.json +0 -0
  298. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/execution_result.schema.json +0 -0
  299. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/fundamental_report.schema.json +0 -0
  300. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/news_report.schema.json +0 -0
  301. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/order_ticket.schema.json +0 -0
  302. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/portfolio_review.schema.json +0 -0
  303. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/postmortem_report.schema.json +0 -0
  304. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/research_artifact.schema.json +0 -0
  305. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/risk_report.schema.json +0 -0
  306. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/technical_report.schema.json +0 -0
  307. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/thesis.schema.json +0 -0
  308. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/valuation.schema.json +0 -0
  309. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/enforcement-guardrails/module.json +0 -0
  310. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/fundamental-analyst.toml +0 -0
  311. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/instrument-analyst.toml +0 -0
  312. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/macro-analyst.toml +0 -0
  313. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/news-analyst.toml +0 -0
  314. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/portfolio-manager.toml +0 -0
  315. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/risk-manager.toml +0 -0
  316. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/technical-analyst.toml +0 -0
  317. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/valuation-analyst.toml +0 -0
  318. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/fixed-subagents/files/.tradingcodex/mainagent/skill-change-proposals/.gitkeep +0 -0
  319. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/fixed-subagents/module.json +0 -0
  320. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/guidance-guardrails/files/.tradingcodex/guidance/guardrails.md +0 -0
  321. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/guidance-guardrails/files/.tradingcodex/guidance/task-quality-checklist.md +0 -0
  322. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/guidance-guardrails/module.json +0 -0
  323. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/information-barriers/files/.tradingcodex/secrets.md +0 -0
  324. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/information-barriers/files/trading/forecasts/.gitkeep +0 -0
  325. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/information-barriers/files/trading/market-data/.gitkeep +0 -0
  326. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/information-barriers/files/trading/portfolio/.gitkeep +0 -0
  327. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/information-barriers/files/trading/reports/fundamental/.gitkeep +0 -0
  328. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/information-barriers/files/trading/reports/instrument/.gitkeep +0 -0
  329. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/information-barriers/files/trading/reports/macro/.gitkeep +0 -0
  330. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/information-barriers/files/trading/reports/news/.gitkeep +0 -0
  331. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/information-barriers/files/trading/reports/policy/.gitkeep +0 -0
  332. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/information-barriers/files/trading/reports/portfolio/.gitkeep +0 -0
  333. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/information-barriers/files/trading/reports/postmortem/.gitkeep +0 -0
  334. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/information-barriers/files/trading/reports/risk/.gitkeep +0 -0
  335. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/information-barriers/files/trading/reports/technical/.gitkeep +0 -0
  336. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/information-barriers/files/trading/reports/valuation/.gitkeep +0 -0
  337. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/information-barriers/files/trading/research/.gitkeep +0 -0
  338. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/information-barriers/module.json +0 -0
  339. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/paper-trading/module.json +0 -0
  340. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-automate/SKILL.md +0 -0
  341. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-automate/agents/openai.yaml +0 -0
  342. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-brain/SKILL.md +0 -0
  343. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-brain/agents/openai.yaml +0 -0
  344. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-brain/references/bundle-contract.md +0 -0
  345. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-build/SKILL.md +0 -0
  346. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-build/agents/openai.yaml +0 -0
  347. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-investor-context/SKILL.md +0 -0
  348. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-investor-context/agents/openai.yaml +0 -0
  349. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-memory/SKILL.md +0 -0
  350. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-memory/agents/openai.yaml +0 -0
  351. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-allow/agents/openai.yaml +0 -0
  352. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-cancel/agents/openai.yaml +0 -0
  353. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-submit/agents/openai.yaml +0 -0
  354. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-plan/SKILL.md +0 -0
  355. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-plan/agents/openai.yaml +0 -0
  356. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-server/SKILL.md +0 -0
  357. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-server/agents/openai.yaml +0 -0
  358. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-strategy/SKILL.md +0 -0
  359. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-strategy/agents/openai.yaml +0 -0
  360. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-wiki/SKILL.md +0 -0
  361. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-wiki/agents/openai.yaml +0 -0
  362. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-wiki/references/bundle-contract.md +0 -0
  363. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-workflow/agents/openai.yaml +0 -0
  364. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-workflow/playbooks/research-framing.md +0 -0
  365. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/fundamental-analyst/tcx-fundamental/SKILL.md +0 -0
  366. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/fundamental-analyst/tcx-fundamental/agents/openai.yaml +0 -0
  367. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/instrument-analyst/tcx-instrument/SKILL.md +0 -0
  368. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/instrument-analyst/tcx-instrument/agents/openai.yaml +0 -0
  369. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/judgment-reviewer/tcx-judgment/agents/openai.yaml +0 -0
  370. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/macro-analyst/tcx-macro/SKILL.md +0 -0
  371. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/macro-analyst/tcx-macro/agents/openai.yaml +0 -0
  372. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/news-analyst/tcx-news/SKILL.md +0 -0
  373. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/news-analyst/tcx-news/agents/openai.yaml +0 -0
  374. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/portfolio-manager/tcx-order-draft/SKILL.md +0 -0
  375. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/portfolio-manager/tcx-order-draft/agents/openai.yaml +0 -0
  376. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/portfolio-manager/tcx-portfolio/SKILL.md +0 -0
  377. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/portfolio-manager/tcx-portfolio/agents/openai.yaml +0 -0
  378. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-order-approve/SKILL.md +0 -0
  379. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-order-approve/agents/openai.yaml +0 -0
  380. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-policy/SKILL.md +0 -0
  381. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-policy/agents/openai.yaml +0 -0
  382. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-risk/SKILL.md +0 -0
  383. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-risk/agents/openai.yaml +0 -0
  384. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-anti-overfit/SKILL.md +0 -0
  385. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-anti-overfit/agents/openai.yaml +0 -0
  386. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-artifact/SKILL.md +0 -0
  387. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-artifact/agents/openai.yaml +0 -0
  388. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-calculation/SKILL.md +0 -0
  389. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-calculation/agents/openai.yaml +0 -0
  390. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-calculation/references/data-runtime.md +0 -0
  391. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-calculation/references/finance-methods.md +0 -0
  392. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-data-qc/SKILL.md +0 -0
  393. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-data-qc/agents/openai.yaml +0 -0
  394. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-evidence/agents/openai.yaml +0 -0
  395. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-forecast/SKILL.md +0 -0
  396. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-forecast/agents/openai.yaml +0 -0
  397. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-scenarios/SKILL.md +0 -0
  398. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-scenarios/agents/openai.yaml +0 -0
  399. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-source-gate/agents/openai.yaml +0 -0
  400. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-source-gate/references/openbb-mcp.md +0 -0
  401. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/technical-analyst/tcx-technical/SKILL.md +0 -0
  402. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/technical-analyst/tcx-technical/agents/openai.yaml +0 -0
  403. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/valuation-analyst/tcx-valuation/SKILL.md +0 -0
  404. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/valuation-analyst/tcx-valuation/agents/openai.yaml +0 -0
  405. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/module.json +0 -0
  406. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/tradingcodex-mcp/files/.tradingcodex/mcp/enforcer/README.md +0 -0
  407. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/tradingcodex-mcp/files/.tradingcodex/mcp/gateway/README.md +0 -0
  408. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/tradingcodex-mcp/files/.tradingcodex/mcp/server.py +0 -0
  409. {tradingcodex-2.1.0 → tradingcodex-2.1.2}/workspace_templates/modules/tradingcodex-mcp/module.json +0 -0
@@ -2,6 +2,25 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 2.1.2 - 2026-07-24
6
+
7
+ - Treat ASCII skill-name case and normalized whitespace layout as presentation
8
+ details, so Codex app skill-chip capitalization, Brain/Strategy selectors on
9
+ separate lines, and line-wrapped order arguments bind to their canonical
10
+ lowercase skills without weakening order flags, single-effect grants,
11
+ approvals, policy, idempotency, or audit enforcement.
12
+ - Let evidence-producing subagents autonomously fill newly discovered material
13
+ gaps and conflicts within their assigned question, specialty, user scope, and
14
+ read-only authority, using evidence value instead of fixed search or tool-call
15
+ counts while preserving source provenance, deduplication, and role ownership.
16
+
17
+ ## 2.1.1 - 2026-07-24
18
+
19
+ - Reframe independent judgment review as task-relative adversarial adjudication:
20
+ test evidence, interpretation, and conclusions under the selected user
21
+ mandate, Investor Context, Brain, and Strategy without silently replacing
22
+ that governing frame or forcing Bull-versus-Bear onto incompatible tasks.
23
+
5
24
  ## 2.1.0 - 2026-07-23
6
25
 
7
26
  - Ship the complete compact Artifact v2, receipt v4, canonical synthesis,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tradingcodex
3
- Version: 2.1.0
3
+ Version: 2.1.2
4
4
  Summary: Local-first investment operating system for Codex-native research and service-gated execution.
5
5
  Author: TradingCodex Authors
6
6
  License-Expression: Apache-2.0
@@ -265,12 +265,13 @@ Pin the released version so verification cannot accidentally select a later
265
265
  package. From the source checkout on POSIX:
266
266
 
267
267
  ```bash
268
+ set -eu
268
269
  SOURCE_ROOT="$(pwd)"
269
270
  RELEASE_VERSION="$(python3.11 -m tradingcodex_cli --version)"
270
271
  SMOKE_ROOT="$(python3.11 -c 'import tempfile; print(tempfile.mkdtemp(prefix="tcx-pypi-"))')"
271
272
 
272
273
  python3.11 -m venv "$SMOKE_ROOT/venv"
273
- "$SMOKE_ROOT/venv/bin/pip" install "tradingcodex==$RELEASE_VERSION"
274
+ "$SMOKE_ROOT/venv/bin/pip" install --no-cache-dir "tradingcodex==$RELEASE_VERSION"
274
275
  "$SMOKE_ROOT/venv/bin/tcx" --version
275
276
  mkdir "$SMOKE_ROOT/workspace"
276
277
  (
@@ -323,11 +323,13 @@ Generated workspaces contain:
323
323
  reference a Head Manager may pass onward
324
324
  - deterministic root-native action interception: before allocating an analysis
325
325
  run, `UserPromptSubmit` reserves immediate `$tcx-order-submit` and
326
- `$tcx-order-cancel`, accepts only their complete exact `--name value`
327
- grammar from a root native user turn, creates a workspace-bound `native-user`
326
+ `$tcx-order-cancel`, accepts their complete literal `--name value`
327
+ grammar from a root native user turn while tolerating ASCII skill-name case
328
+ and whitespace line wrapping, creates a workspace-bound `native-user`
328
329
  mandate, and calls the canonical Django execution gateway in-process. It also
329
- reserves a first-meaningful-line `$tcx-order-allow --mode
330
- paper|validation|live`, issues one workspace/session/turn/prompt/mode-bound
330
+ reserves a first-meaningful `$tcx-order-allow` invocation followed by
331
+ `--mode paper|validation|live` and a non-empty request on the same or later
332
+ lines, issues one workspace/session/turn/prompt/mode-bound
331
333
  `OrderTurnGrant`, and then continues the normal workflow. Malformed reserved
332
334
  actions, subagent actions, and retired
333
335
  `$execute-paper-order` actions fail closed
@@ -67,10 +67,15 @@ adequate Snapshot/Dataset
67
67
  -> explicit gap
68
68
  ```
69
69
 
70
- Partial success is retained and only missing coverage falls through. External
71
- sources become SourceSnapshots; reusable structured rows become immutable
72
- Datasets. Handoffs carry compact Snapshot/Dataset/Artifact IDs rather than raw
73
- source dumps. This is skill guidance, not a provider router or trust engine.
70
+ Partial success is retained and unsupported coverage falls through without
71
+ refetching adequate evidence. Within its assigned question and specialty, an
72
+ evidence-producing child may autonomously investigate a newly discovered
73
+ material gap or conflict; no fixed source or tool-call count applies. Broad
74
+ just-in-case collection and another role's complete data family remain out of
75
+ scope. External sources become SourceSnapshots; reusable structured rows
76
+ become immutable Datasets. Handoffs carry compact Snapshot/Dataset/Artifact IDs
77
+ rather than raw source dumps. This is skill guidance, not a provider router or
78
+ trust engine.
74
79
 
75
80
  ## Hook Boundary
76
81
 
@@ -68,9 +68,10 @@ external package safety limits remain separate from this authoring rule.
68
68
  TradingCodex uses one lexical contract for managed, selection, and order
69
69
  skills. It removes one UTF-8 BOM, normalizes CRLF, CR, NEL, and Unicode
70
70
  line/paragraph separators to LF, tolerates leading and trailing blank lines,
71
- and trims horizontal whitespace for recognizing an invocation. It does not
72
- case-fold skill ids, normalize confusable characters, or ignore zero-width
73
- characters.
71
+ and trims horizontal whitespace for recognizing an invocation. ASCII letter
72
+ case in a skill id is presentation-only and resolves to the canonical lowercase
73
+ id, which accommodates Codex app skill-chip rendering. The parser does not
74
+ normalize Unicode lookalikes, confusable separators, or zero-width characters.
74
75
 
75
76
  A plain `$skill-id` and a Markdown link are equivalent only when the link label
76
77
  is that exact id and its target resolves to the matching projected
@@ -81,12 +82,14 @@ distinct managed markers remain invalid. Brain and Strategy selection accepts a
81
82
  projected link, deduplicates repeated references to the same id, and rejects
82
83
  distinct multiple ids.
83
84
 
84
- Order syntax is intentionally narrower. `$tcx-order-allow --mode
85
- paper|validation|live` occupies the complete first meaningful line and requires
86
- a non-empty request below it. Immediate submit/cancel remains an action-only
87
- prompt with exact `--name value` pairs. A matching projected Markdown skill
88
- link may replace only the skill token; it does not relax flags, values, or the
89
- single-effect rule. Grant, mandate, and audit bindings continue to hash the
85
+ Order syntax is intentionally narrower than research selection, but whitespace
86
+ layout is not an authority boundary. `$tcx-order-allow`, its `--mode
87
+ paper|validation|live` argument, and the non-empty request may share a line or
88
+ wrap across lines. Immediate submit/cancel remains an action-only prompt with
89
+ literal `--name value` pairs, which may wrap across lines. A matching projected
90
+ Markdown skill link may replace only the skill token; case and whitespace
91
+ normalization do not relax flags, identifiers, duplicate detection, mode, or
92
+ the single-effect rule. Grant, mandate, and audit bindings continue to hash the
90
93
  original unnormalized prompt.
91
94
 
92
95
  ## Fixed Team
@@ -210,18 +213,23 @@ only current-workflow artifact candidates and Dataset cards/manifests. It
210
213
  assigns one producing owner and gives relevant children briefs that name that
211
214
  owner, exact reusable IDs, and the needed or missing slice; roles do not browse
212
215
  a whole catalog. A stale, incomplete, or mismatched record still contributes
213
- its valid portion, while only the owner retrieves missing coverage. Head Manager
214
- then gives the evidence producer the smallest missing-data question and other
215
- roles compact SourceSnapshot, Dataset, and ResearchArtifact IDs. The producer
216
- follows the canonical `tcx-source-gate` procedure: reuse supplied evidence, use
217
- one relevant enabled user capability, use optional direct OpenBB, prefer
218
- original public records, then reliable web sources, and state a remaining gap.
216
+ its valid portion. The producing owner may autonomously collect additional
217
+ evidence when a newly discovered gap or conflict could materially change its
218
+ assigned answer, readiness, or confidence and remains within the user's scope
219
+ and that role's specialty; it does not need a Head Manager follow-up naming
220
+ every field or source. Other roles receive compact SourceSnapshot, Dataset, and
221
+ ResearchArtifact IDs. The producer follows the canonical `tcx-source-gate`
222
+ preference: reuse supplied evidence, use one relevant enabled user capability,
223
+ use optional direct OpenBB, prefer original public records, then reliable web
224
+ sources, and state a remaining gap.
219
225
 
220
226
  This is agent guidance, not a Django routing state machine. The role names the
221
227
  provider where possible, does not repeat unchanged calls to the same source,
222
- and preserves a partial result while seeking only the missing field, identifier,
223
- or period. User capabilities remain BYOR; TradingCodex does not install,
224
- classify, proxy, approve, or audit them.
228
+ and preserves a partial result while seeking unsupported coverage rather than
229
+ refetching adequate coverage. There is no fixed source, search, or tool-call
230
+ count. Broad just-in-case collection and recreation of another role's complete
231
+ data family remain out of scope. User capabilities remain BYOR; TradingCodex
232
+ does not install, classify, proxy, approve, or audit them.
225
233
 
226
234
  Use `record_source_snapshot` for every external source. Create a Dataset only
227
235
  for reusable structured rows, and bind the resulting Snapshot and Dataset IDs to
@@ -334,7 +342,22 @@ not synthesis inputs.
334
342
 
335
343
  Use `judgment-reviewer` for recommendations, portfolio/risk decisions,
336
344
  material conflicts, and high-consequence uncertainty. Do not force it into a
337
- narrow factual request.
345
+ narrow factual request or a task without a meaningful competing case. The
346
+ reviewer is an adversarial adjudicator, not a generic skeptic or a neutral
347
+ consensus engine. Head Manager supplies the exact decision and a compact frame
348
+ derived from the user mandate, applicable Investor Context, selected Brain
349
+ questions or falsifiers, selected Strategy rules, accepted Artifact IDs, and
350
+ the downstream consequence.
351
+
352
+ The reviewer tests whether authenticated evidence supports the artifact's
353
+ interpretation and conclusion under that frame. It may maintain, change,
354
+ qualify, or abstain from the current conclusion, but it cannot silently replace
355
+ the user mandate, Brain, or Strategy. Bull-versus-bear is one useful form for a
356
+ directional investment claim; other tasks use their strongest relevant
357
+ alternative hypothesis, adverse scenario, assumption challenge, or
358
+ claim-versus-refutation. A concern that the selected frame is inapplicable or
359
+ defective is reported separately for Head Manager or a later postmortem and
360
+ does not amend the current run.
338
361
 
339
362
  Select a method profile that matches the task:
340
363
 
@@ -532,8 +555,8 @@ consumer; without proof injected by `PreToolUse` for the current exact
532
555
  `$tcx-order-allow` turn, it has no execution authority.
533
556
 
534
557
  For already-known canonical identifiers, the final external effect remains
535
- available from a root native Codex user turn whose meaningful content matches
536
- one exact action-only skill invocation. The canonical plain forms are:
558
+ available from a root native Codex user turn whose meaningful content contains
559
+ one action-only skill invocation. The canonical single-line forms are:
537
560
 
538
561
  ```text
539
562
  $tcx-order-submit --ticket-id <ticket-id> --approval-receipt-id <approval-receipt-id>
@@ -542,8 +565,9 @@ $tcx-order-cancel --ticket-id <ticket-id> --broker-order-id <broker-order-id> --
542
565
  $tcx-order-cancel --ticket-id <ticket-id> --broker-order-id <broker-order-id> --approval-receipt-id <approval-receipt-id> --live-confirmation <token>
543
566
  ```
544
567
 
545
- The leading skill token may be its matching projected Markdown link; every
546
- other part of the grammar remains literal. These two root skill bundles
568
+ The leading skill token is ASCII case-insensitive and may be its matching
569
+ projected Markdown link. Whitespace, including normalized line breaks, may
570
+ separate tokens; every other part of the grammar remains literal. These two root skill bundles
547
571
  describe a protocol and disable implicit invocation; they carry no MCP or
548
572
  broker authority. `UserPromptSubmit` recognizes the reserved invocation,
549
573
  rejects malformed or subagent forms,
@@ -552,7 +576,7 @@ parses the complete prompt deterministically, creates a workspace-bound
552
576
  an analysis run begins.
553
577
 
554
578
  For a workflow that creates or selects identifiers during the turn, the first
555
- meaningful line must instead contain exactly one canonical mode invocation:
579
+ meaningful invocation must instead be the order-allow skill:
556
580
 
557
581
  ```text
558
582
  $tcx-order-allow --mode paper
@@ -560,9 +584,10 @@ $tcx-order-allow --mode validation
560
584
  $tcx-order-allow --mode live
561
585
  ```
562
586
 
563
- The skill token may be its matching projected Markdown link, but no prose or
564
- extra flag may share the line and a non-empty workflow request must follow. The
565
- hook requires a root native Codex `session_id` and `turn_id`, issues one grant
587
+ The skill token may be its matching projected Markdown link. Its mode and
588
+ non-empty workflow request may follow on the same line or later lines; line
589
+ layout does not change the grant. The hook requires a root native Codex
590
+ `session_id` and `turn_id`, issues one grant
566
591
  bound to workspace, session, turn, original complete prompt hash, Codex permission
567
592
  mode, and execution mode, then continues ordinary orchestration. Plan mode
568
593
  rejects immediate order effects plus grant issuance and use. The grant expires
@@ -18,22 +18,23 @@ raise quality without becoming executable authorization.
18
18
  Every final submit or cancel action follows one of two native-user entries:
19
19
 
20
20
  ```text
21
- exact immediate root action -> deterministic hook parse -> native-user permission
21
+ literal action-only root invocation -> deterministic hook parse -> native-user permission
22
22
  -> policy -> payload validation -> approval/duplicate-request check
23
23
  -> mandatory intent audit -> connection -> finalized/uncertain audit
24
24
 
25
- exact first-meaningful-line $tcx-order-allow -> workspace/session/turn/prompt/mode grant
25
+ first-meaningful $tcx-order-allow invocation -> workspace/session/turn/prompt/mode grant
26
26
  -> canonical workflow state -> protected tool + PreToolUse proof
27
27
  -> consume once -> the same policy/approval/idempotency/live/audit gates
28
28
  ```
29
29
 
30
30
  This order matters:
31
31
 
32
- 1. Exact user admission: require either one action-only immediate submit/cancel
33
- prompt or an exact first meaningful line `$tcx-order-allow --mode
34
- paper|validation|live` on the current root turn. A matching projected
35
- Markdown skill link may replace only the skill token; all arguments stay
36
- literal.
32
+ 1. Explicit user admission: require either one action-only immediate
33
+ submit/cancel prompt or a first-meaningful `$tcx-order-allow` invocation with
34
+ `--mode paper|validation|live` and a non-empty request on the current root
35
+ turn. A matching projected Markdown skill link may replace only the skill
36
+ token. ASCII skill-name case and whitespace layout are presentation details;
37
+ all arguments stay literal.
37
38
  2. Parse: create a workspace-bound immediate mandate, or a workspace-,
38
39
  session-, turn-, full-prompt-, and mode-bound single-use turn grant before
39
40
  any model or subagent runs.
@@ -69,13 +70,14 @@ no local-loopback mutation exception. Remote mutation use always requires
69
70
  staff/API-key authentication. Loopback is not generic mutation authority.
70
71
 
71
72
  Immediate final submit and cancel do not use an agent MCP or REST identity. The
72
- `UserPromptSubmit` hook accepts only an exact root native action prompt, binds a
73
+ `UserPromptSubmit` hook accepts only a literal action-only root native prompt, binds a
73
74
  short-lived mandate to the original prompt hash and workspace provenance, and
74
75
  calls the canonical execution gateway in-process as `native-user`.
75
76
 
76
77
  For a workflow that creates or selects canonical identifiers later in the
77
- turn, the same hook accepts only an exact first-meaningful-line
78
- `$tcx-order-allow` mode, requires current Codex `session_id` and `turn_id`, and issues a grant
78
+ turn, the same hook accepts a first-meaningful `$tcx-order-allow` invocation,
79
+ mode, and non-empty request across arbitrary normalized whitespace, requires
80
+ current Codex `session_id` and `turn_id`, and issues a grant
79
81
  bound to workspace, session, turn, original full prompt hash, Codex permission mode, and
80
82
  execution mode. Plan mode rejects both immediate execution and turn-grant
81
83
  issuance or use; the user must start a new non-Plan root turn. The grant expires
@@ -579,19 +581,20 @@ has an approval receipt, and `submit_approved_order` includes
579
581
  $tcx-order-cancel --ticket-id <ticket-id> --broker-order-id <broker-order-id> --approval-receipt-id <approval-receipt-id> --live-confirmation <token>
580
582
  ```
581
583
 
582
- - The deterministic parser accepts only literal `--name value` pairs. It rejects
584
+ - The deterministic parser accepts only literal `--name value` pairs, while
585
+ allowing normalized whitespace and line breaks between tokens. It rejects
583
586
  prose, aliases, quotes, escapes, comments, duplicate or unknown flags,
584
587
  `--name=value`, multiple actions, subagent turns, and the
585
588
  retired `$execute-paper-order` invocation. A malformed prompt beginning with a
586
589
  reserved token is blocked rather than falling through to analysis. One UTF-8
587
- BOM, normalized line endings, leading/trailing blank lines, and a Markdown
590
+ BOM, ASCII skill-name case, normalized line endings, leading/trailing blank lines, and a Markdown
588
591
  link whose label and target match the projected action skill do not relax
589
592
  that action-only grammar.
590
593
  - The two root skill bundles document this protocol but carry no tool authority.
591
594
  The hook creates the in-memory mandate from the original user prompt, records
592
595
  a redacted prompt hash and normalized identifiers, and calls the Django
593
596
  gateway synchronously before normal Head Manager orchestration.
594
- - A workflow may instead put one exact invocation on its first meaningful line:
597
+ - A workflow may instead begin with one order-allow invocation:
595
598
 
596
599
  ```text
597
600
  $tcx-order-allow --mode paper
@@ -599,8 +602,9 @@ has an approval receipt, and `submit_approved_order` includes
599
602
  $tcx-order-allow --mode live
600
603
  ```
601
604
 
602
- The skill token may be its matching projected Markdown link. The remainder
603
- must contain a non-empty normal interactive or Scheduled Task prompt. The line
605
+ The skill token may be its matching projected Markdown link. The mode and
606
+ non-empty normal interactive or Scheduled Task request may share the first
607
+ meaningful line or wrap across later lines. This invocation
604
608
  admits at most one later submit or cancel and does not itself perform an
605
609
  effect. A free-form mention, later-line token, malformed mode, or subagent
606
610
  turn grants nothing. The browser viewer exposes no prompt entrypoint. Scheduled and interactive prompts use the
@@ -621,8 +625,9 @@ has an approval receipt, and `submit_approved_order` includes
621
625
  materially ambiguous, Head Manager asks the user or stops at `waiting` or
622
626
  `blocked`.
623
627
  - Order drafting and approval retain their role-owned structured tools. Final
624
- cancellation and execution additionally require either the exact immediate
625
- native grammar and parser-issued mandate or the exact first-meaningful-line turn grant
628
+ cancellation and execution additionally require either the literal
629
+ action-only native grammar and parser-issued mandate or the first-meaningful
630
+ turn grant
626
631
  plus protected proof, together with every deterministic principal,
627
632
  capability, policy, approval, idempotency, connection, and audit gate.
628
633
  Analytical prose cannot activate those paths.
@@ -107,7 +107,7 @@ def test_build_parser_accepts_first_meaningful_line_and_workspace_links(workspac
107
107
  for prompt in accepted:
108
108
  assert parse_build_invocation(prompt, workspace) is True
109
109
  assert parse_build_invocation("Research how $tcx-build works without changing files.") is None
110
- assert parse_build_invocation("$TCX-build\nUpdate the provider.") is None
110
+ assert parse_build_invocation("$TCX-build\nUpdate the provider.") is True
111
111
  assert parse_build_invocation("\u200b$tcx-build\nUpdate the provider.") is None
112
112
  assert parse_build_invocation("$tcx-buіld\nUpdate the provider.") is None
113
113
 
@@ -70,7 +70,10 @@ def test_fixed_role_prompts_use_natural_evidence_distinctions() -> None:
70
70
  assert "Keep disposable work under `$TRADINGCODEX_SCRATCH`" in flat_base
71
71
  assert "never read audit records" in flat_base
72
72
  assert "treat the new request as a bounded delta" in flat_base
73
- assert "retrieve only missing coverage" in flat_base
73
+ assert "collect additional evidence whenever a newly discovered gap or conflict" in flat_base
74
+ assert "do not need a follow-up from Head Manager naming every field or source first" in flat_base
75
+ assert "there is no fixed search or tool-call count" in flat_base
76
+ assert "retrieve the coverage needed to resolve the delta" in flat_base
74
77
  assert "answers the exact assigned question" in flat_base
75
78
  assert "If the requested delta belongs to another specialty" in flat_base
76
79
  for prompt in [base, *role_prompts, *role_skills]:
@@ -166,7 +169,7 @@ def test_child_briefs_and_artifact_skills_keep_capabilities_and_lineage_distinct
166
169
  assert "triggering cross-role Artifact IDs (inputs)" in flat_fixed
167
170
  assert "create a new artifact only when the brief explicitly says so" in flat_fixed
168
171
  assert "Honor the brief's data-family owner" in flat_fixed
169
- assert "do not recollect another role's complete family" in flat_fixed
172
+ assert "Do not recollect another role's complete family" in flat_fixed
170
173
  assert "Do not load `tcx-calculation` merely to quote or compare source-reported figures" in flat_fixed
171
174
 
172
175
  assert "brief every child with that ownership, exact reusable IDs, and the missing slice" in flat_workflow
@@ -191,6 +194,11 @@ def test_child_briefs_and_artifact_skills_keep_capabilities_and_lineage_distinct
191
194
  assert "exact conflict or review question" in flat_judgment
192
195
  assert "accepted, authenticated Artifact IDs with their service receipts/content hashes" in flat_judgment
193
196
  assert "paths and compact summaries as navigation aids, never substitutes" in flat_judgment
197
+ assert "Judgment tests the evidence-to-interpretation-to-conclusion link" in flat_judgment
198
+ assert "Never silently replace the mandate, Brain, or Strategy" in flat_judgment
199
+ assert "do not force it onto every request" in flat_judgment
200
+ assert "frame concern" in flat_judgment
201
+ assert "compact judgment frame derived from the user mandate" in flat_workflow
194
202
  assert "briefs that name that owner, exact reusable IDs, and the needed or missing slice" in flat_docs
195
203
  assert "target owner's Artifact ID to append or revise from triggering cross-role Artifact IDs consumed as inputs" in flat_docs
196
204
  assert "when the evidence only supports that report, the role creates no duplicate evidence pack" in flat_docs
@@ -39,6 +39,8 @@ def test_head_manager_owns_typed_brain_translation_and_conflicts() -> None:
39
39
  assert "independent current-run evidence view" in flat_prompt
40
40
  assert "post-memory decision" in flat_prompt
41
41
  assert "caller-authored Brain lineage" in flat_prompt
42
+ assert "compact frame derived from the mandate" in flat_prompt
43
+ assert "may overturn a conclusion under that frame but cannot replace the frame" in flat_prompt
42
44
 
43
45
 
44
46
  def test_tcx_workflow_keeps_context_and_routing_native() -> None:
@@ -64,6 +66,8 @@ def test_tcx_workflow_keeps_context_and_routing_native() -> None:
64
66
  assert "load `$tcx-source-gate`" in flat_skill
65
67
  assert "current-workflow Snapshot/Dataset candidates" in flat_skill
66
68
  assert "Preserve an independent current view before Decision Memory" in flat_skill
69
+ assert "compact judgment frame derived from the user mandate" in flat_skill
70
+ assert "not replace the frame" in flat_skill
67
71
  assert "[Research Framing playbook](playbooks/research-framing.md)" in skill
68
72
  assert "Skip the playbook for a narrow fact or recorded order" in flat_skill
69
73
  assert "Frame research as a provisional causal map, not a request-shaped checklist" in flat_framing
@@ -123,6 +123,12 @@ def _research_args(artifact_id: str, artifact_type: str, run_id: str, *, inputs:
123
123
 
124
124
  def test_explicit_brain_invocation_is_exact_and_single() -> None:
125
125
  assert explicit_investment_brain_invocation(f"Use ${BRAIN_ID}.") == BRAIN_ID
126
+ assert explicit_investment_brain_invocation(
127
+ "$Investment-Brain-Quality-Growth\nAnalyze ACME."
128
+ ) == BRAIN_ID
129
+ assert explicit_investment_brain_invocation(
130
+ f"${BRAIN_ID}\n$strategy-quality-watch\nAnalyze ACME."
131
+ ) == BRAIN_ID
126
132
  assert explicit_investment_brain_invocation(f"Use {BRAIN_ID}.") == ""
127
133
  assert explicit_investment_brain_invocation(f"${BRAIN_ID} then ${BRAIN_ID}") == BRAIN_ID
128
134
  with pytest.raises(ValueError, match="exactly one"):
@@ -159,6 +165,10 @@ def test_explicit_brain_invocation_accepts_only_the_projected_skill_link(
159
165
  prompt = f"Use [${BRAIN_ID}]({target}) and ${BRAIN_ID}."
160
166
 
161
167
  assert explicit_investment_brain_invocation(prompt, workspace) == BRAIN_ID
168
+ assert explicit_investment_brain_invocation(
169
+ f"Use [$Investment-Brain-Quality-Growth]({target}).",
170
+ workspace,
171
+ ) == BRAIN_ID
162
172
  with pytest.raises(ValueError, match="must target"):
163
173
  explicit_investment_brain_invocation(
164
174
  f"Use [${BRAIN_ID}]({workspace / '.agents/skills/tcx-build/SKILL.md'}).",
@@ -132,6 +132,12 @@ def test_analysis_run_seals_enabled_context_and_respects_workspace_default(tmp_p
132
132
 
133
133
  def test_explicit_strategy_invocation_never_guesses_from_natural_language() -> None:
134
134
  assert explicit_strategy_invocation("Use $strategy-quality-watch for this review.") == "strategy-quality-watch"
135
+ assert explicit_strategy_invocation(
136
+ "$Strategy-Quality-Watch\nReview this portfolio."
137
+ ) == "strategy-quality-watch"
138
+ assert explicit_strategy_invocation(
139
+ "$investment-brain-quality-growth\n$strategy-quality-watch\nReview this portfolio."
140
+ ) == "strategy-quality-watch"
135
141
  assert explicit_strategy_invocation("Use strategy-quality-watch for this review.") == ""
136
142
  assert explicit_strategy_invocation("Use $tcx-strategy to create a reusable strategy.") == ""
137
143
  with pytest.raises(ValueError, match="exactly one"):
@@ -146,6 +152,10 @@ def test_explicit_strategy_invocation_accepts_only_the_projected_skill_link(tmp_
146
152
 
147
153
  assert explicit_strategy_invocation(prompt, tmp_path) == "strategy-quality-watch"
148
154
  assert explicit_strategy_invocation(f"{prompt} $strategy-quality-watch", tmp_path) == "strategy-quality-watch"
155
+ assert explicit_strategy_invocation(
156
+ f"[$Strategy-Quality-Watch]({skill})\nReview it.",
157
+ tmp_path,
158
+ ) == "strategy-quality-watch"
149
159
  with pytest.raises(ValueError, match="must target"):
150
160
  explicit_strategy_invocation(
151
161
  f"Use [$strategy-quality-watch]({tmp_path / 'other/SKILL.md'}).",
@@ -145,6 +145,26 @@ def test_native_invocation_accepts_formatting_and_exact_workspace_link(workspace
145
145
  assert mandate.prompt_sha256 == hashlib.sha256(prompt.encode()).hexdigest()
146
146
 
147
147
 
148
+ @pytest.mark.parametrize(
149
+ "prompt",
150
+ [
151
+ "$TCX-ORDER-SUBMIT --ticket-id ticket-1 --approval-receipt-id receipt-1",
152
+ "$tcx-order-submit\n--ticket-id ticket-1\n--approval-receipt-id receipt-1",
153
+ "$tcx-order-submit --ticket-id ticket-1\n--approval-receipt-id receipt-1",
154
+ ],
155
+ )
156
+ def test_native_invocation_accepts_case_and_line_wrapping(
157
+ workspace: Path,
158
+ prompt: str,
159
+ ) -> None:
160
+ mandate = parse_native_execution_invocation(prompt, workspace)
161
+
162
+ assert mandate is not None
163
+ assert mandate.action == NATIVE_SUBMIT_ACTION
164
+ assert mandate.ticket_id == "ticket-1"
165
+ assert mandate.approval_receipt_id == "receipt-1"
166
+
167
+
148
168
  def test_native_invocation_rejects_mismatched_workspace_link(workspace: Path) -> None:
149
169
  prompt = (
150
170
  f"[$tcx-order-submit]({workspace / '.agents/skills/tcx-order-cancel/SKILL.md'}) "
@@ -166,7 +186,6 @@ def test_native_invocation_rejects_mismatched_workspace_link(workspace: Path) ->
166
186
  "$tcx-order-submit ticket-1 --approval-receipt-id receipt-1",
167
187
  "$tcx-order-submit --ticket-id 'ticket-1' --approval-receipt-id receipt-1",
168
188
  "$tcx-order-submit --ticket-id ticket\\-1 --approval-receipt-id receipt-1",
169
- "$tcx-order-submit --ticket-id ticket-1\n--approval-receipt-id receipt-1",
170
189
  "$tcx-order-submit --ticket-id ticket-1 --approval-receipt-id receipt-1 extra",
171
190
  "$tcx-order-submit --ticket-id ticket-1 --approval-receipt-id receipt-1 "
172
191
  "$tcx-order-cancel --ticket-id ticket-1",
@@ -144,6 +144,9 @@ def test_order_allow_parser_accepts_format_only_variants(workspace: Path, mode:
144
144
  target = workspace / ".agents/skills/tcx-order-allow/SKILL.md"
145
145
  prompts = (
146
146
  order_allow_prompt(mode),
147
+ f"$TCX-ORDER-ALLOW --mode {mode}\nRun the requested task.",
148
+ f"$tcx-order-allow --mode {mode} Run the requested task.",
149
+ f"$tcx-order-allow\n--mode\n{mode}\nRun the requested task.",
147
150
  f"$tcx-order-allow --mode {mode}\r\nRun the requested scheduled task.",
148
151
  f"\ufeff\n \t$tcx-order-allow --mode {mode} \t\u2028Run the requested task.\n",
149
152
  f"\u00a0$tcx-order-allow\u3000--mode {mode}\u00a0\nRun the requested task.",
@@ -161,7 +164,6 @@ def test_order_allow_parser_accepts_format_only_variants(workspace: Path, mode:
161
164
  "$tcx-order-allow --mode paper\n\ufeff",
162
165
  "$tcx-order-allow",
163
166
  "$tcx-order-allow --mode=paper\nSubmit it.",
164
- "$tcx-order-allow --mode PAPER\nSubmit it.",
165
167
  "$tcx-order-allow --mode paper --extra yes\nSubmit it.",
166
168
  "$tcx-order-allow --mode paper\n$tcx-build\nChange the connector.",
167
169
  "$tcx-order-allow --mode paper\n\u200b$tcx-build\nChange the connector.",
@@ -118,7 +118,7 @@ def test_cli_hook_dispatch_preserves_standard_input_and_output(
118
118
  def test_v2_package_metadata_has_one_stable_version_source() -> None:
119
119
  project = tomllib.loads((ROOT / "pyproject.toml").read_text(encoding="utf-8"))
120
120
 
121
- assert TRADINGCODEX_VERSION == "2.1.0"
121
+ assert TRADINGCODEX_VERSION == "2.1.2"
122
122
  assert str(Version(TRADINGCODEX_VERSION)) == TRADINGCODEX_VERSION
123
123
  assert project["project"]["dynamic"] == ["version"]
124
124
  assert "version" not in project["project"]
@@ -203,6 +203,10 @@ def test_source_snapshot_api_tool_and_role_instructions_align() -> None:
203
203
  assert "Treat\nOpenBB as access to its returned provider" in source_gate
204
204
  assert "Secondary does not mean screen-only" in source_gate
205
205
  assert "do not require a fixed source count" in source_gate
206
+ assert "not a one-call budget" in source_gate
207
+ assert "newly discovered gap, contradiction, stale anchor, or\nidentifier problem" in source_gate
208
+ assert "number and mix of useful sources" in source_gate
209
+ assert "another source is appropriate when\nit resolves a material gap or conflict" in source_gate
206
210
  assert "Use `evidence_readiness: decision-grade` when every\nconclusion-driving claim" in source_gate
207
211
  assert "not merely because a primary source is\nabsent" in source_gate
208
212
  assert "latest completed period can be the current usable anchor" in source_gate
@@ -222,6 +226,8 @@ def test_source_snapshot_api_tool_and_role_instructions_align() -> None:
222
226
  assert "SourceSnapshot" in openbb_reference and "Dataset" in openbb_reference
223
227
  for field in ("snapshot_id", "retrieved_at", "recorded_at", "known_at"):
224
228
  assert f"`{field}`" in collect_evidence
229
+ assert "without waiting for a new field-by-field\n instruction" in collect_evidence
230
+ assert "Use evidence value, not a fixed source or call count" in collect_evidence
225
231
 
226
232
  artifact_cutoff = TOOL_REGISTRY["create_research_artifact"].input_schema[
227
233
  "properties"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tradingcodex
3
- Version: 2.1.0
3
+ Version: 2.1.2
4
4
  Summary: Local-first investment operating system for Codex-native research and service-gated execution.
5
5
  Author: TradingCodex Authors
6
6
  License-Expression: Apache-2.0
@@ -391,7 +391,8 @@ def _fixed_role_dispatch_checks(root: Path) -> list[dict[str, Any]]:
391
391
  "Only an unavailable\n evidence-producing role may use a generic child",
392
392
  "Do not replace an independent\n `risk-manager` or `judgment-reviewer` review",
393
393
  "`followup_task`",
394
- "`risk-manager` and",
394
+ "Use `judgment-reviewer` when",
395
+ "without a meaningful competing case",
395
396
  )
396
397
  )
397
398
  return [
@@ -1087,7 +1088,7 @@ def _improvement_checks(root: Path) -> list[dict[str, Any]]:
1087
1088
  checks.append(path_check(root, "improvement", "skill index projected", ".tradingcodex/generated/skill-index.json", False))
1088
1089
  checks.append(path_check(root, "improvement", "projection manifest projected", ".tradingcodex/generated/projection-manifest.json", False))
1089
1090
  checks.append(text_check(root, "improvement", "bounded evidence fallback installed", ".agents/skills/tcx-workflow/SKILL.md", "Only an unavailable\n evidence-producing role may use a generic child", False))
1090
- checks.append(text_check(root, "improvement", "decision quality review installed", ".agents/skills/tcx-workflow/SKILL.md", "high-impact risk judgment", False))
1091
+ checks.append(text_check(root, "improvement", "decision quality review installed", ".agents/skills/tcx-workflow/SKILL.md", "high-consequence uncertainty", False))
1091
1092
  checks.append(text_check(root, "improvement", "method profile routing installed", ".codex/prompts/base_instructions/head-manager.md", "listed-equity FCFF DCF", False))
1092
1093
  checks.append(text_check(root, "improvement", "Codex-native workflow skill installed", ".agents/skills/tcx-workflow/SKILL.md", "## Fast Path", False))
1093
1094
  checks.append(text_check(root, "improvement", "turn grant revocation hook installed", ".codex/hooks/tradingcodex_hook.py", "revoke_prior_order_turn", True))