tradingcodex 2.1.1__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 (408) hide show
  1. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/CHANGELOG.md +12 -0
  2. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/PKG-INFO +1 -1
  3. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/docs/generated-workspaces.md +6 -4
  4. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/docs/harness.md +9 -4
  5. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/docs/roles-skills-and-workflows.md +36 -26
  6. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/docs/safety-policy-and-execution.md +22 -17
  7. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_build_turn_grant.py +1 -1
  8. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_codex_native_orchestration.py +5 -2
  9. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_investment_brain_provenance.py +10 -0
  10. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_investor_context.py +10 -0
  11. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_native_execution_gateway.py +20 -1
  12. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_order_turn_grant.py +3 -1
  13. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_release_contract.py +1 -1
  14. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_source_snapshot_agent_contract.py +6 -0
  15. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex.egg-info/PKG-INFO +1 -1
  16. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/execution_gateway.py +26 -12
  17. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/skill_invocations.py +54 -21
  18. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/mcp_runtime.py +3 -2
  19. tradingcodex-2.1.2/tradingcodex_service/version.py +1 -0
  20. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/codex-base/files/.codex/prompts/base_instructions/fixed-role.md +13 -3
  21. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-allow/SKILL.md +10 -11
  22. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-cancel/SKILL.md +4 -3
  23. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-submit/SKILL.md +4 -3
  24. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-evidence/SKILL.md +7 -1
  25. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-source-gate/SKILL.md +16 -1
  26. tradingcodex-2.1.1/tradingcodex_service/version.py +0 -1
  27. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/CONTRIBUTING.md +0 -0
  28. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/LICENSE +0 -0
  29. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/MANIFEST.in +0 -0
  30. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/NOTICE +0 -0
  31. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/README.md +0 -0
  32. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/TRADEMARKS.md +0 -0
  33. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/__init__.py +0 -0
  34. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/audit/__init__.py +0 -0
  35. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/audit/admin.py +0 -0
  36. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/audit/apps.py +0 -0
  37. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/audit/migrations/0001_v1_initial.py +0 -0
  38. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/audit/migrations/__init__.py +0 -0
  39. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/audit/models.py +0 -0
  40. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/harness/__init__.py +0 -0
  41. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/harness/admin.py +0 -0
  42. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/harness/apps.py +0 -0
  43. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/harness/migrations/0001_v1_initial.py +0 -0
  44. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/harness/migrations/__init__.py +0 -0
  45. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/harness/models.py +0 -0
  46. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/harness/templatetags/__init__.py +0 -0
  47. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/integrations/__init__.py +0 -0
  48. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/integrations/admin.py +0 -0
  49. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/integrations/apps.py +0 -0
  50. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/integrations/migrations/0001_v1_initial.py +0 -0
  51. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/integrations/migrations/__init__.py +0 -0
  52. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/integrations/models.py +0 -0
  53. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/mcp/__init__.py +0 -0
  54. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/mcp/admin.py +0 -0
  55. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/mcp/apps.py +0 -0
  56. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/mcp/migrations/0001_v1_initial.py +0 -0
  57. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/mcp/migrations/0002_remove_external_mcp_gate.py +0 -0
  58. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/mcp/migrations/__init__.py +0 -0
  59. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/mcp/models.py +0 -0
  60. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/mcp/services.py +0 -0
  61. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/orders/__init__.py +0 -0
  62. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/orders/admin.py +0 -0
  63. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/orders/apps.py +0 -0
  64. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/orders/migrations/0001_v1_initial.py +0 -0
  65. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/orders/migrations/__init__.py +0 -0
  66. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/orders/models.py +0 -0
  67. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/orders/services.py +0 -0
  68. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/policy/__init__.py +0 -0
  69. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/policy/admin.py +0 -0
  70. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/policy/apps.py +0 -0
  71. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/policy/migrations/0001_v1_initial.py +0 -0
  72. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/policy/migrations/__init__.py +0 -0
  73. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/policy/models.py +0 -0
  74. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/policy/services.py +0 -0
  75. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/portfolio/__init__.py +0 -0
  76. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/portfolio/admin.py +0 -0
  77. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/portfolio/apps.py +0 -0
  78. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/portfolio/migrations/0001_v1_initial.py +0 -0
  79. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/portfolio/migrations/__init__.py +0 -0
  80. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/apps/portfolio/models.py +0 -0
  81. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/assets/tradingcodex-banner-v1.png +0 -0
  82. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/assets/tradingcodex-banner-v2.png +0 -0
  83. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/assets/tradingcodex-banner-v3.png +0 -0
  84. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/assets/tradingcodex-banner.svg +0 -0
  85. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/docs/README.md +0 -0
  86. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/docs/architecture.md +0 -0
  87. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/docs/codex-native-orchestration.md +0 -0
  88. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/docs/data-sources-and-openbb.md +0 -0
  89. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/docs/decision-memory.md +0 -0
  90. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/docs/deployment.md +0 -0
  91. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/docs/financial-workflow-references.md +0 -0
  92. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/docs/guardrails.md +0 -0
  93. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/docs/improvement-loop.md +0 -0
  94. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/docs/interfaces-and-surfaces.md +0 -0
  95. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/docs/investment-brain-plugins.md +0 -0
  96. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/docs/knowledge-wikis.md +0 -0
  97. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/docs/licensing-and-commercialization.md +0 -0
  98. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/docs/product-direction.md +0 -0
  99. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/docs/release-readiness.md +0 -0
  100. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/docs/research-memory-and-artifacts.md +0 -0
  101. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/docs/user-facing-skills.md +0 -0
  102. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/docs/validation-and-test-plan.md +0 -0
  103. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/frontend/index.html +0 -0
  104. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/frontend/package-lock.json +0 -0
  105. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/frontend/package.json +0 -0
  106. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/frontend/src/App.tsx +0 -0
  107. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/frontend/src/ViewerShell.tsx +0 -0
  108. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/frontend/src/api.ts +0 -0
  109. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/frontend/src/domain.ts +0 -0
  110. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/frontend/src/features/EpisodesPage.tsx +0 -0
  111. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/frontend/src/features/LibraryPage.tsx +0 -0
  112. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/frontend/src/features/SystemPage.tsx +0 -0
  113. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/frontend/src/features/WikiPage.tsx +0 -0
  114. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/frontend/src/main.tsx +0 -0
  115. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/frontend/src/navigation.js +0 -0
  116. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/frontend/src/navigation.test.js +0 -0
  117. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/frontend/src/styles.css +0 -0
  118. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/frontend/src/ui.tsx +0 -0
  119. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/frontend/src/viewer-data.js +0 -0
  120. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/frontend/tsconfig.json +0 -0
  121. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/frontend/vite.config.ts +0 -0
  122. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/install.sh +0 -0
  123. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/installation.md +0 -0
  124. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/pyproject.toml +0 -0
  125. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/setup.cfg +0 -0
  126. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_artifact_authentication.py +0 -0
  127. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_artifact_catalog.py +0 -0
  128. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_artifact_v2.py +0 -0
  129. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_brain_skill.py +0 -0
  130. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_broker_center_prd.py +0 -0
  131. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_build_contract_metadata.py +0 -0
  132. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_build_hook.py +0 -0
  133. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_calculation_runner.py +0 -0
  134. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_clean_v1_cli_audit.py +0 -0
  135. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_codex_capabilities.py +0 -0
  136. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_codex_cli_compat.py +0 -0
  137. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_codex_cli_contract.py +0 -0
  138. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_datasets.py +0 -0
  139. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_decision_memory_core.py +0 -0
  140. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_dev_bootstrap.py +0 -0
  141. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_dynamic_artifact_quality.py +0 -0
  142. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_e2e_user_scenarios.py +0 -0
  143. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_evaluation_lab_hardening.py +0 -0
  144. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_evaluation_profiles.py +0 -0
  145. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_guidebook_contract.py +0 -0
  146. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_investment_analysis.py +0 -0
  147. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_investment_brain_cli.py +0 -0
  148. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_investment_brain_prompt_layers.py +0 -0
  149. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_investment_brain_registry.py +0 -0
  150. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_knowledge_wikis.py +0 -0
  151. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_mcp_broker_release_health.py +0 -0
  152. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_platform_runtime.py +0 -0
  153. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_provider_source_approval.py +0 -0
  154. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_research_forecast_surfaces.py +0 -0
  155. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_research_object_catalog.py +0 -0
  156. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_research_objects.py +0 -0
  157. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_research_spec_profiles.py +0 -0
  158. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_runtime_paths.py +0 -0
  159. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_runtime_profile.py +0 -0
  160. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_security_invariants.py +0 -0
  161. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_skill_runtime_boundaries.py +0 -0
  162. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_v1_migrations.py +0 -0
  163. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_v1_state_integrity.py +0 -0
  164. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_viewer.py +0 -0
  165. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tests/test_workspace_git_contract.py +0 -0
  166. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex.egg-info/SOURCES.txt +0 -0
  167. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex.egg-info/dependency_links.txt +0 -0
  168. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex.egg-info/entry_points.txt +0 -0
  169. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex.egg-info/requires.txt +0 -0
  170. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex.egg-info/top_level.txt +0 -0
  171. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_cli/__init__.py +0 -0
  172. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_cli/__main__.py +0 -0
  173. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_cli/calculation-runtime-lock.json +0 -0
  174. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_cli/calculation-runtime-requirements.txt +0 -0
  175. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_cli/calculation_runner.py +0 -0
  176. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_cli/commands/__init__.py +0 -0
  177. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_cli/commands/bootstrap.py +0 -0
  178. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_cli/commands/build.py +0 -0
  179. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_cli/commands/connectors.py +0 -0
  180. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_cli/commands/data_sources.py +0 -0
  181. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_cli/commands/db.py +0 -0
  182. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_cli/commands/decision.py +0 -0
  183. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_cli/commands/doctor.py +0 -0
  184. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_cli/commands/evaluation.py +0 -0
  185. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_cli/commands/forecast.py +0 -0
  186. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_cli/commands/home.py +0 -0
  187. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_cli/commands/investment_brains.py +0 -0
  188. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_cli/commands/investor_context.py +0 -0
  189. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_cli/commands/mcp.py +0 -0
  190. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_cli/commands/orders.py +0 -0
  191. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_cli/commands/policy.py +0 -0
  192. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_cli/commands/profile.py +0 -0
  193. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_cli/commands/research.py +0 -0
  194. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_cli/commands/skills.py +0 -0
  195. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_cli/commands/strategies.py +0 -0
  196. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_cli/commands/subagents.py +0 -0
  197. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_cli/commands/utils.py +0 -0
  198. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_cli/commands/wikis.py +0 -0
  199. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_cli/commands/workflow.py +0 -0
  200. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_cli/commands/workspaces.py +0 -0
  201. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_cli/generator.py +0 -0
  202. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_cli/mcp_stdio.py +0 -0
  203. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_cli/package_source.py +0 -0
  204. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_cli/service_autostart.py +0 -0
  205. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_cli/startup_status.py +0 -0
  206. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_cli/versioning.py +0 -0
  207. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/__init__.py +0 -0
  208. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/admin.py +0 -0
  209. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/api.py +0 -0
  210. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/__init__.py +0 -0
  211. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/agents.py +0 -0
  212. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/analysis_runs.py +0 -0
  213. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/artifact_bindings.py +0 -0
  214. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/artifact_catalog.py +0 -0
  215. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/artifact_quality.py +0 -0
  216. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/artifact_v2.py +0 -0
  217. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/audit.py +0 -0
  218. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/brokers.py +0 -0
  219. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/build_gateway.py +0 -0
  220. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/calculations.py +0 -0
  221. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/codex_capabilities.py +0 -0
  222. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/common.py +0 -0
  223. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/data_sources.py +0 -0
  224. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/datasets.py +0 -0
  225. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/decision_episodes.py +0 -0
  226. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/decision_packages.py +0 -0
  227. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/evaluation_lab.py +0 -0
  228. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/forecasting.py +0 -0
  229. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/git_subprocess.py +0 -0
  230. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/harness.py +0 -0
  231. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/health.py +0 -0
  232. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/investment_analysis.py +0 -0
  233. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/investment_brains.py +0 -0
  234. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/investor_context.py +0 -0
  235. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/judgment_postmortems.py +0 -0
  236. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/judgments.py +0 -0
  237. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/knowledge_wikis.py +0 -0
  238. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/managed_package_sources.py +0 -0
  239. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/markdown_preview.py +0 -0
  240. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/operator_authority.py +0 -0
  241. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/orders.py +0 -0
  242. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/policy.py +0 -0
  243. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/portfolio.py +0 -0
  244. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/postmortems.py +0 -0
  245. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/research.py +0 -0
  246. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/research_object_catalog.py +0 -0
  247. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/research_objects.py +0 -0
  248. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/research_specs.py +0 -0
  249. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/runtime.py +0 -0
  250. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/source_snapshots.py +0 -0
  251. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/viewer.py +0 -0
  252. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/wiki_viewer.py +0 -0
  253. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/workspace_git.py +0 -0
  254. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/application/workspaces.py +0 -0
  255. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/asgi.py +0 -0
  256. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/log_safety.py +0 -0
  257. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/runtime_profile.py +0 -0
  258. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/settings.py +0 -0
  259. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/static/tradingcodex_admin/favicon.svg +0 -0
  260. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/static/tradingcodex_web/assets/allPaths-DTYZmYwK.js +0 -0
  261. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/static/tradingcodex_web/assets/allPathsLoader-DcM0tTg5.js +0 -0
  262. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/static/tradingcodex_web/assets/index-Bb8LR_4w.css +0 -0
  263. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/static/tradingcodex_web/assets/index-C4QYjUvS.js +0 -0
  264. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/static/tradingcodex_web/assets/paths-BOuWfKow.js +0 -0
  265. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/static/tradingcodex_web/assets/paths-CI3Rjsyg.js +0 -0
  266. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/static/tradingcodex_web/assets/splitPathsBySizeLoader-B1K4iYsq.js +0 -0
  267. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/static/tradingcodex_web/index.html +0 -0
  268. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/urls.py +0 -0
  269. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/viewer_api.py +0 -0
  270. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/web.py +0 -0
  271. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/tradingcodex_service/wsgi.py +0 -0
  272. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/__init__.py +0 -0
  273. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/audit/files/.tradingcodex/audit/README.md +0 -0
  274. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/audit/files/trading/audit/.gitkeep +0 -0
  275. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/audit/module.json +0 -0
  276. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/codex-base/files/.codex/config.toml +0 -0
  277. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/codex-base/files/.codex/hooks/tradingcodex_hook.py +0 -0
  278. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/codex-base/files/.codex/hooks.json +0 -0
  279. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/codex-base/files/.codex/prompts/base_instructions/head-manager.md +0 -0
  280. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/codex-base/files/.codex/rules/tradingcodex.rules +0 -0
  281. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/codex-base/files/.tradingcodex/cli.py +0 -0
  282. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/codex-base/files/.tradingcodex/config.yaml +0 -0
  283. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/codex-base/files/AGENTS.md +0 -0
  284. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/codex-base/files/pyproject.toml +0 -0
  285. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/codex-base/files/tcx +0 -0
  286. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/codex-base/files/tcx-calc +0 -0
  287. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/codex-base/files/tcx-calc.cmd +0 -0
  288. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/codex-base/files/tcx.cmd +0 -0
  289. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/codex-base/module.json +0 -0
  290. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/policies/restricted-list.yaml +0 -0
  291. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/approval_receipt.schema.json +0 -0
  292. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/audit_event.schema.json +0 -0
  293. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/evidence_pack.schema.json +0 -0
  294. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/execution_result.schema.json +0 -0
  295. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/fundamental_report.schema.json +0 -0
  296. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/news_report.schema.json +0 -0
  297. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/order_ticket.schema.json +0 -0
  298. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/portfolio_review.schema.json +0 -0
  299. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/postmortem_report.schema.json +0 -0
  300. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/research_artifact.schema.json +0 -0
  301. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/risk_report.schema.json +0 -0
  302. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/technical_report.schema.json +0 -0
  303. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/thesis.schema.json +0 -0
  304. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/valuation.schema.json +0 -0
  305. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/enforcement-guardrails/module.json +0 -0
  306. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/fundamental-analyst.toml +0 -0
  307. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/instrument-analyst.toml +0 -0
  308. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/judgment-reviewer.toml +0 -0
  309. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/macro-analyst.toml +0 -0
  310. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/news-analyst.toml +0 -0
  311. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/portfolio-manager.toml +0 -0
  312. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/risk-manager.toml +0 -0
  313. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/technical-analyst.toml +0 -0
  314. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/valuation-analyst.toml +0 -0
  315. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/fixed-subagents/files/.tradingcodex/mainagent/skill-change-proposals/.gitkeep +0 -0
  316. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/fixed-subagents/module.json +0 -0
  317. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/guidance-guardrails/files/.tradingcodex/guidance/guardrails.md +0 -0
  318. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/guidance-guardrails/files/.tradingcodex/guidance/task-quality-checklist.md +0 -0
  319. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/guidance-guardrails/module.json +0 -0
  320. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/information-barriers/files/.tradingcodex/secrets.md +0 -0
  321. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/information-barriers/files/trading/forecasts/.gitkeep +0 -0
  322. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/information-barriers/files/trading/market-data/.gitkeep +0 -0
  323. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/information-barriers/files/trading/portfolio/.gitkeep +0 -0
  324. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/information-barriers/files/trading/reports/fundamental/.gitkeep +0 -0
  325. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/information-barriers/files/trading/reports/instrument/.gitkeep +0 -0
  326. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/information-barriers/files/trading/reports/macro/.gitkeep +0 -0
  327. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/information-barriers/files/trading/reports/news/.gitkeep +0 -0
  328. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/information-barriers/files/trading/reports/policy/.gitkeep +0 -0
  329. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/information-barriers/files/trading/reports/portfolio/.gitkeep +0 -0
  330. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/information-barriers/files/trading/reports/postmortem/.gitkeep +0 -0
  331. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/information-barriers/files/trading/reports/risk/.gitkeep +0 -0
  332. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/information-barriers/files/trading/reports/technical/.gitkeep +0 -0
  333. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/information-barriers/files/trading/reports/valuation/.gitkeep +0 -0
  334. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/information-barriers/files/trading/research/.gitkeep +0 -0
  335. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/information-barriers/module.json +0 -0
  336. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/paper-trading/module.json +0 -0
  337. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-automate/SKILL.md +0 -0
  338. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-automate/agents/openai.yaml +0 -0
  339. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-brain/SKILL.md +0 -0
  340. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-brain/agents/openai.yaml +0 -0
  341. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-brain/references/bundle-contract.md +0 -0
  342. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-build/SKILL.md +0 -0
  343. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-build/agents/openai.yaml +0 -0
  344. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-investor-context/SKILL.md +0 -0
  345. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-investor-context/agents/openai.yaml +0 -0
  346. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-memory/SKILL.md +0 -0
  347. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-memory/agents/openai.yaml +0 -0
  348. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-allow/agents/openai.yaml +0 -0
  349. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-cancel/agents/openai.yaml +0 -0
  350. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-submit/agents/openai.yaml +0 -0
  351. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-plan/SKILL.md +0 -0
  352. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-plan/agents/openai.yaml +0 -0
  353. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-server/SKILL.md +0 -0
  354. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-server/agents/openai.yaml +0 -0
  355. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-strategy/SKILL.md +0 -0
  356. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-strategy/agents/openai.yaml +0 -0
  357. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-wiki/SKILL.md +0 -0
  358. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-wiki/agents/openai.yaml +0 -0
  359. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-wiki/references/bundle-contract.md +0 -0
  360. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-workflow/SKILL.md +0 -0
  361. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-workflow/agents/openai.yaml +0 -0
  362. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-workflow/playbooks/research-framing.md +0 -0
  363. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/fundamental-analyst/tcx-fundamental/SKILL.md +0 -0
  364. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/fundamental-analyst/tcx-fundamental/agents/openai.yaml +0 -0
  365. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/instrument-analyst/tcx-instrument/SKILL.md +0 -0
  366. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/instrument-analyst/tcx-instrument/agents/openai.yaml +0 -0
  367. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/judgment-reviewer/tcx-judgment/SKILL.md +0 -0
  368. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/judgment-reviewer/tcx-judgment/agents/openai.yaml +0 -0
  369. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/macro-analyst/tcx-macro/SKILL.md +0 -0
  370. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/macro-analyst/tcx-macro/agents/openai.yaml +0 -0
  371. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/news-analyst/tcx-news/SKILL.md +0 -0
  372. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/news-analyst/tcx-news/agents/openai.yaml +0 -0
  373. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/portfolio-manager/tcx-order-draft/SKILL.md +0 -0
  374. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/portfolio-manager/tcx-order-draft/agents/openai.yaml +0 -0
  375. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/portfolio-manager/tcx-portfolio/SKILL.md +0 -0
  376. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/portfolio-manager/tcx-portfolio/agents/openai.yaml +0 -0
  377. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-order-approve/SKILL.md +0 -0
  378. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-order-approve/agents/openai.yaml +0 -0
  379. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-policy/SKILL.md +0 -0
  380. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-policy/agents/openai.yaml +0 -0
  381. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-risk/SKILL.md +0 -0
  382. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-risk/agents/openai.yaml +0 -0
  383. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-anti-overfit/SKILL.md +0 -0
  384. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-anti-overfit/agents/openai.yaml +0 -0
  385. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-artifact/SKILL.md +0 -0
  386. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-artifact/agents/openai.yaml +0 -0
  387. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-calculation/SKILL.md +0 -0
  388. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-calculation/agents/openai.yaml +0 -0
  389. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-calculation/references/data-runtime.md +0 -0
  390. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-calculation/references/finance-methods.md +0 -0
  391. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-data-qc/SKILL.md +0 -0
  392. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-data-qc/agents/openai.yaml +0 -0
  393. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-evidence/agents/openai.yaml +0 -0
  394. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-forecast/SKILL.md +0 -0
  395. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-forecast/agents/openai.yaml +0 -0
  396. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-scenarios/SKILL.md +0 -0
  397. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-scenarios/agents/openai.yaml +0 -0
  398. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-source-gate/agents/openai.yaml +0 -0
  399. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-source-gate/references/openbb-mcp.md +0 -0
  400. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/technical-analyst/tcx-technical/SKILL.md +0 -0
  401. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/technical-analyst/tcx-technical/agents/openai.yaml +0 -0
  402. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/valuation-analyst/tcx-valuation/SKILL.md +0 -0
  403. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/valuation-analyst/tcx-valuation/agents/openai.yaml +0 -0
  404. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/repo-skills/module.json +0 -0
  405. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/tradingcodex-mcp/files/.tradingcodex/mcp/enforcer/README.md +0 -0
  406. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/tradingcodex-mcp/files/.tradingcodex/mcp/gateway/README.md +0 -0
  407. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/tradingcodex-mcp/files/.tradingcodex/mcp/server.py +0 -0
  408. {tradingcodex-2.1.1 → tradingcodex-2.1.2}/workspace_templates/modules/tradingcodex-mcp/module.json +0 -0
