tradingcodex 0.2.4__tar.gz → 0.2.5__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 (300) hide show
  1. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/MANIFEST.in +1 -1
  2. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/PKG-INFO +1 -1
  3. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/docs/deployment.md +5 -3
  4. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/docs/generated-workspaces.md +7 -0
  5. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/docs/roles-skills-and-workflows.md +1 -1
  6. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/pyproject.toml +2 -1
  7. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tests/test_python_migration.py +72 -0
  8. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex.egg-info/PKG-INFO +1 -1
  9. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex.egg-info/SOURCES.txt +6 -6
  10. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/startup_status.py +56 -12
  11. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/application/components.py +2 -2
  12. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/settings.py +3 -2
  13. tradingcodex-0.2.5/tradingcodex_service/version.py +1 -0
  14. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/codex-base/files/.codex/hooks/tradingcodex_hook.py +8 -0
  15. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/codex-base/files/.codex/prompts/base_instructions/head-manager.md +6 -0
  16. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-server/SKILL.md +1 -0
  17. tradingcodex-0.2.4/tradingcodex_service/version.py +0 -1
  18. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/CONTRIBUTING.md +0 -0
  19. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/LICENSE +0 -0
  20. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/NOTICE +0 -0
  21. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/README.md +0 -0
  22. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/TRADEMARKS.md +0 -0
  23. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/__init__.py +0 -0
  24. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/audit/__init__.py +0 -0
  25. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/audit/admin.py +0 -0
  26. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/audit/apps.py +0 -0
  27. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/audit/migrations/0001_initial.py +0 -0
  28. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/audit/migrations/__init__.py +0 -0
  29. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/audit/models.py +0 -0
  30. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/harness/__init__.py +0 -0
  31. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/harness/admin.py +0 -0
  32. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/harness/apps.py +0 -0
  33. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/harness/migrations/0001_initial.py +0 -0
  34. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/harness/migrations/__init__.py +0 -0
  35. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/harness/models.py +0 -0
  36. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/harness/templatetags/__init__.py +0 -0
  37. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/integrations/__init__.py +0 -0
  38. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/integrations/admin.py +0 -0
  39. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/integrations/apps.py +0 -0
  40. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/integrations/migrations/0001_initial.py +0 -0
  41. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/integrations/migrations/0002_brokerconnection_brokeraccount_instrumentmap.py +0 -0
  42. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/integrations/migrations/__init__.py +0 -0
  43. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/integrations/models.py +0 -0
  44. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/integrations/services.py +0 -0
  45. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/mcp/__init__.py +0 -0
  46. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/mcp/admin.py +0 -0
  47. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/mcp/apps.py +0 -0
  48. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/mcp/migrations/0001_initial.py +0 -0
  49. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/mcp/migrations/__init__.py +0 -0
  50. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/mcp/models.py +0 -0
  51. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/mcp/services.py +0 -0
  52. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/orders/__init__.py +0 -0
  53. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/orders/admin.py +0 -0
  54. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/orders/apps.py +0 -0
  55. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/orders/migrations/0001_initial.py +0 -0
  56. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/orders/migrations/0002_approvalreceipt_approved_order_type_and_more.py +0 -0
  57. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/orders/migrations/0003_migrate_orderintent_to_orderticket.py +0 -0
  58. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/orders/migrations/0004_remove_order_intent_compat_fields.py +0 -0
  59. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/orders/migrations/__init__.py +0 -0
  60. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/orders/models.py +0 -0
  61. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/orders/services.py +0 -0
  62. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/policy/__init__.py +0 -0
  63. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/policy/admin.py +0 -0
  64. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/policy/apps.py +0 -0
  65. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/policy/migrations/0001_initial.py +0 -0
  66. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/policy/migrations/__init__.py +0 -0
  67. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/policy/models.py +0 -0
  68. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/policy/services.py +0 -0
  69. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/portfolio/__init__.py +0 -0
  70. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/portfolio/admin.py +0 -0
  71. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/portfolio/apps.py +0 -0
  72. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/portfolio/migrations/0001_initial.py +0 -0
  73. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/portfolio/migrations/0002_brokersyncrun_portfolioledgerevent_reconciliationrun.py +0 -0
  74. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/portfolio/migrations/__init__.py +0 -0
  75. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/portfolio/models.py +0 -0
  76. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/research/__init__.py +0 -0
  77. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/research/admin.py +0 -0
  78. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/research/apps.py +0 -0
  79. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/research/migrations/__init__.py +0 -0
  80. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/research/models.py +0 -0
  81. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/workflows/__init__.py +0 -0
  82. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/workflows/admin.py +0 -0
  83. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/workflows/apps.py +0 -0
  84. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/workflows/migrations/0001_initial.py +0 -0
  85. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/workflows/migrations/__init__.py +0 -0
  86. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/apps/workflows/models.py +0 -0
  87. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/assets/tradingcodex-banner.svg +0 -0
  88. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/docs/README.md +0 -0
  89. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/docs/components.md +0 -0
  90. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/docs/core-concepts-and-rules.md +0 -0
  91. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/docs/financial-workflow-references.md +0 -0
  92. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/docs/guardrails.md +0 -0
  93. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/docs/harness.md +0 -0
  94. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/docs/improvement-loop.md +0 -0
  95. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/docs/interfaces-and-surfaces.md +0 -0
  96. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/docs/licensing-and-commercialization.md +0 -0
  97. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/docs/product-direction.md +0 -0
  98. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/docs/research-memory-and-artifacts.md +0 -0
  99. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/docs/safety-policy-and-execution.md +0 -0
  100. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/docs/system-architecture.md +0 -0
  101. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/docs/validation-and-test-plan.md +0 -0
  102. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/install.sh +0 -0
  103. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/installation.md +0 -0
  104. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/setup.cfg +0 -0
  105. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tests/test_broker_center_prd.py +0 -0
  106. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tests/test_e2e_user_scenarios.py +0 -0
  107. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex.egg-info/dependency_links.txt +0 -0
  108. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex.egg-info/entry_points.txt +0 -0
  109. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex.egg-info/requires.txt +0 -0
  110. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex.egg-info/top_level.txt +0 -0
  111. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/__init__.py +0 -0
  112. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/__main__.py +0 -0
  113. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/commands/__init__.py +0 -0
  114. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/commands/bootstrap.py +0 -0
  115. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/commands/connectors.py +0 -0
  116. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/commands/db.py +0 -0
  117. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/commands/doctor.py +0 -0
  118. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/commands/mcp.py +0 -0
  119. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/commands/mode.py +0 -0
  120. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/commands/orders.py +0 -0
  121. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/commands/policy.py +0 -0
  122. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/commands/profile.py +0 -0
  123. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/commands/research.py +0 -0
  124. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/commands/skills.py +0 -0
  125. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/commands/strategies.py +0 -0
  126. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/commands/subagents.py +0 -0
  127. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/commands/utils.py +0 -0
  128. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/commands/workspaces.py +0 -0
  129. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/generator.py +0 -0
  130. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/mcp_stdio.py +0 -0
  131. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_cli/service_autostart.py +0 -0
  132. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/__init__.py +0 -0
  133. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/admin.py +0 -0
  134. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/api.py +0 -0
  135. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/application/__init__.py +0 -0
  136. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/application/agents.py +0 -0
  137. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/application/artifact_quality.py +0 -0
  138. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/application/audit.py +0 -0
  139. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/application/brokers.py +0 -0
  140. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/application/common.py +0 -0
  141. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/application/context_budget.py +0 -0
  142. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/application/harness.py +0 -0
  143. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/application/markdown_preview.py +0 -0
  144. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/application/orders.py +0 -0
  145. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/application/policy.py +0 -0
  146. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/application/portfolio.py +0 -0
  147. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/application/research.py +0 -0
  148. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/application/runtime.py +0 -0
  149. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/application/runtime_mode.py +0 -0
  150. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/asgi.py +0 -0
  151. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/mcp_http.py +0 -0
  152. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/mcp_runtime.py +0 -0
  153. {tradingcodex-0.2.4 → tradingcodex-0.2.5/tradingcodex_service}/static/tradingcodex_admin/favicon.svg +0 -0
  154. {tradingcodex-0.2.4 → tradingcodex-0.2.5/tradingcodex_service}/static/tradingcodex_web/app.css +0 -0
  155. {tradingcodex-0.2.4 → tradingcodex-0.2.5/tradingcodex_service}/static/tradingcodex_web/app.js +0 -0
  156. {tradingcodex-0.2.4 → tradingcodex-0.2.5/tradingcodex_service}/static/tradingcodex_web/workbench.css +0 -0
  157. {tradingcodex-0.2.4 → tradingcodex-0.2.5/tradingcodex_service}/static/vendor/alpine/alpine.min.js +0 -0
  158. {tradingcodex-0.2.4 → tradingcodex-0.2.5/tradingcodex_service}/static/vendor/htmx/htmx.min.js +0 -0
  159. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/templates/web/activity.html +0 -0
  160. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/templates/web/agent_skills.html +0 -0
  161. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/templates/web/agents.html +0 -0
  162. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/templates/web/base.html +0 -0
  163. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/templates/web/brokers.html +0 -0
  164. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/templates/web/dashboard.html +0 -0
  165. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/templates/web/fragments/role_inspector.html +0 -0
  166. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/templates/web/fragments/starter_prompt.html +0 -0
  167. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/templates/web/fragments/topology_canvas.html +0 -0
  168. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/templates/web/fragments/workspace_card.html +0 -0
  169. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/templates/web/harness.html +0 -0
  170. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/templates/web/mcp_router.html +0 -0
  171. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/templates/web/orders.html +0 -0
  172. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/templates/web/policy.html +0 -0
  173. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/templates/web/portfolio.html +0 -0
  174. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/templates/web/research.html +0 -0
  175. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/templates/web/starter_prompt.html +0 -0
  176. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/templates/web/strategies.html +0 -0
  177. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/urls.py +0 -0
  178. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/web.py +0 -0
  179. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/tradingcodex_service/wsgi.py +0 -0
  180. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/__init__.py +0 -0
  181. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/audit/files/.tradingcodex/audit/README.md +0 -0
  182. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/audit/files/trading/audit/.gitkeep +0 -0
  183. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/audit/module.json +0 -0
  184. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/codex-base/files/.codex/config.toml +0 -0
  185. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/codex-base/files/.codex/hooks.json +0 -0
  186. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/codex-base/files/.codex/rules/tradingcodex.rules +0 -0
  187. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/codex-base/files/.tradingcodex/capabilities.yaml +0 -0
  188. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/codex-base/files/.tradingcodex/cli.py +0 -0
  189. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/codex-base/files/.tradingcodex/config.yaml +0 -0
  190. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/codex-base/files/.tradingcodex/policies/policy-bindings.yaml +0 -0
  191. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/codex-base/files/.tradingcodex/policies/principals.yaml +0 -0
  192. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/codex-base/files/.tradingcodex/policies/roles.yaml +0 -0
  193. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/codex-base/files/AGENTS.md +0 -0
  194. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/codex-base/files/pyproject.toml +0 -0
  195. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/codex-base/files/tcx +0 -0
  196. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/codex-base/module.json +0 -0
  197. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/policies/access-policies.yaml +0 -0
  198. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/policies/restricted-list.yaml +0 -0
  199. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/approval_receipt.schema.json +0 -0
  200. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/audit_event.schema.json +0 -0
  201. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/evidence_pack.schema.json +0 -0
  202. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/execution_result.schema.json +0 -0
  203. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/fundamental_report.schema.json +0 -0
  204. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/news_report.schema.json +0 -0
  205. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/order_ticket.schema.json +0 -0
  206. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/portfolio_review.schema.json +0 -0
  207. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/postmortem_report.schema.json +0 -0
  208. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/research_artifact.schema.json +0 -0
  209. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/risk_report.schema.json +0 -0
  210. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/technical_report.schema.json +0 -0
  211. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/thesis.schema.json +0 -0
  212. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/valuation.schema.json +0 -0
  213. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/enforcement-guardrails/module.json +0 -0
  214. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/fixed-subagents/files/.codex/agents/execution-operator.toml +0 -0
  215. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/fixed-subagents/files/.codex/agents/fundamental-analyst.toml +0 -0
  216. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/fixed-subagents/files/.codex/agents/instrument-analyst.toml +0 -0
  217. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/fixed-subagents/files/.codex/agents/macro-analyst.toml +0 -0
  218. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/fixed-subagents/files/.codex/agents/news-analyst.toml +0 -0
  219. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/fixed-subagents/files/.codex/agents/portfolio-manager.toml +0 -0
  220. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/fixed-subagents/files/.codex/agents/risk-manager.toml +0 -0
  221. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/fixed-subagents/files/.codex/agents/technical-analyst.toml +0 -0
  222. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/fixed-subagents/files/.codex/agents/valuation-analyst.toml +0 -0
  223. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/fixed-subagents/files/.tradingcodex/mainagent/head-manager.yaml +0 -0
  224. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/fixed-subagents/files/.tradingcodex/mainagent/skill-change-proposals/.gitkeep +0 -0
  225. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/fixed-subagents/files/.tradingcodex/mainagent/subagent-registry.yaml +0 -0
  226. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/fixed-subagents/module.json +0 -0
  227. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/guidance-guardrails/files/.tradingcodex/guidance/guardrails.md +0 -0
  228. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/guidance-guardrails/files/.tradingcodex/guidance/task-quality-checklist.md +0 -0
  229. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/guidance-guardrails/module.json +0 -0
  230. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/files/.tradingcodex/policies/information-barriers.yaml +0 -0
  231. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/files/.tradingcodex/secrets.md +0 -0
  232. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/files/trading/approvals/.gitkeep +0 -0
  233. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/files/trading/market-data/.gitkeep +0 -0
  234. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/files/trading/orders/approved/.gitkeep +0 -0
  235. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/files/trading/orders/draft/.gitkeep +0 -0
  236. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/files/trading/orders/executed/.gitkeep +0 -0
  237. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/files/trading/orders/rejected/.gitkeep +0 -0
  238. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/files/trading/portfolio/.gitkeep +0 -0
  239. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/files/trading/reports/fundamental/.gitkeep +0 -0
  240. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/files/trading/reports/instrument/.gitkeep +0 -0
  241. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/files/trading/reports/macro/.gitkeep +0 -0
  242. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/files/trading/reports/news/.gitkeep +0 -0
  243. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/files/trading/reports/policy/.gitkeep +0 -0
  244. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/files/trading/reports/portfolio/.gitkeep +0 -0
  245. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/files/trading/reports/postmortem/.gitkeep +0 -0
  246. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/files/trading/reports/risk/.gitkeep +0 -0
  247. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/files/trading/reports/technical/.gitkeep +0 -0
  248. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/files/trading/reports/valuation/.gitkeep +0 -0
  249. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/files/trading/research/.gitkeep +0 -0
  250. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/information-barriers/module.json +0 -0
  251. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/paper-trading/files/.tradingcodex/mcp/adapters/paper-trading.py +0 -0
  252. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/paper-trading/module.json +0 -0
  253. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/postmortem/files/.tradingcodex/workflows/postmortem.yaml +0 -0
  254. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/postmortem/module.json +0 -0
  255. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.agents/skills/postmortem/SKILL.md +0 -0
  256. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.agents/skills/postmortem/agents/openai.yaml +0 -0
  257. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.agents/skills/strategy-creator/SKILL.md +0 -0
  258. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.agents/skills/strategy-creator/agents/openai.yaml +0 -0
  259. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-build/SKILL.md +0 -0
  260. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-build/agents/openai.yaml +0 -0
  261. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-server/agents/openai.yaml +0 -0
  262. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-workflow/SKILL.md +0 -0
  263. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-workflow/agents/openai.yaml +0 -0
  264. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/execution-operator/execute-paper-order/SKILL.md +0 -0
  265. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/execution-operator/execute-paper-order/agents/openai.yaml +0 -0
  266. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/fundamental-analyst/fundamental-analysis/SKILL.md +0 -0
  267. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/fundamental-analyst/fundamental-analysis/agents/openai.yaml +0 -0
  268. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/instrument-analyst/instrument-analysis/SKILL.md +0 -0
  269. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/instrument-analyst/instrument-analysis/agents/openai.yaml +0 -0
  270. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/macro-analyst/macro-analysis/SKILL.md +0 -0
  271. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/macro-analyst/macro-analysis/agents/openai.yaml +0 -0
  272. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/news-analyst/news-analysis/SKILL.md +0 -0
  273. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/news-analyst/news-analysis/agents/openai.yaml +0 -0
  274. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/portfolio-manager/create-order-ticket/SKILL.md +0 -0
  275. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/portfolio-manager/create-order-ticket/agents/openai.yaml +0 -0
  276. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/portfolio-manager/portfolio-review/SKILL.md +0 -0
  277. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/portfolio-manager/portfolio-review/agents/openai.yaml +0 -0
  278. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/approve-order/SKILL.md +0 -0
  279. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/approve-order/agents/openai.yaml +0 -0
  280. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/policy-review/SKILL.md +0 -0
  281. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/policy-review/agents/openai.yaml +0 -0
  282. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/review-risk/SKILL.md +0 -0
  283. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/review-risk/agents/openai.yaml +0 -0
  284. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/collect-evidence/SKILL.md +0 -0
  285. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/collect-evidence/agents/openai.yaml +0 -0
  286. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/external-data-source-gate/SKILL.md +0 -0
  287. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/external-data-source-gate/agents/openai.yaml +0 -0
  288. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/technical-analyst/technical-analysis/SKILL.md +0 -0
  289. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/technical-analyst/technical-analysis/agents/openai.yaml +0 -0
  290. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/valuation-analyst/valuation-review/SKILL.md +0 -0
  291. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/valuation-analyst/valuation-review/agents/openai.yaml +0 -0
  292. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/repo-skills/module.json +0 -0
  293. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/stub-execution/files/.tradingcodex/mcp/adapters/stub-execution.py +0 -0
  294. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/stub-execution/module.json +0 -0
  295. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/tradingcodex-mcp/files/.tradingcodex/mcp/adapters/live-adapter.contract.md +0 -0
  296. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/tradingcodex-mcp/files/.tradingcodex/mcp/enforcer/README.md +0 -0
  297. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/tradingcodex-mcp/files/.tradingcodex/mcp/gateway/README.md +0 -0
  298. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/tradingcodex-mcp/files/.tradingcodex/mcp/server.py +0 -0
  299. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/tradingcodex-mcp/files/.tradingcodex/mcp/smoke-call.py +0 -0
  300. {tradingcodex-0.2.4 → tradingcodex-0.2.5}/workspace_templates/modules/tradingcodex-mcp/module.json +0 -0