@@ -2,6 +2,18 @@
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
+
5
17
  ## 2.1.1 - 2026-07-24
6
18
 
7
19
  - Reframe independent judgment review as task-relative adversarial adjudication:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tradingcodex
3
- Version: 2.1.1
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
@@ -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
@@ -547,8 +555,8 @@ consumer; without proof injected by `PreToolUse` for the current exact
547
555
  `$tcx-order-allow` turn, it has no execution authority.
548
556
 
549
557
  For already-known canonical identifiers, the final external effect remains
550
- available from a root native Codex user turn whose meaningful content matches
551
- 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:
552
560
 
553
561
  ```text
554
562
  $tcx-order-submit --ticket-id <ticket-id> --approval-receipt-id <approval-receipt-id>
@@ -557,8 +565,9 @@ $tcx-order-cancel --ticket-id <ticket-id> --broker-order-id <broker-order-id> --
557
565
  $tcx-order-cancel --ticket-id <ticket-id> --broker-order-id <broker-order-id> --approval-receipt-id <approval-receipt-id> --live-confirmation <token>
558
566
  ```
559
567
 
560
- The leading skill token may be its matching projected Markdown link; every
561
- 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
562
571
  describe a protocol and disable implicit invocation; they carry no MCP or
563
572
  broker authority. `UserPromptSubmit` recognizes the reserved invocation,
564
573
  rejects malformed or subagent forms,
@@ -567,7 +576,7 @@ parses the complete prompt deterministically, creates a workspace-bound
567
576
  an analysis run begins.
568
577
 
569
578
  For a workflow that creates or selects identifiers during the turn, the first
570
- meaningful line must instead contain exactly one canonical mode invocation:
579
+ meaningful invocation must instead be the order-allow skill:
571
580
 
572
581
  ```text
573
582
  $tcx-order-allow --mode paper
@@ -575,9 +584,10 @@ $tcx-order-allow --mode validation
575
584
  $tcx-order-allow --mode live
576
585
  ```
577
586
 
578
- The skill token may be its matching projected Markdown link, but no prose or
579
- extra flag may share the line and a non-empty workflow request must follow. The
580
- 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
581
591
  bound to workspace, session, turn, original complete prompt hash, Codex permission
582
592
  mode, and execution mode, then continues ordinary orchestration. Plan mode
583
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
@@ -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.1"
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.1
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
@@ -46,7 +46,10 @@ NATIVE_TURN_GRANT_SOURCE = "native_codex_turn_grant"
46
46
  ORDER_TURN_GRANT_TTL = timedelta(hours=1)
47
47
  ORDER_TURN_GRANT_MODES = frozenset({"paper", "validation", "live"})