@@ -9,5 +9,5 @@ recursive-include docs *
9
9
  recursive-include workspace_templates *
10
10
  recursive-include workspace_templates .*
11
11
  recursive-include tradingcodex_service/templates *
12
- recursive-include static *
12
+ recursive-include tradingcodex_service/static *
13
13
  global-exclude *.py[cod]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tradingcodex
3
- Version: 0.2.4
3
+ Version: 0.2.5
4
4
  Summary: Codex-native trading harness with a Django service plane and approved action boundary.
5
5
  Author: TradingCodex Authors
6
6
  License-Expression: Apache-2.0
@@ -140,7 +140,7 @@ python3.11 -m venv /tmp/tcx-testpypi
140
140
  /tmp/tcx-testpypi/bin/pip install \
141
141
  --index-url https://test.pypi.org/simple/ \
142
142
  --extra-index-url https://pypi.org/simple/ \
143
- tradingcodex==0.2.4
143
+ tradingcodex==0.2.5
144
144
  rm -rf /tmp/tcx-testpypi-smoke
145
145
  mkdir -p /tmp/tcx-testpypi-smoke
146
146
  cd /tmp/tcx-testpypi-smoke
@@ -169,7 +169,7 @@ After the PyPI workflow completes:
169
169
 
170
170
  ```bash
171
171
  python3.11 -m venv /tmp/tcx-pypi
172
- /tmp/tcx-pypi/bin/pip install tradingcodex==0.2.4
172
+ /tmp/tcx-pypi/bin/pip install tradingcodex==0.2.5
173
173
  rm -rf /tmp/tcx-pypi-smoke
174
174
  mkdir -p /tmp/tcx-pypi-smoke
175
175
  cd /tmp/tcx-pypi-smoke
@@ -251,7 +251,9 @@ Use PEP 440 versions:
251
251
  ticket isolation, workspace-scoped transition audit, and startup/status fixes
252
252
  - `0.2.4` for the operate/build/execution plane rewrite, compact startup
253
253
  context, build-mode updates, and connector scaffold workflow
254
- - later patch releases for compatible fixes after `0.2.4`
254
+ - `0.2.5` for packaged web static assets and startup service mismatch notices
255
+ reaching head-manager compact context
256
+ - later patch releases for compatible fixes after `0.2.5`
255
257
  - pre-releases such as `0.3.0a1`, `0.3.0b1`, or `0.3.0rc1` when preparing
256
258
  the next minor contract
257
259
 
@@ -308,6 +308,13 @@ when explicitly asked. If project MCP config was created or changed, the user
308
308
  must fully quit and restart Codex and start a new thread because Codex may not
309
309
  hot reload project MCP config.
310
310
 
311
+ Startup context preserves incompatible service detail from `./tcx service
312
+ status`, including `service_issue`, service/package versions, DB paths, and the
313
+ recorded next action. If the issue is `version_mismatch`, `db_mismatch`, or
314
+ `port_occupied`, `head-manager` must mention the startup notice in its first
315
+ user-facing response and avoid presenting the dashboard as ready until the
316
+ recovery path is handled.
317
+
311
318
  Startup health may compare the generated workspace version in
312
319
  `.tradingcodex/generated/module-lock.json` with the installed/running `tcx`
313
320
  package version and the latest known TradingCodex release. If update is needed
@@ -352,7 +352,7 @@ and service-layer policy.
352
352
  ## Hooks Are Guidance
353
353
 
354
354
  - `UserPromptSubmit` handles prompt classification, secret warnings, direct-answer prevention context, and duplicate marker management.
355
- - `SessionStart` writes compact TradingCodex mode, permission, update, server/MCP, and routing diagnostics for `head-manager`; startup recovery and dashboard URL guidance stay in `$tcx-server`, while self-update and connector implementation stay in `$tcx-build`.
355
+ - `SessionStart` writes compact TradingCodex mode, permission, update, server/MCP, and routing diagnostics for `head-manager`; incompatible service details such as version mismatch, DB mismatch, and occupied ports must survive into compact context so `head-manager` can mention the startup notice before claiming dashboard readiness. Startup recovery and dashboard URL guidance stay in `$tcx-server`, while self-update and connector implementation stay in `$tcx-build`.
356
356
  - Official `UserPromptSubmit` matchers are ignored, so classification happens inside the hook script.
357
357
  - Hooks use command type only and do not rely on ordering or concurrency between hooks.
358
358
  - Project-local hooks load only in trusted projects and may be disabled when `features.hooks=false`.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "tradingcodex"
7
- version = "0.2.4"
7
+ version = "0.2.5"
8
8
  description = "Codex-native trading harness with a Django service plane and approved action boundary."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11,<3.15"
@@ -50,6 +50,7 @@ include-package-data = true
50
50
  include = ["tradingcodex_cli*", "tradingcodex_service*", "apps*", "workspace_templates*"]
51
51
 
52
52
  [tool.setuptools.package-data]
53
+ tradingcodex_service = ["templates/**/*", "static/**/*"]
53
54
  workspace_templates = ["**/*", "**/.*", "**/.*/**/*"]
54
55
 
55
56
  [tool.setuptools.exclude-package-data]
@@ -4,10 +4,12 @@ import importlib.util
4
4
  import json
5
5
  import os
6
6
  import re
7
+ import shutil
7
8
  import sqlite3
8
9
  import subprocess
9
10
  import sys
10
11
  import tomllib
12
+ import zipfile
11
13
  from pathlib import Path
12
14
 
13
15
  import pytest
@@ -28,6 +30,7 @@ from tradingcodex_service.application.components import (
28
30
  list_components_by_tag,
29
31
  list_harness_components,
30
32
  )
33
+ from tradingcodex_service.application.artifact_quality import estimate_tokens
31
34
  from tradingcodex_service.application.harness import (
32
35
  build_compact_dispatch_context,
33
36
  build_subagent_starter_prompt,
@@ -246,6 +249,44 @@ def test_service_status_cli_supports_plain_and_json(monkeypatch, tmp_path: Path,
246
249
  assert payload["issue"] == "version_mismatch"
247
250
 
248
251
 
252
+ def test_startup_status_preserves_service_mismatch_details(monkeypatch, tmp_path: Path) -> None:
253
+ from tradingcodex_cli import startup_status
254
+
255
+ workspace = make_workspace(tmp_path)
256
+ old_db = tmp_path / "old.sqlite3"
257
+ current_db = tmp_path / "current.sqlite3"
258
+ service_detail = {
259
+ "addr": "127.0.0.1:48267",
260
+ "url": "http://127.0.0.1:48267/",
261
+ "reachable": True,
262
+ "compatible": False,
263
+ "service": "tradingcodex",
264
+ "version": "0.2.1",
265
+ "package_version": TRADINGCODEX_VERSION,
266
+ "db_path": str(old_db),
267
+ "expected_db_path": str(current_db),
268
+ "issue": "version_mismatch",
269
+ "next_action": "Stop the older TradingCodex service or choose a free service address, then restart Codex if MCP uses the default address.",
270
+ }
271
+ monkeypatch.setattr(startup_status, "inspect_service_status", lambda addr: service_detail)
272
+ monkeypatch.setattr(
273
+ startup_status,
274
+ "_read_health",
275
+ lambda url: {"service": "tradingcodex", "version": "0.2.1", "db_path": str(old_db)},
276
+ )
277
+
278
+ status = startup_status.build_server_status(workspace)
279
+
280
+ assert status["service_status"] == "incompatible"
281
+ assert status["service_detail"]["issue"] == "version_mismatch"
282
+ assert status["service_detail"]["version"] == "0.2.1"
283
+ assert status["service_detail"]["package_version"] == TRADINGCODEX_VERSION
284
+ assert "service=0.2.1" in status["startup_notice"]
285
+ assert f"package={TRADINGCODEX_VERSION}" in status["startup_notice"]
286
+ assert status["recommended_action"] == service_detail["next_action"]
287
+ assert status["allowed_next_actions"][0] == service_detail["next_action"]
288
+
289
+
249
290
  def test_manage_runserver_uses_fixed_port_and_skips_duplicate(monkeypatch, capsys) -> None:
250
291
  from tradingcodex_cli import service_autostart
251
292
 
@@ -480,6 +521,30 @@ def test_workspace_template_module_contracts(tmp_path: Path) -> None:
480
521
  assert not (workspace / ".tradingcodex" / "state" / "tradingcodex.sqlite3").exists()
481
522
 
482
523
 
524
+ def test_package_wheel_includes_web_static_assets(tmp_path: Path) -> None:
525
+ source = tmp_path / "source"
526
+ wheel_dir = tmp_path / "wheel"
527
+ shutil.copytree(
528
+ ROOT,
529
+ source,
530
+ ignore=shutil.ignore_patterns(".git", ".pytest_cache", "__pycache__", "*.pyc", "dist", "build", "*.egg-info"),
531
+ )
532
+ wheel_dir.mkdir()
533
+
534
+ run([sys.executable, "-m", "pip", "wheel", ".", "--no-deps", "--wheel-dir", str(wheel_dir)], source)
535
+
536
+ wheels = list(wheel_dir.glob("tradingcodex-*.whl"))
537
+ assert len(wheels) == 1
538
+ with zipfile.ZipFile(wheels[0]) as wheel:
539
+ names = set(wheel.namelist())
540
+ assert "tradingcodex_service/static/tradingcodex_web/app.css" in names
541
+ assert "tradingcodex_service/static/tradingcodex_web/workbench.css" in names
542
+ assert "tradingcodex_service/static/tradingcodex_web/app.js" in names
543
+ assert "tradingcodex_service/static/vendor/htmx/htmx.min.js" in names
544
+ assert "tradingcodex_service/static/vendor/alpine/alpine.min.js" in names
545
+ assert "tradingcodex_service/static/tradingcodex_admin/favicon.svg" in names
546
+
547
+
483
548
  def test_investment_request_detection_avoids_repository_work() -> None:
484
549
  assert is_investment_workflow_request("Analyze NVDA")
485
550
  assert is_investment_workflow_request("Analyze Apple stock")
@@ -799,6 +864,7 @@ def test_repo_skill_templates_keep_instruction_boundary() -> None:
799
864
  server_skill = (skill_root / "tcx-server" / "SKILL.md").read_text(encoding="utf-8")
800
865
  assert "tcx service status" in server_skill
801
866
  assert "tcx update status --json" in server_skill
867
+ assert "service_issue=version_mismatch" in server_skill
802
868
  assert "Do not run `tcx update`" in server_skill
803
869
  build_skill = (skill_root / "tcx-build" / "SKILL.md").read_text(encoding="utf-8")
804
870
  assert "Build mode never enables `live_order`" in build_skill
@@ -920,6 +986,11 @@ def test_python_generator_creates_workspace_contract(tmp_path: Path) -> None:
920
986
  assert session_start_payload["mode_status"]["mode"] == "operate"
921
987
  assert session_start_payload["permission_status"]["codex_permission"] == "restricted"
922
988
  assert session_start_payload["update_status"]["can_self_update"] is False
989
+ assert "service_issue" in session_start_payload["server_status"]
990
+ assert "startup_notice" in session_start_payload["server_status"]
991
+ assert "next_action" in session_start_payload["server_status"]
992
+ assert "service_detail" not in session_start_payload["server_status"]
993
+ assert estimate_tokens(json.dumps(session_start_payload, ensure_ascii=False)) <= 800
923
994
  assert not (workspace / ".tradingcodex" / "state" / "tradingcodex.sqlite3").exists()
924
995
  assert not (workspace / ".tradingcodex" / "state" / "paper-portfolio.json").exists()
925
996
  db_path = run(["./tcx", "db", "path"], workspace).stdout.strip()
@@ -1001,6 +1072,7 @@ def test_python_generator_creates_workspace_contract(tmp_path: Path) -> None:
1001
1072
  assert "tradingcodex-session-context" in head_manager_instructions
1002
1073
  assert ".tradingcodex/mainagent/server-status.json" in head_manager_instructions
1003
1074
  assert "Do not open the dashboard unless the user asks" in head_manager_instructions
1075
+ assert "server_status.service_issue" in head_manager_instructions
1004
1076
  assert "update_status.can_self_update=true" in head_manager_instructions
1005
1077
  assert "fully quit and restart Codex" in head_manager_instructions
1006
1078
  assert "not an autonomous trading bot" not in head_manager_instructions
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tradingcodex
3
- Version: 0.2.4
3
+ Version: 0.2.5
4
4
  Summary: Codex-native trading harness with a Django service plane and approved action boundary.
5
5
  Author: TradingCodex Authors
6
6
  License-Expression: Apache-2.0
@@ -89,12 +89,6 @@ docs/roles-skills-and-workflows.md
89
89
  docs/safety-policy-and-execution.md
90
90
  docs/system-architecture.md
91
91
  docs/validation-and-test-plan.md
92
- static/tradingcodex_admin/favicon.svg
93
- static/tradingcodex_web/app.css
94
- static/tradingcodex_web/app.js
95
- static/tradingcodex_web/workbench.css
96
- static/vendor/alpine/alpine.min.js
97
- static/vendor/htmx/htmx.min.js
98
92
  tests/test_broker_center_prd.py
99
93
  tests/test_e2e_user_scenarios.py
100
94
  tests/test_python_migration.py
@@ -153,6 +147,12 @@ tradingcodex_service/application/portfolio.py
153
147
  tradingcodex_service/application/research.py
154
148
  tradingcodex_service/application/runtime.py
155
149
  tradingcodex_service/application/runtime_mode.py
150
+ tradingcodex_service/static/tradingcodex_admin/favicon.svg
151
+ tradingcodex_service/static/tradingcodex_web/app.css
152
+ tradingcodex_service/static/tradingcodex_web/app.js
153
+ tradingcodex_service/static/tradingcodex_web/workbench.css
154
+ tradingcodex_service/static/vendor/alpine/alpine.min.js
155
+ tradingcodex_service/static/vendor/htmx/htmx.min.js
156
156
  tradingcodex_service/templates/web/activity.html
157
157
  tradingcodex_service/templates/web/agent_skills.html
158
158
  tradingcodex_service/templates/web/agents.html
@@ -10,7 +10,7 @@ from datetime import datetime, timezone
10
10
  from pathlib import Path
11
11
  from typing import Any
12
12
 
13
- from tradingcodex_cli.service_autostart import DEFAULT_SERVICE_ADDR, service_http_url
13
+ from tradingcodex_cli.service_autostart import DEFAULT_SERVICE_ADDR, service_http_url, service_status as inspect_service_status
14
14
  from tradingcodex_service.application.runtime import tradingcodex_db_path, tradingcodex_home
15
15
  from tradingcodex_service.application.runtime_mode import get_runtime_mode_status
16
16
  from tradingcodex_service.version import TRADINGCODEX_VERSION
@@ -28,25 +28,26 @@ def build_server_status(workspace_root: Path | str, addr: str | None = None) ->
28
28
  permission_status = detect_codex_permission_status(root)
29
29
  mode_status = get_runtime_mode_status(root, full_access_detected=permission_status["full_access_detected"])
30
30
  update_status = build_update_status(root, permission_status=permission_status, mode_status=mode_status)
31
- health = _read_health(health_url)
32
- service_status = "not_running_or_unreachable"
33
- if health:
34
- service_status = "ok" if _is_compatible_health(health) else "incompatible"
31
+ service_detail = inspect_service_status(service_addr)
32
+ health = _read_health(health_url) if service_detail.get("reachable") else {}
33
+ service_state = _service_state_from_detail(service_detail)
35
34
  mcp_config_present = _is_project_mcp_config_present(root)
36
35
  restart_codex_required = not mcp_config_present
37
36
  if restart_codex_required:
38
37
  recommended_action = "Run ./tcx update or ./tcx attach ., then fully quit and restart Codex and start a new thread."
39
- elif service_status == "ok":
38
+ elif service_state == "ok":
40
39
  recommended_action = f"Open TradingCodex dashboard at {dashboard_url}"
41
- elif service_status == "incompatible":
42
- recommended_action = "Resolve the TradingCodex service version or central DB mismatch before using the dashboard."
40
+ elif service_state == "incompatible":
41
+ recommended_action = service_detail.get("next_action") or "Resolve the TradingCodex service mismatch before using the dashboard."
43
42
  else:
44
- recommended_action = "./tcx service ensure"
43
+ recommended_action = service_detail.get("next_action") or "./tcx service ensure"
44
+ startup_notice = build_startup_notice(service_detail=service_detail, service_status=service_state)
45
45
  allowed_next_actions = build_allowed_next_actions(
46
46
  mode_status=mode_status,
47
47
  permission_status=permission_status,
48
48
  update_status=update_status,
49
- service_status=service_status,
49
+ service_status=service_state,
50
+ service_detail=service_detail,
50
51
  )
51
52
  return {
52
53
  "marker": "tradingcodex-session-context",
@@ -54,8 +55,10 @@ def build_server_status(workspace_root: Path | str, addr: str | None = None) ->
54
55
  "service_addr": service_addr,
55
56
  "dashboard_url": dashboard_url,
56
57
  "health_url": health_url,
57
- "service_status": service_status,
58
+ "service_status": service_state,
59
+ "service_detail": service_detail,
58
60
  "service_health": health,
61
+ "startup_notice": startup_notice,
59
62
  "mcp_config_present": mcp_config_present,
60
63
  "restart_codex_required": restart_codex_required,
61
64
  "permission_status": permission_status,
@@ -79,7 +82,16 @@ def fallback_server_status(workspace_root: Path | str, exc: Exception, addr: str
79
82
  "dashboard_url": dashboard_url,
80
83
  "health_url": f"{dashboard_url.rstrip('/')}/api/health",
81
84
  "service_status": "unknown",
85
+ "service_detail": {
86
+ "addr": service_addr,
87
+ "url": dashboard_url,
88
+ "reachable": False,
89
+ "compatible": False,
90
+ "issue": "unknown",
91
+ "next_action": "./tcx doctor --layer service",
92
+ },
82
93
  "service_health": {},
94
+ "startup_notice": f"TradingCodex startup status check failed: {exc}",
83
95
  "mcp_config_present": _is_project_mcp_config_present(root),
84
96
  "restart_codex_required": False,
85
97
  "permission_status": permission_status,
@@ -256,10 +268,13 @@ def build_allowed_next_actions(
256
268
  permission_status: dict[str, Any],
257
269
  update_status: dict[str, Any],
258
270
  service_status: str,
271
+ service_detail: dict[str, Any] | None = None,
259
272
  ) -> list[str]:
260
273
  actions: list[str] = []
261
274
  if service_status != "ok":
262
- actions.append("./tcx service ensure")
275
+ service_detail = service_detail or {}
276
+ next_action = str(service_detail.get("next_action") or "").strip()
277
+ actions.append(next_action or "./tcx service ensure")
263
278
  if update_status.get("update_available"):
264
279
  if update_status.get("can_self_update"):
265
280
  actions.append(f"On explicit user request, run {update_status['command']} and then stop for Codex restart")
@@ -275,6 +290,35 @@ def build_allowed_next_actions(
275
290
  return actions
276
291
 
277
292
 
293
+ def _service_state_from_detail(service_detail: dict[str, Any]) -> str:
294
+ if service_detail.get("compatible"):
295
+ return "ok"
296
+ if service_detail.get("reachable"):
297
+ return "incompatible"
298
+ return "not_running_or_unreachable"
299
+
300
+
301
+ def build_startup_notice(*, service_detail: dict[str, Any], service_status: str) -> str:
302
+ issue = str(service_detail.get("issue") or "").strip()
303
+ if service_status == "ok" or not issue:
304
+ return ""
305
+ next_action = str(service_detail.get("next_action") or "").strip()
306
+ if issue == "version_mismatch":
307
+ service_version = service_detail.get("version") or "unknown"
308
+ package_version = service_detail.get("package_version") or TRADINGCODEX_VERSION
309
+ return f"TradingCodex service version mismatch: service={service_version} package={package_version}. {next_action}"
310
+ if issue == "db_mismatch":
311
+ service_db = service_detail.get("db_path") or "unknown"
312
+ expected_db = service_detail.get("expected_db_path") or str(tradingcodex_db_path())
313
+ return f"TradingCodex service DB mismatch: service={service_db} package={expected_db}. {next_action}"
314
+ if issue == "port_occupied":
315
+ addr = service_detail.get("addr") or DEFAULT_SERVICE_ADDR
316
+ return f"TradingCodex service port is occupied by a non-TradingCodex process at {addr}. {next_action}"
317
+ if issue == "not_running":
318
+ return ""
319
+ return next_action
320
+
321
+
278
322
  def latest_release_info() -> dict[str, str]:
279
323
  override = os.environ.get("TRADINGCODEX_LATEST_RELEASE_VERSION", "").strip()
280
324
  if override:
@@ -85,7 +85,7 @@ HARNESS_COMPONENTS: tuple[HarnessComponent, ...] = (
85
85
  HarnessComponent(
86
86
  id="runtime-mode-and-build-plane",
87
87
  label="Runtime Mode And Build Plane",
88
- summary="Separates operate, build, and execution planes; gates self-update and connector implementation behind full access plus explicit build mode.",
88
+ summary="Separates operate, build, and execution planes; preserves startup service/update mismatch guidance; gates self-update and connector implementation behind full access plus explicit build mode.",
89
89
  status="core",
90
90
  tags=("guardrail.guidance", "guardrail.enforcement", "improvement.workflow_quality"),
91
91
  surfaces={
@@ -99,7 +99,7 @@ HARNESS_COMPONENTS: tuple[HarnessComponent, ...] = (
99
99
  },
100
100
  depends_on=("responsibility-boundary-contract", "broker-center", "execution-boundary"),
101
101
  owned_capabilities=("runtime.mode", "build.self_update", "build.connector_scaffold"),
102
- validation=("pytest", "generated workspace contract", "Codex smoke checks"),
102
+ validation=("pytest", "startup service mismatch diagnostics", "generated workspace contract", "Codex smoke checks"),
103
103
  ),
104
104
  HarnessComponent(
105
105
  id="artifact-quality-contract",
@@ -3,7 +3,8 @@ from __future__ import annotations
3
3
  import os
4
4
  from pathlib import Path
5
5
 
6
- BASE_DIR = Path(__file__).resolve().parent.parent
6
+ SERVICE_DIR = Path(__file__).resolve().parent
7
+ BASE_DIR = SERVICE_DIR.parent
7
8
 
8
9
 
9
10
  def default_db_name() -> str:
@@ -67,7 +68,7 @@ TIME_ZONE = "UTC"
67
68
  USE_I18N = True
68
69
  USE_TZ = True
69
70
  STATIC_URL = "static/"
70
- STATICFILES_DIRS = [BASE_DIR / "static"]
71
+ STATICFILES_DIRS = [SERVICE_DIR / "static"]
71
72
 
72
73
  TEMPLATES = [
73
74
  {
@@ -0,0 +1 @@
1
+ TRADINGCODEX_VERSION = "0.2.5"
@@ -66,6 +66,7 @@ def session_start(payload: dict) -> None:
66
66
  server_status = fallback_server_status(ROOT, exc)
67
67
  append_hook_audit({"event": "session-start", "warning": "server status check failed", "error": str(exc)})
68
68
  update_status = server_status["update_status"]
69
+ service_detail = server_status.get("service_detail") or {}
69
70
  readiness = {
70
71
  "marker": "tradingcodex-session-context",
71
72
  "mode_status": server_status["mode_status"],
@@ -83,6 +84,13 @@ def session_start(payload: dict) -> None:
83
84
  "status_path": ".tradingcodex/mainagent/server-status.json",
84
85
  "dashboard_url": server_status["dashboard_url"],
85
86
  "service_status": server_status["service_status"],
87
+ "service_issue": service_detail.get("issue", ""),
88
+ "service_version": service_detail.get("version", ""),
89
+ "package_version": service_detail.get("package_version", ""),
90
+ "service_db_path": service_detail.get("db_path", ""),
91
+ "expected_db_path": service_detail.get("expected_db_path", ""),
92
+ "next_action": service_detail.get("next_action", ""),
93
+ "startup_notice": server_status.get("startup_notice", ""),
86
94
  "restart_codex_required": server_status["restart_codex_required"],
87
95
  "recommended_action": server_status["recommended_action"],
88
96
  },
@@ -25,6 +25,12 @@ Use only these startup fields unless more detail is needed:
25
25
 
26
26
  If the status file is missing, stale, or unhealthy, use `$tcx-server`. Do not open the dashboard unless the user asks.
27
27
 
28
+ If `server_status.service_issue` is `version_mismatch`, `db_mismatch`, or
29
+ `port_occupied`, mention the startup notice in your first user-facing response
30
+ before claiming the dashboard is ready. Give `server_status.next_action` or
31
+ `server_status.recommended_action` as the recovery path. Do not proceed as if
32
+ the old service is compatible.
33
+
28
34
  If `update_status.update_available=true`:
29
35
 
30
36
  - In restricted permission or operate mode, explain that self-update requires Codex full access plus `tcx mode set build --reason <reason>`, or give `update_status.command` for terminal use.
@@ -14,6 +14,7 @@ Use this skill for operate-plane TradingCodex status checks, service recovery, d
14
14
  3. Use `./tcx mode status` and `./tcx update status --json` for mode/update posture.
15
15
  4. Use read-only connector commands and MCP tools for broker profile, capability, instrument constraints, sync state, and order status.
16
16
  5. If update or build work is requested but build is not enabled, explain that Codex full access plus `tcx mode set build --reason <reason>` is required, or give the terminal command.
17
+ 6. If startup context reports `service_issue=version_mismatch`, `db_mismatch`, or `port_occupied`, report the issue with service/package versions or DB paths when present, and give the recorded next action before opening or recommending the dashboard.
17
18
 
18
19
  ## Hard Stops
19
20
 
@@ -1 +0,0 @@
1
- TRADINGCODEX_VERSION = "0.2.4"
File without changes
File without changes
File without changes
File without changes