48
48
  ORDER_TURN_GRANT_ACTIONS = frozenset({"submit", "cancel"})
49
- _ORDER_ALLOW_LINE = re.compile(r"^\$tcx-order-allow --mode (paper|validation|live)$")
49
+ _ORDER_ALLOW_BODY = re.compile(
50
+ r"^--mode[ \t\n]+(?P<mode>paper|validation|live)[ \t\n]+(?P<request>.+)$",
51
+ re.ASCII | re.DOTALL | re.IGNORECASE,
52
+ )
50
53
 
51
54
  _RESERVED_SKILL_TOKENS = frozenset(
52
55
  {
@@ -192,9 +195,12 @@ def parse_native_execution_invocation(
192
195
  if len(raw.encode("utf-8")) > _MAX_PROMPT_BYTES:
193
196
  raise NativeExecutionInvocationError("native execution invocation is too long")
194
197
  lines = meaningful_lines(raw)
195
- if len(lines) != 1:
196
- raise NativeExecutionInvocationError("native execution invocation must be one action-only line")
197
- value = token + (f" {invocation.tail}" if invocation.tail else "")
198
+ remaining_lines = [line for _, line in lines[1:]]
199
+ value = " ".join(
200
+ part
201
+ for part in (token, invocation.tail, *remaining_lines)
202
+ if part
203
+ )
198
204
  if any(_is_control_character(character) for character in value):
199
205
  raise NativeExecutionInvocationError("native execution invocation contains a control character")
200
206
  if any(character in value for character in ("'", '"', "\\")):
@@ -253,7 +259,7 @@ def parse_order_allow_invocation(
253
259
  prompt: Any,
254
260
  workspace_root: Path | str | None = None,
255
261
  ) -> str | None:
256
- """Return a first-meaningful-line turn-grant mode for an exact invocation."""
262
+ """Return a turn-grant mode from a reserved first invocation."""
257
263
 
258
264
  raw = raw_prompt(prompt)
259
265
  try:
@@ -266,14 +272,22 @@ def parse_order_allow_invocation(
266
272
  raise NativeExecutionInvocationError(str(exc)) from exc
267
273
  if invocation is None:
268
274
  return None
269
- match = _ORDER_ALLOW_LINE.fullmatch(f"{ORDER_ALLOW_SKILL} {invocation.tail}")
275
+ lines = meaningful_lines(raw)
276
+ body = "\n".join(
277
+ part
278
+ for part in (invocation.tail, *(line for _, line in lines[1:]))
279
+ if part
280
+ )
281
+ match = _ORDER_ALLOW_BODY.fullmatch(body)
270
282
  if match is None:
271
283
  raise NativeExecutionInvocationError(
272
- "$tcx-order-allow must use exact syntax: $tcx-order-allow --mode paper|validation|live"
284
+ "$tcx-order-allow requires --mode paper|validation|live followed by a non-empty request"
273
285
  )
274
- lines = meaningful_lines(raw)
275
- if len(lines) < 2 or not any(has_visible_content(line) for _, line in lines[1:]):
276
- raise NativeExecutionInvocationError("$tcx-order-allow requires a non-empty request after its invocation")
286
+ request = match.group("request")
287
+ if not has_visible_content(request):
288
+ raise NativeExecutionInvocationError("$tcx-order-allow requires a non-empty request")
289
+ if request.lstrip().startswith("--"):
290
+ raise NativeExecutionInvocationError("$tcx-order-allow contains an unsupported option")
277
291
  incompatible = (
278
292
  "$tcx-build",
279
293
  "$tcx-brain",
@@ -287,7 +301,7 @@ def parse_order_allow_invocation(
287
301
  mixed = next(
288
302
  (
289
303
  found
290
- for _, line in lines[1:]
304
+ for _, line in meaningful_lines(request)
291
305
  if (
292
306
  found := parse_line_invocation(
293
307
  line,
@@ -306,7 +320,7 @@ def parse_order_allow_invocation(
306
320
  )
307
321
  if len(raw.encode("utf-8")) > _MAX_TURN_GRANT_PROMPT_BYTES:
308
322
  raise NativeExecutionInvocationError("$tcx-order-allow prompt is too long")
309
- return match.group(1)
323
+ return match.group("mode").lower()
310
324
 
311
325
 
312
326
  def issue_order_turn_grant(