tradingcodex 0.3.1__tar.gz → 0.3.3__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 (310) hide show
  1. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/PKG-INFO +2 -2
  2. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/README.md +1 -1
  3. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/docs/README.md +1 -1
  4. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/docs/core-concepts-and-rules.md +3 -0
  5. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/docs/deployment.md +15 -45
  6. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/docs/generated-workspaces.md +8 -4
  7. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/docs/research-memory-and-artifacts.md +2 -0
  8. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/docs/roles-skills-and-workflows.md +11 -3
  9. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/docs/validation-and-test-plan.md +3 -0
  10. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/pyproject.toml +1 -1
  11. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tests/test_python_migration.py +266 -5
  12. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex.egg-info/PKG-INFO +2 -2
  13. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_cli/commands/bootstrap.py +1 -1
  14. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_cli/service_autostart.py +28 -4
  15. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_cli/startup_status.py +39 -7
  16. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/application/harness.py +9 -3
  17. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/mcp_runtime.py +1 -1
  18. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/static/tradingcodex_web/app.css +2 -2
  19. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/templates/web/agents.html +15 -12
  20. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/templates/web/fragments/starter_prompt.html +53 -59
  21. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/templates/web/research.html +15 -12
  22. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/templates/web/strategies.html +15 -12
  23. tradingcodex-0.3.3/tradingcodex_service/version.py +1 -0
  24. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/codex-base/files/.codex/prompts/base_instructions/head-manager.md +10 -0
  25. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/codex-base/files/tcx +0 -3
  26. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-workflow/SKILL.md +1 -1
  27. tradingcodex-0.3.1/tradingcodex_service/version.py +0 -1
  28. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/CONTRIBUTING.md +0 -0
  29. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/LICENSE +0 -0
  30. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/MANIFEST.in +0 -0
  31. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/NOTICE +0 -0
  32. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/TRADEMARKS.md +0 -0
  33. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/__init__.py +0 -0
  34. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/audit/__init__.py +0 -0
  35. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/audit/admin.py +0 -0
  36. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/audit/apps.py +0 -0
  37. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/audit/migrations/0001_initial.py +0 -0
  38. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/audit/migrations/__init__.py +0 -0
  39. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/audit/models.py +0 -0
  40. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/harness/__init__.py +0 -0
  41. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/harness/admin.py +0 -0
  42. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/harness/apps.py +0 -0
  43. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/harness/migrations/0001_initial.py +0 -0
  44. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/harness/migrations/__init__.py +0 -0
  45. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/harness/models.py +0 -0
  46. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/harness/templatetags/__init__.py +0 -0
  47. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/integrations/__init__.py +0 -0
  48. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/integrations/admin.py +0 -0
  49. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/integrations/apps.py +0 -0
  50. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/integrations/migrations/0001_initial.py +0 -0
  51. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/integrations/migrations/0002_brokerconnection_brokeraccount_instrumentmap.py +0 -0
  52. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/integrations/migrations/__init__.py +0 -0
  53. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/integrations/models.py +0 -0
  54. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/mcp/__init__.py +0 -0
  55. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/mcp/admin.py +0 -0
  56. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/mcp/apps.py +0 -0
  57. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/mcp/migrations/0001_initial.py +0 -0
  58. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/mcp/migrations/__init__.py +0 -0
  59. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/mcp/models.py +0 -0
  60. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/mcp/services.py +0 -0
  61. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/orders/__init__.py +0 -0
  62. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/orders/admin.py +0 -0
  63. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/orders/apps.py +0 -0
  64. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/orders/migrations/0001_initial.py +0 -0
  65. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/orders/migrations/0002_approvalreceipt_approved_order_type_and_more.py +0 -0
  66. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/orders/migrations/0003_migrate_orderintent_to_orderticket.py +0 -0
  67. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/orders/migrations/0004_remove_order_intent_compat_fields.py +0 -0
  68. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/orders/migrations/__init__.py +0 -0
  69. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/orders/models.py +0 -0
  70. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/orders/services.py +0 -0
  71. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/policy/__init__.py +0 -0
  72. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/policy/admin.py +0 -0
  73. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/policy/apps.py +0 -0
  74. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/policy/migrations/0001_initial.py +0 -0
  75. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/policy/migrations/__init__.py +0 -0
  76. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/policy/models.py +0 -0
  77. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/policy/services.py +0 -0
  78. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/portfolio/__init__.py +0 -0
  79. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/portfolio/admin.py +0 -0
  80. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/portfolio/apps.py +0 -0
  81. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/portfolio/migrations/0001_initial.py +0 -0
  82. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/portfolio/migrations/0002_brokersyncrun_portfolioledgerevent_reconciliationrun.py +0 -0
  83. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/portfolio/migrations/__init__.py +0 -0
  84. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/portfolio/models.py +0 -0
  85. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/workflows/__init__.py +0 -0
  86. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/workflows/admin.py +0 -0
  87. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/workflows/apps.py +0 -0
  88. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/workflows/migrations/0001_initial.py +0 -0
  89. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/workflows/migrations/__init__.py +0 -0
  90. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/apps/workflows/models.py +0 -0
  91. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/assets/tradingcodex-banner.svg +0 -0
  92. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/docs/artifact-supervisor-loop-prd.md +0 -0
  93. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/docs/components.md +0 -0
  94. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/docs/financial-workflow-references.md +0 -0
  95. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/docs/guardrails.md +0 -0
  96. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/docs/harness.md +0 -0
  97. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/docs/improvement-loop.md +0 -0
  98. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/docs/interfaces-and-surfaces.md +0 -0
  99. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/docs/licensing-and-commercialization.md +0 -0
  100. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/docs/product-direction.md +0 -0
  101. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/docs/safety-policy-and-execution.md +0 -0
  102. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/docs/system-architecture.md +0 -0
  103. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/docs/user-facing-skills.md +0 -0
  104. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/install.sh +0 -0
  105. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/installation.md +0 -0
  106. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/setup.cfg +0 -0
  107. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tests/test_broker_center_prd.py +0 -0
  108. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tests/test_e2e_user_scenarios.py +0 -0
  109. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex.egg-info/SOURCES.txt +0 -0
  110. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex.egg-info/dependency_links.txt +0 -0
  111. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex.egg-info/entry_points.txt +0 -0
  112. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex.egg-info/requires.txt +0 -0
  113. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex.egg-info/top_level.txt +0 -0
  114. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_cli/__init__.py +0 -0
  115. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_cli/__main__.py +0 -0
  116. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_cli/commands/__init__.py +0 -0
  117. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_cli/commands/connectors.py +0 -0
  118. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_cli/commands/db.py +0 -0
  119. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_cli/commands/decision.py +0 -0
  120. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_cli/commands/doctor.py +0 -0
  121. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_cli/commands/mcp.py +0 -0
  122. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_cli/commands/mode.py +0 -0
  123. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_cli/commands/orders.py +0 -0
  124. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_cli/commands/policy.py +0 -0
  125. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_cli/commands/profile.py +0 -0
  126. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_cli/commands/research.py +0 -0
  127. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_cli/commands/skills.py +0 -0
  128. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_cli/commands/strategies.py +0 -0
  129. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_cli/commands/subagents.py +0 -0
  130. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_cli/commands/utils.py +0 -0
  131. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_cli/commands/workflow.py +0 -0
  132. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_cli/commands/workspaces.py +0 -0
  133. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_cli/generator.py +0 -0
  134. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_cli/mcp_stdio.py +0 -0
  135. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/__init__.py +0 -0
  136. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/admin.py +0 -0
  137. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/api.py +0 -0
  138. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/application/__init__.py +0 -0
  139. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/application/agents.py +0 -0
  140. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/application/artifact_quality.py +0 -0
  141. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/application/audit.py +0 -0
  142. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/application/brokers.py +0 -0
  143. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/application/common.py +0 -0
  144. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/application/components.py +0 -0
  145. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/application/context_budget.py +0 -0
  146. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/application/decision_packages.py +0 -0
  147. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/application/markdown_preview.py +0 -0
  148. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/application/orders.py +0 -0
  149. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/application/policy.py +0 -0
  150. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/application/portfolio.py +0 -0
  151. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/application/research.py +0 -0
  152. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/application/runtime.py +0 -0
  153. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/application/runtime_mode.py +0 -0
  154. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/application/workflow_planner.py +0 -0
  155. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/application/workflow_routing.py +0 -0
  156. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/asgi.py +0 -0
  157. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/settings.py +0 -0
  158. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/static/tradingcodex_admin/favicon.svg +0 -0
  159. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/static/tradingcodex_web/app.js +0 -0
  160. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/static/vendor/htmx/htmx.min.js +0 -0
  161. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/templates/web/activity.html +0 -0
  162. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/templates/web/agent_skills.html +0 -0
  163. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/templates/web/base.html +0 -0
  164. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/templates/web/brokers.html +0 -0
  165. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/templates/web/dashboard.html +0 -0
  166. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/templates/web/decisions.html +0 -0
  167. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/templates/web/fragments/role_inspector.html +0 -0
  168. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/templates/web/fragments/topology_canvas.html +0 -0
  169. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/templates/web/fragments/workspace_card.html +0 -0
  170. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/templates/web/harness.html +0 -0
  171. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/templates/web/mcp_router.html +0 -0
  172. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/templates/web/orders.html +0 -0
  173. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/templates/web/policy.html +0 -0
  174. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/templates/web/portfolio.html +0 -0
  175. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/templates/web/starter_prompt.html +0 -0
  176. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/urls.py +0 -0
  177. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/web.py +0 -0
  178. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/tradingcodex_service/wsgi.py +0 -0
  179. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/__init__.py +0 -0
  180. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/audit/files/.tradingcodex/audit/README.md +0 -0
  181. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/audit/files/trading/audit/.gitkeep +0 -0
  182. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/audit/module.json +0 -0
  183. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/codex-base/files/.codex/config.toml +0 -0
  184. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/codex-base/files/.codex/hooks/tradingcodex_hook.py +0 -0
  185. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/codex-base/files/.codex/hooks.json +0 -0
  186. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/codex-base/files/.codex/rules/tradingcodex.rules +0 -0
  187. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/codex-base/files/.tradingcodex/capabilities.yaml +0 -0
  188. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/codex-base/files/.tradingcodex/cli.py +0 -0
  189. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/codex-base/files/.tradingcodex/config.yaml +0 -0
  190. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/codex-base/files/.tradingcodex/policies/policy-bindings.yaml +0 -0
  191. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/codex-base/files/.tradingcodex/policies/principals.yaml +0 -0
  192. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/codex-base/files/.tradingcodex/policies/roles.yaml +0 -0
  193. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/codex-base/files/AGENTS.md +0 -0
  194. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/codex-base/files/pyproject.toml +0 -0
  195. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/codex-base/module.json +0 -0
  196. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/policies/access-policies.yaml +0 -0
  197. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/policies/restricted-list.yaml +0 -0
  198. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/approval_receipt.schema.json +0 -0
  199. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/audit_event.schema.json +0 -0
  200. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/evidence_pack.schema.json +0 -0
  201. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/execution_result.schema.json +0 -0
  202. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/fundamental_report.schema.json +0 -0
  203. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/news_report.schema.json +0 -0
  204. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/order_ticket.schema.json +0 -0
  205. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/portfolio_review.schema.json +0 -0
  206. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/postmortem_report.schema.json +0 -0
  207. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/research_artifact.schema.json +0 -0
  208. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/risk_report.schema.json +0 -0
  209. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/technical_report.schema.json +0 -0
  210. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/thesis.schema.json +0 -0
  211. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/valuation.schema.json +0 -0
  212. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/enforcement-guardrails/module.json +0 -0
  213. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/fixed-subagents/files/.codex/agents/execution-operator.toml +0 -0
  214. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/fixed-subagents/files/.codex/agents/fundamental-analyst.toml +0 -0
  215. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/fixed-subagents/files/.codex/agents/instrument-analyst.toml +0 -0
  216. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/fixed-subagents/files/.codex/agents/judgment-reviewer.toml +0 -0
  217. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/fixed-subagents/files/.codex/agents/macro-analyst.toml +0 -0
  218. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/fixed-subagents/files/.codex/agents/news-analyst.toml +0 -0
  219. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/fixed-subagents/files/.codex/agents/portfolio-manager.toml +0 -0
  220. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/fixed-subagents/files/.codex/agents/risk-manager.toml +0 -0
  221. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/fixed-subagents/files/.codex/agents/technical-analyst.toml +0 -0
  222. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/fixed-subagents/files/.codex/agents/valuation-analyst.toml +0 -0
  223. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/fixed-subagents/files/.tradingcodex/mainagent/skill-change-proposals/.gitkeep +0 -0
  224. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/fixed-subagents/module.json +0 -0
  225. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/guidance-guardrails/files/.tradingcodex/guidance/guardrails.md +0 -0
  226. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/guidance-guardrails/files/.tradingcodex/guidance/task-quality-checklist.md +0 -0
  227. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/guidance-guardrails/module.json +0 -0
  228. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/information-barriers/files/.tradingcodex/policies/information-barriers.yaml +0 -0
  229. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/information-barriers/files/.tradingcodex/secrets.md +0 -0
  230. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/information-barriers/files/trading/approvals/.gitkeep +0 -0
  231. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/information-barriers/files/trading/forecasts/.gitkeep +0 -0
  232. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/information-barriers/files/trading/market-data/.gitkeep +0 -0
  233. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/information-barriers/files/trading/orders/approved/.gitkeep +0 -0
  234. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/information-barriers/files/trading/orders/draft/.gitkeep +0 -0
  235. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/information-barriers/files/trading/orders/executed/.gitkeep +0 -0
  236. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/information-barriers/files/trading/orders/rejected/.gitkeep +0 -0
  237. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/information-barriers/files/trading/portfolio/.gitkeep +0 -0
  238. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/information-barriers/files/trading/reports/fundamental/.gitkeep +0 -0
  239. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/information-barriers/files/trading/reports/instrument/.gitkeep +0 -0
  240. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/information-barriers/files/trading/reports/macro/.gitkeep +0 -0
  241. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/information-barriers/files/trading/reports/news/.gitkeep +0 -0
  242. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/information-barriers/files/trading/reports/policy/.gitkeep +0 -0
  243. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/information-barriers/files/trading/reports/portfolio/.gitkeep +0 -0
  244. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/information-barriers/files/trading/reports/postmortem/.gitkeep +0 -0
  245. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/information-barriers/files/trading/reports/risk/.gitkeep +0 -0
  246. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/information-barriers/files/trading/reports/technical/.gitkeep +0 -0
  247. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/information-barriers/files/trading/reports/valuation/.gitkeep +0 -0
  248. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/information-barriers/files/trading/research/.gitkeep +0 -0
  249. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/information-barriers/module.json +0 -0
  250. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/paper-trading/module.json +0 -0
  251. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/postmortem/files/.tradingcodex/workflows/postmortem.yaml +0 -0
  252. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/postmortem/module.json +0 -0
  253. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.agents/skills/automate-workflow/SKILL.md +0 -0
  254. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.agents/skills/automate-workflow/agents/openai.yaml +0 -0
  255. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.agents/skills/plan-workflow/SKILL.md +0 -0
  256. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.agents/skills/plan-workflow/agents/openai.yaml +0 -0
  257. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.agents/skills/postmortem/SKILL.md +0 -0
  258. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.agents/skills/postmortem/agents/openai.yaml +0 -0
  259. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.agents/skills/strategy-creator/SKILL.md +0 -0
  260. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.agents/skills/strategy-creator/agents/openai.yaml +0 -0
  261. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-build/SKILL.md +0 -0
  262. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-build/agents/openai.yaml +0 -0
  263. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-server/SKILL.md +0 -0
  264. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-server/agents/openai.yaml +0 -0
  265. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-workflow/agents/openai.yaml +0 -0
  266. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-workflow/references/decision-quality-spine.md +0 -0
  267. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/execution-operator/execute-paper-order/SKILL.md +0 -0
  268. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/execution-operator/execute-paper-order/agents/openai.yaml +0 -0
  269. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/fundamental-analyst/fundamental-analysis/SKILL.md +0 -0
  270. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/fundamental-analyst/fundamental-analysis/agents/openai.yaml +0 -0
  271. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/instrument-analyst/instrument-analysis/SKILL.md +0 -0
  272. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/instrument-analyst/instrument-analysis/agents/openai.yaml +0 -0
  273. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/judgment-reviewer/agent-judgment-review/SKILL.md +0 -0
  274. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/judgment-reviewer/agent-judgment-review/agents/openai.yaml +0 -0
  275. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/macro-analyst/macro-analysis/SKILL.md +0 -0
  276. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/macro-analyst/macro-analysis/agents/openai.yaml +0 -0
  277. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/news-analyst/news-analysis/SKILL.md +0 -0
  278. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/news-analyst/news-analysis/agents/openai.yaml +0 -0
  279. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/portfolio-manager/create-order-ticket/SKILL.md +0 -0
  280. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/portfolio-manager/create-order-ticket/agents/openai.yaml +0 -0
  281. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/portfolio-manager/portfolio-review/SKILL.md +0 -0
  282. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/portfolio-manager/portfolio-review/agents/openai.yaml +0 -0
  283. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/approve-order/SKILL.md +0 -0
  284. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/approve-order/agents/openai.yaml +0 -0
  285. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/policy-review/SKILL.md +0 -0
  286. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/policy-review/agents/openai.yaml +0 -0
  287. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/review-risk/SKILL.md +0 -0
  288. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/review-risk/agents/openai.yaml +0 -0
  289. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/anti-overfit-validation/SKILL.md +0 -0
  290. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/anti-overfit-validation/agents/openai.yaml +0 -0
  291. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/collect-evidence/SKILL.md +0 -0
  292. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/collect-evidence/agents/openai.yaml +0 -0
  293. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/external-data-source-gate/SKILL.md +0 -0
  294. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/external-data-source-gate/agents/openai.yaml +0 -0
  295. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/forecasting-discipline/SKILL.md +0 -0
  296. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/forecasting-discipline/agents/openai.yaml +0 -0
  297. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/numeric-data-qc/SKILL.md +0 -0
  298. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/numeric-data-qc/agents/openai.yaml +0 -0
  299. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/thesis-scenario-tree/SKILL.md +0 -0
  300. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/thesis-scenario-tree/agents/openai.yaml +0 -0
  301. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/technical-analyst/technical-analysis/SKILL.md +0 -0
  302. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/technical-analyst/technical-analysis/agents/openai.yaml +0 -0
  303. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/valuation-analyst/valuation-review/SKILL.md +0 -0
  304. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/valuation-analyst/valuation-review/agents/openai.yaml +0 -0
  305. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/repo-skills/module.json +0 -0
  306. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/stub-execution/module.json +0 -0
  307. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/tradingcodex-mcp/files/.tradingcodex/mcp/enforcer/README.md +0 -0
  308. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/tradingcodex-mcp/files/.tradingcodex/mcp/gateway/README.md +0 -0
  309. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/tradingcodex-mcp/files/.tradingcodex/mcp/server.py +0 -0
  310. {tradingcodex-0.3.1 → tradingcodex-0.3.3}/workspace_templates/modules/tradingcodex-mcp/module.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tradingcodex
3
- Version: 0.3.1
3
+ Version: 0.3.3
4
4
  Summary: Agentic investment workflow harness for Codex-native research and service-gated execution checks.
5
5
  Author: TradingCodex Authors
6
6
  License-Expression: Apache-2.0
@@ -229,7 +229,7 @@ provide investment recommendations or guarantee returns.
229
229
  | Status | Milestone |
230
230
  | --- | --- |
231
231
  | Shipped | Generated Codex workspace, fixed role roster, project MCP config, Django service plane, local web dashboard, Admin, Ninja API, file-native research memory, component registry, policy/audit primitives. |
232
- | Current `0.3.1` | Codex-native Decision Packages, independent judgment-review gate, staged workflow planning, artifact-supervisor loop closure state, Evidence Run/Validation Cards, provider capability profiles, and Python `>=3.11,<3.15` support. |
232
+ | Current `0.3.3` | Flexible package/workspace update status, skipped-version Django migration smoke coverage, brief research chat replies with saved head-manager synthesis reports, Codex-native Decision Packages, independent judgment-review gate, staged workflow planning, artifact-supervisor loop closure state, Evidence Run/Validation Cards, provider capability profiles, and Python `>=3.11,<3.15` support. |
233
233
  | Next | Deeper validation scenarios, richer provider capability profiles, stronger generated-workspace smoke coverage, and improved artifact quality tooling. |
234
234
  | Future | Separately governed verified adapters, hosted/managed services, enterprise policy/compliance packs, and broker-specific live providers only after explicit product, policy, adapter, and validation work. |
235
235
 
@@ -198,7 +198,7 @@ provide investment recommendations or guarantee returns.
198
198
  | Status | Milestone |
199
199
  | --- | --- |
200
200
  | Shipped | Generated Codex workspace, fixed role roster, project MCP config, Django service plane, local web dashboard, Admin, Ninja API, file-native research memory, component registry, policy/audit primitives. |
201
- | Current `0.3.1` | Codex-native Decision Packages, independent judgment-review gate, staged workflow planning, artifact-supervisor loop closure state, Evidence Run/Validation Cards, provider capability profiles, and Python `>=3.11,<3.15` support. |
201
+ | Current `0.3.3` | Flexible package/workspace update status, skipped-version Django migration smoke coverage, brief research chat replies with saved head-manager synthesis reports, Codex-native Decision Packages, independent judgment-review gate, staged workflow planning, artifact-supervisor loop closure state, Evidence Run/Validation Cards, provider capability profiles, and Python `>=3.11,<3.15` support. |
202
202
  | Next | Deeper validation scenarios, richer provider capability profiles, stronger generated-workspace smoke coverage, and improved artifact quality tooling. |
203
203
  | Future | Separately governed verified adapters, hosted/managed services, enterprise policy/compliance packs, and broker-specific live providers only after explicit product, policy, adapter, and validation work. |
204
204
 
@@ -64,7 +64,7 @@ If these layers disagree, treat `docs/` as the durable product intent and fix th
64
64
  | [interfaces-and-surfaces.md](./interfaces-and-surfaces.md) | Product web, Django Admin, Django Ninja API, MCP boundary, CLI, generated wrapper behavior, and external MCP surface. |
65
65
  | [generated-workspaces.md](./generated-workspaces.md) | `tcx attach`, `tcx init`, `tcx update`, generated files, project-scoped MCP config, hooks, workspace provenance, profile scope, and template rules. |
66
66
  | [validation-and-test-plan.md](./validation-and-test-plan.md) | Required validation commands, unit/API/generator/smoke coverage, MCP smokes, broker provider smokes, routing scenarios, and release-sensitive checks. |
67
- | [deployment.md](./deployment.md) | PyPI/TestPyPI release process, CI/CD, Trusted Publishing, installer/update policy, versioning, and what is not deployed. |
67
+ | [deployment.md](./deployment.md) | PyPI release process, CI/CD, Trusted Publishing, installer/update policy, versioning, and what is not deployed. |
68
68
  | [licensing-and-commercialization.md](./licensing-and-commercialization.md) | Apache-2.0 open-core boundary, generated workspace ownership, contributions, trademark posture, and legal review needs. |
69
69
 
70
70
  ## Change-To-Docs Map
@@ -96,6 +96,9 @@ subagents. Detailed responsibilities live in
96
96
  Handoff states are `accepted`, `revise`, `blocked`, or `waiting`. Only accepted
97
97
  artifacts move downstream. `head-manager` may synthesize accepted outputs and
98
98
  conflicts, but must not repair missing specialist work with direct analysis.
99
+ When synthesis is allowed, the full user-facing synthesis should be saved as a
100
+ workspace Markdown report; the chat reply should stay brief and point to that
101
+ report.
99
102
 
100
103
  ## Execution Lifecycle Snapshot
101
104
 
@@ -34,9 +34,6 @@ Use Python 3.11 for release build verification and keep CI green across the
34
34
  supported range. The package metadata requires `>=3.11,<3.15`, and CI runs on
35
35
  Python 3.11, 3.12, 3.13, and 3.14.
36
36
 
37
- Create separate PyPI and TestPyPI accounts. TestPyPI is a separate service and
38
- does not share login state with PyPI.
39
-
40
37
  Configure Trusted Publishing before the first upload. Do not store long-lived
41
38
  PyPI API tokens in GitHub repository secrets unless Trusted Publishing is not
42
39
  available.
@@ -46,12 +43,9 @@ Trusted Publisher settings:
46
43
  | Index | Project | Owner | Repository | Workflow | Environment |
47
44
  | --- | --- | --- | --- | --- | --- |
48
45
  | PyPI | `tradingcodex` | repository owner/org | repository name | `release.yml` | `pypi` |
49
- | TestPyPI | `tradingcodex` | repository owner/org | repository name | `release.yml` | `testpypi` |
50
-
51
- On GitHub, create both environments:
52
46
 
53
- - `testpypi`: no manual approval required by default
54
- - `pypi`: require manual approval before deployment
47
+ On GitHub, create the `pypi` environment and require manual approval before
48
+ deployment.
55
49
 
56
50
  ## Local Build Verification
57
51
 
@@ -101,27 +95,25 @@ It runs on pull requests and pushes to `main` or `develop`:
101
95
  - builds the package for validation only
102
96
  - validates distribution metadata with `twine check`
103
97
 
104
- The CI workflow never uploads to TestPyPI or PyPI. Pushes to `main` or
105
- `develop` run tests and packaging checks only.
98
+ The CI workflow never uploads to PyPI. Pushes to `main` or `develop` run tests
99
+ and packaging checks only.
106
100
 
107
101
  Release automation is defined in `.github/workflows/release.yml` and appears as
108
102
  `Manual Release` in GitHub Actions.
109
103
 
110
104
  The release workflow is manual-only. Branch pushes and tag pushes must not
111
- publish package artifacts to TestPyPI or PyPI.
105
+ publish package artifacts to PyPI.
112
106
 
113
107
  The release workflow has additional guardrails:
114
108
 
115
109
  - publication requires `workflow_dispatch`
116
110
  - PyPI publication is allowed only from the `main` branch
117
- - TestPyPI and PyPI publication must be run as separate manual workflow runs
118
111
  - concurrent release runs on the same ref are serialized instead of cancelled
119
112
 
120
- Manual `workflow_dispatch` can publish to TestPyPI when
121
- `publish_testpypi=true`, and to PyPI when `publish_pypi=true`.
113
+ Manual `workflow_dispatch` can publish to PyPI when `publish_pypi=true`.
122
114
 
123
- Keep both publish inputs set to `false` when the run should only build and
124
- verify distributions.
115
+ Keep `publish_pypi=false` when the run should only build and verify
116
+ distributions.
125
117
 
126
118
  The workflow uses PyPI Trusted Publishing. The publish jobs request only an
127
119
  OIDC token through `id-token: write`; they do not require API-token secrets.
@@ -134,32 +126,6 @@ and download do not depend on the deprecated Node.js 20 action runtime.
134
126
  `tcx update` applies central DB migrations before the updated workspace is used.
135
127
  Product flows create, check, approve, and submit `OrderTicket` records directly.
136
128
 
137
- ## TestPyPI Release
138
-
139
- Use TestPyPI before the first public PyPI release and after packaging changes.
140
-
141
- 1. Confirm the local build verification steps pass.
142
- 2. Run the `Manual Release` workflow manually with `publish_testpypi=true`.
143
- 3. Install from TestPyPI in a clean environment.
144
-
145
- Example:
146
-
147
- ```bash
148
- python3.11 -m venv /tmp/tcx-testpypi
149
- /tmp/tcx-testpypi/bin/pip install \
150
- --index-url https://test.pypi.org/simple/ \
151
- --extra-index-url https://pypi.org/simple/ \
152
- tradingcodex==0.3.1
153
- rm -rf /tmp/tcx-testpypi-smoke
154
- mkdir -p /tmp/tcx-testpypi-smoke
155
- cd /tmp/tcx-testpypi-smoke
156
- /tmp/tcx-testpypi/bin/tcx attach .
157
- ./tcx doctor
158
- ```
159
-
160
- `--extra-index-url` is used because dependencies such as Django may not be
161
- available on TestPyPI.
162
-
163
129
  ## PyPI Release
164
130
 
165
131
  Before pushing the release tag:
@@ -168,7 +134,6 @@ Before pushing the release tag:
168
134
  - verify `README.md` describes execution as service-gated
169
135
  - verify docs mention that live broker execution requires installed providers and explicit gates
170
136
  - run local build verification
171
- - run a TestPyPI release when packaging changed
172
137
 
173
138
  Then create or update the GitHub release/tag as needed, and run the
174
139
  `Manual Release` workflow manually with `publish_pypi=true`. Do not rely on tag push for
@@ -178,7 +143,7 @@ After the PyPI workflow completes:
178
143
 
179
144
  ```bash
180
145
  python3.11 -m venv /tmp/tcx-pypi
181
- /tmp/tcx-pypi/bin/pip install tradingcodex==0.3.1
146
+ /tmp/tcx-pypi/bin/pip install tradingcodex==0.3.3
182
147
  rm -rf /tmp/tcx-pypi-smoke
183
148
  mkdir -p /tmp/tcx-pypi-smoke
184
149
  cd /tmp/tcx-pypi-smoke
@@ -277,7 +242,12 @@ Use PEP 440 versions:
277
242
  updates after `0.2.10`
278
243
  - `0.3.1` for compatible evidence-card validation and persisted loop closure
279
244
  state fixes after `0.3.0`
280
- - later patch releases for compatible fixes after `0.3.1`
245
+ - `0.3.2` for brief research chat replies with saved head-manager synthesis
246
+ reports after `0.3.1`
247
+ - `0.3.3` for flexible update status across package/workspace drift,
248
+ skipped-version Django migration smoke coverage, and PyPI-only release flow
249
+ after `0.3.2`
250
+ - later patch releases for compatible fixes after `0.3.3`
281
251
  - pre-releases such as `0.4.0a1`, `0.4.0b1`, or `0.4.0rc1` when preparing
282
252
  the next minor contract
283
253
 
@@ -101,7 +101,7 @@ Generated workspaces contain:
101
101
  - an immutable workspace manifest at `.tradingcodex/workspace.json`
102
102
  - root `head-manager` identity loaded from `.codex/prompts/base_instructions/head-manager.md` through `.codex/config.toml` `model_instructions_file`
103
103
  - sectioned Markdown base-instruction format for `head-manager`, including `# How you work`, TradingCodex guardrails, and tool guidelines
104
- - Codex-style operating style in the root `head-manager` prompt: scoped `AGENTS.md` handling, concise preambles, selective planning, `rg`-first search, `apply_patch` edits, focused validation, dirty-worktree respect, and concise final handoffs
104
+ - Codex-style operating style in the root `head-manager` prompt: scoped `AGENTS.md` handling, concise preambles, selective planning, `rg`-first search, `apply_patch` edits, focused validation, dirty-worktree respect, concise maintenance handoffs, and brief chat replies that point to saved head-manager synthesis reports once accepted artifacts exist
105
105
  - instruction/skill separation: root `head-manager` instructions own identity, durable safety boundaries, fail-closed dispatch, role boundaries, skill routing, optional-skill management, and approved action boundaries; fixed subagent TOML files own standing role identity, MCP/tool config, artifact walls, and always-on prohibitions; repo skills are dependency-light capability procedures for workflow maps, compact assignment-envelope templates, optional skill file management, quality gates, synthesis, and postmortems, without declaring role ownership or direct inter-skill call chains
106
106
  - no-overlap handoff contract: each role owns its specialist question, downstream roles consume accepted artifacts, and missing/stale/weak upstream work returns `revise`, `blocked`, or `waiting` instead of being silently redone by another role
107
107
  - validated staged workflow plan: hook intake hints are not binding; `$tcx-workflow`
@@ -250,8 +250,9 @@ user-terminal workspace-only path:
250
250
  step. If startup health reports `update_status.workspace_update_allowed=true`,
251
251
  `head-manager` should tell the user to run
252
252
  `update_status.workspace_update_command` from their terminal. If startup health
253
- reports `update_status.package_update_required_first=true`, package refresh is
254
- also a user-terminal action, normally:
253
+ reports `update_status.package_update_required_first=true`, including when the
254
+ generated workspace and installed wrapper both match an older release, package
255
+ refresh is also a user-terminal action, normally:
255
256
 
256
257
  ```bash
257
258
  uvx --refresh --from tradingcodex tcx update .
@@ -366,7 +367,10 @@ must explain the two supported paths: switch Codex to full access and enable
366
367
  TradingCodex build mode, or run the recommended `update_status.command` from a
367
368
  terminal. Self-update is allowed only when Codex full access and explicit
368
369
  workspace build mode are both active and the user asks for the update. After
369
- self-update, `head-manager` stops and tells the user to restart Codex.
370
+ self-update, `head-manager` stops and tells the user to restart Codex. If a
371
+ same-DB service is already running with a newer TradingCodex version than the
372
+ current wrapper, startup health treats that service version as an update hint
373
+ and should recommend package/workspace refresh before service stop.
370
374
 
371
375
  Build mode is per workspace and explicit:
372
376
 
@@ -266,5 +266,7 @@ Research file writes should be deterministic enough for review:
266
266
  - include content hash
267
267
  - avoid raw secrets
268
268
  - use stable paths for role-owned reports
269
+ - save head-manager final synthesis reports as
270
+ `trading/reports/head-manager/synthesis-<workflow_run_id>.md`
269
271
  - make stale/missing source warnings visible
270
272
  - keep file content readable by Codex without a DB lookup
@@ -156,7 +156,11 @@ For repository, CLI, Django, MCP, template, docs, test, and harness maintenance
156
156
  work, `head-manager` follows the default Codex coding-agent style: concise
157
157
  preambles before grouped tool work, plans only for meaningful multi-step tasks,
158
158
  `rg`-first search, `apply_patch` for manual edits, focused validation before
159
- broader checks, respect for dirty worktrees, and concise final handoffs.
159
+ broader checks, respect for dirty worktrees, and concise maintenance handoffs.
160
+ Investment synthesis stores depth in a workspace Markdown report: after
161
+ accepted artifacts exist, `head-manager` should save the full synthesis under
162
+ `trading/reports/head-manager/` and keep the chat reply brief with the report
163
+ path, 1-3 key takeaways, and next allowed action.
160
164
 
161
165
  This operating style is a working discipline, not an investment permission.
162
166
  It does not weaken the dispatch gate, role-owned skill boundary, approved action
@@ -166,8 +170,8 @@ boundary, approval requirements, or information barriers.
166
170
 
167
171
  | Situation | Allowed response | Forbidden response |
168
172
  | --- | --- | --- |
169
- | Broad analysis such as "Analyze Apple stock" | auto-dispatch or reuse selected subagents, then wait for outputs before synthesis | Direct business/price/news/recommendation analysis |
170
- | Explicit workflow request such as "$tcx-workflow analyze Apple" | Spawn selected team or reuse active/completed roles, wait for outputs, then synthesize | Analyze without dispatch |
173
+ | Broad analysis such as "Analyze Apple stock" | auto-dispatch or reuse selected subagents, then wait for outputs before saving a head-manager synthesis report and returning a brief chat summary | Direct business/price/news/recommendation analysis |
174
+ | Explicit workflow request such as "$tcx-workflow analyze Apple" | Spawn selected team or reuse active/completed roles, wait for outputs, then save a synthesis report and return its path with a brief summary | Analyze without dispatch |
171
175
  | Broker/provider build request | Check full-access plus TCX build mode, connect/scaffold/register/validate provider metadata through `$tcx-build`, and keep live submission inside service gates | Dispatch investment subagents, ask for raw secrets, or expose raw broker SDK tools |
172
176
  | Decision support such as "Should I buy?" | Dispatch analyst/valuation/portfolio/risk team and explain required artifacts/gates | Offer buy/sell opinion without subagent output |
173
177
  | Dispatch unavailable, role routing unverified, or dispatch failed | Provide `waiting_for_subagent_dispatch` state and task briefs only | Switch to "I will analyze it myself" |
@@ -388,6 +392,10 @@ posture, or core skill behavior.
388
392
  - Downstream roles start from artifact path plus `context_summary`; they open
389
393
  full markdown only for disputed, stale, missing, or load-bearing evidence.
390
394
  - The head-manager should tell subagents to write reader-facing research artifacts in the user's language from the original request unless the user explicitly requests another artifact language. File paths, frontmatter keys, symbols, tickers, source names, and quoted source text stay in their natural/original form.
395
+ - Once accepted artifacts exist, head-manager final synthesis should be saved
396
+ as `trading/reports/head-manager/synthesis-<workflow_run_id>.md` through the
397
+ research artifact path. The chat reply should stay brief and point to that
398
+ report instead of pasting the full synthesis.
391
399
  - `plan-workflow` mandates and `automate-workflow` automation summaries follow the same user-language rule.
392
400
  - When selecting an exact fixed role with Codex `spawn_agent`, do not combine `agent_type` with full-history forking. Use a compact assignment envelope on the first attempt and no model/reasoning overrides.
393
401
  - Workflow consent stays separate from explicit user constraints. Consent to orchestrate or use subagents allows dispatch, but it is not itself an analytical constraint.
@@ -251,6 +251,9 @@ Scenarios should include:
251
251
  - starter prompts and generated guidance expose the no-overlap handoff contract
252
252
  - starter prompts and generated guidance tell subagents to write reader-facing
253
253
  research artifacts in the user's language unless explicitly overridden
254
+ - starter prompts and generated guidance tell `head-manager` to keep final chat
255
+ brief while saving full accepted-artifact synthesis as a Markdown report under
256
+ `trading/reports/head-manager/`
254
257
  - `tcx quality-check <artifact> --strict` fails research markdown that lacks
255
258
  source/as-of posture, `context_summary`, material claim tags, handoff state,
256
259
  confidence, missing-evidence fields, next-recipient routing, blocked actions,
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "tradingcodex"
7
- version = "0.3.1"
7
+ version = "0.3.3"
8
8
  description = "Agentic investment workflow harness for Codex-native research and service-gated execution checks."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11,<3.15"
@@ -150,7 +150,7 @@ def test_service_autostart_rejects_version_and_db_mismatch(monkeypatch) -> None:
150
150
  )
151
151
  with pytest.raises(RuntimeError, match="version mismatch") as version_mismatch:
152
152
  service_autostart._assert_compatible_service("127.0.0.1", 48267)
153
- assert "tcx service stop 127.0.0.1:48267" in str(version_mismatch.value)
153
+ assert "uvx --refresh --from tradingcodex tcx update ." in str(version_mismatch.value)
154
154
 
155
155
  monkeypatch.setattr(service_autostart, "tradingcodex_db_path", lambda: Path("/tmp/current.sqlite3"))
156
156
  monkeypatch.setattr(
@@ -195,6 +195,24 @@ def test_service_autostart_replaces_stale_same_db_service(monkeypatch, tmp_path:
195
195
  assert state["started"] is True
196
196
 
197
197
 
198
+ def test_service_autostart_does_not_replace_newer_same_db_service(monkeypatch, tmp_path: Path) -> None:
199
+ from tradingcodex_cli import service_autostart
200
+
201
+ current_db = tmp_path / "current.sqlite3"
202
+ monkeypatch.setattr(service_autostart, "tradingcodex_db_path", lambda: current_db)
203
+ monkeypatch.setattr(service_autostart, "_tcp_open", lambda host, port: True)
204
+ monkeypatch.setattr(
205
+ service_autostart,
206
+ "_service_health",
207
+ lambda host, port: {"service": "tradingcodex", "version": "999.0.0", "db_path": str(current_db)},
208
+ )
209
+ monkeypatch.setattr(service_autostart, "stop_service", lambda *args, **kwargs: (_ for _ in ()).throw(AssertionError("stopped newer service")))
210
+ monkeypatch.setattr(service_autostart, "_start_service", lambda *args: (_ for _ in ()).throw(AssertionError("started over newer service")))
211
+
212
+ with pytest.raises(RuntimeError, match="uvx --refresh --from tradingcodex tcx update"):
213
+ service_autostart.ensure_service_up(tmp_path, timeout=0.01)
214
+
215
+
198
216
  def test_service_status_reports_actionable_state(monkeypatch) -> None:
199
217
  from tradingcodex_cli import service_autostart
200
218
 
@@ -218,6 +236,15 @@ def test_service_status_reports_actionable_state(monkeypatch) -> None:
218
236
  assert mismatch["package_version"] == TRADINGCODEX_VERSION
219
237
  assert "tcx service stop 127.0.0.1:48267" in mismatch["next_action"]
220
238
 
239
+ monkeypatch.setattr(
240
+ service_autostart,
241
+ "_service_health",
242
+ lambda host, port: {"service": "tradingcodex", "version": "999.0.0", "db_path": str(Path("/tmp/current.sqlite3"))},
243
+ )
244
+ newer_service = service_autostart.service_status("127.0.0.1:48267")
245
+ assert newer_service["issue"] == "version_mismatch"
246
+ assert "uvx --refresh --from tradingcodex tcx update ." in newer_service["next_action"]
247
+
221
248
  monkeypatch.setattr(service_autostart, "tradingcodex_db_path", lambda: Path("/tmp/current.sqlite3"))
222
249
  monkeypatch.setattr(
223
250
  service_autostart,
@@ -230,6 +257,67 @@ def test_service_status_reports_actionable_state(monkeypatch) -> None:
230
257
  assert compatible["next_action"] == "No action needed."
231
258
 
232
259
 
260
+ def test_db_migrate_applies_skipped_django_migrations_and_legacy_order_data(tmp_path: Path) -> None:
261
+ workspace = tmp_path / "skip-migration-workspace"
262
+ workspace.mkdir()
263
+ home = tmp_path / "tc-home-skip-migration"
264
+ env_extra = {"TRADINGCODEX_HOME": str(home), "TRADINGCODEX_DB_NAME": None}
265
+
266
+ run([sys.executable, "manage.py", "migrate", "orders", "0001", "--noinput"], ROOT, env_extra=env_extra)
267
+ db_path = home / "state" / "tradingcodex.sqlite3"
268
+ with sqlite3.connect(db_path) as connection:
269
+ connection.execute(
270
+ """
271
+ INSERT INTO orders_orderintent (
272
+ intent_id, symbol, side, quantity, limit_price, currency, broker,
273
+ estimated_notional_krw, created_by, created_at, portfolio_id,
274
+ account_id, strategy_id, workspace_context, payload
275
+ )
276
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
277
+ """,
278
+ (
279
+ "legacy-intent-1",
280
+ "NVDA",
281
+ "buy",
282
+ "1",
283
+ "100",
284
+ "USD",
285
+ "paper",
286
+ "100",
287
+ "portfolio-manager",
288
+ "2026-01-01 00:00:00",
289
+ "default-paper",
290
+ "local-paper",
291
+ "default-strategy",
292
+ "{}",
293
+ json.dumps({"order_intent": {"order_ticket_id": "legacy-ticket-1", "symbol": "NVDA", "side": "buy", "quantity": "1"}}),
294
+ ),
295
+ )
296
+
297
+ migrated = json.loads(run([sys.executable, "-m", "tradingcodex_cli", "db", "migrate"], workspace, env_extra=env_extra).stdout)
298
+ assert migrated["status"] == "migrated"
299
+ with sqlite3.connect(db_path) as connection:
300
+ applied = {
301
+ (row[0], row[1])
302
+ for row in connection.execute("SELECT app, name FROM django_migrations")
303
+ }
304
+ tables = {
305
+ row[0]
306
+ for row in connection.execute("SELECT name FROM sqlite_master WHERE type='table'")
307
+ }
308
+ ticket = connection.execute(
309
+ "SELECT ticket_id, symbol, side, payload_hash FROM orders_orderticket WHERE ticket_id = ?",
310
+ ("legacy-ticket-1",),
311
+ ).fetchone()
312
+
313
+ assert ("orders", "0004_remove_order_intent_compat_fields") in applied
314
+ assert ("integrations", "0002_brokerconnection_brokeraccount_instrumentmap") in applied
315
+ assert "orders_orderintent" not in tables
316
+ assert ticket is not None
317
+ assert ticket[:3] == ("legacy-ticket-1", "NVDA", "buy")
318
+ assert ticket[3]
319
+
320
+
233
321
  def test_service_runserver_uses_fixed_port_and_skips_duplicate(monkeypatch, tmp_path: Path, capsys) -> None:
234
322
  from django.core import management
235
323
  from tradingcodex_cli import __main__ as cli_main
@@ -351,6 +439,49 @@ def test_startup_status_preserves_service_mismatch_details(monkeypatch, tmp_path
351
439
  assert status["allowed_next_actions"][0] == service_detail["next_action"]
352
440
 
353
441
 
442
+ def test_startup_status_uses_same_db_newer_service_as_update_hint(monkeypatch, tmp_path: Path) -> None:
443
+ from tradingcodex_cli import startup_status
444
+
445
+ workspace = make_workspace(tmp_path)
446
+ module_lock_path = workspace / ".tradingcodex" / "generated" / "module-lock.json"
447
+ module_lock = json.loads(module_lock_path.read_text(encoding="utf-8"))
448
+ module_lock["tradingcodex_version"] = "0.3.1"
449
+ module_lock_path.write_text(json.dumps(module_lock, indent=2) + "\n", encoding="utf-8")
450
+ db_path = "/tmp/current.sqlite3"
451
+ monkeypatch.setattr(startup_status, "TRADINGCODEX_VERSION", "0.3.1")
452
+ monkeypatch.setattr(
453
+ startup_status,
454
+ "latest_release_info",
455
+ lambda: (_ for _ in ()).throw(AssertionError("latest release check should use service hint")),
456
+ )
457
+ monkeypatch.setattr(
458
+ startup_status,
459
+ "inspect_service_status",
460
+ lambda addr: {
461
+ "addr": addr,
462
+ "url": f"http://{addr}/",
463
+ "reachable": True,
464
+ "compatible": False,
465
+ "service": "tradingcodex",
466
+ "version": "0.3.2",
467
+ "package_version": "0.3.1",
468
+ "db_path": db_path,
469
+ "expected_db_path": db_path,
470
+ "issue": "version_mismatch",
471
+ "next_action": "Run package refresh.",
472
+ },
473
+ )
474
+ monkeypatch.setattr(startup_status, "_read_health", lambda url: {"service": "tradingcodex", "version": "0.3.2", "db_path": db_path})
475
+
476
+ status = startup_status.build_server_status(workspace)
477
+
478
+ update_status = status["update_status"]
479
+ assert update_status["versions_match"] is True
480
+ assert update_status["latest_release_source"] == "service_status"
481
+ assert update_status["package_update_required"] is True
482
+ assert update_status["command"] == "uvx --refresh --from tradingcodex tcx update ."
483
+
484
+
354
485
  def test_manage_runserver_uses_fixed_port_and_skips_duplicate(monkeypatch, capsys) -> None:
355
486
  from tradingcodex_cli import service_autostart
356
487
 
@@ -898,6 +1029,55 @@ def test_session_start_update_recommendation_respects_home_preference(tmp_path:
898
1029
  assert run_user_prompt_hook(workspace, "Create a quality income strategy for dividend stocks") is None
899
1030
 
900
1031
 
1032
+ def test_update_status_detects_stale_package_when_workspace_matches_installed(monkeypatch, tmp_path: Path) -> None:
1033
+ from tradingcodex_cli import startup_status
1034
+
1035
+ workspace = make_workspace(tmp_path)
1036
+ module_lock_path = workspace / ".tradingcodex" / "generated" / "module-lock.json"
1037
+ module_lock = json.loads(module_lock_path.read_text(encoding="utf-8"))
1038
+ module_lock["tradingcodex_version"] = "0.3.1"
1039
+ module_lock_path.write_text(json.dumps(module_lock, indent=2) + "\n", encoding="utf-8")
1040
+ monkeypatch.setattr(startup_status, "TRADINGCODEX_VERSION", "0.3.1")
1041
+ monkeypatch.setattr(
1042
+ startup_status,
1043
+ "latest_release_info",
1044
+ lambda: {"latest_release_version": "0.3.2", "latest_release_status": "ok", "latest_release_source": "test"},
1045
+ )
1046
+
1047
+ update_status = startup_status.build_update_status(workspace, check_latest_release=True)
1048
+
1049
+ assert update_status["versions_match"] is True
1050
+ assert update_status["workspace_update_available"] is False
1051
+ assert update_status["package_update_required"] is True
1052
+ assert update_status["package_update_required_first"] is True
1053
+ assert update_status["update_available"] is True
1054
+ assert update_status["command"] == "uvx --refresh --from tradingcodex tcx update ."
1055
+
1056
+
1057
+ def test_update_status_uses_service_hint_when_latest_check_unavailable(monkeypatch, tmp_path: Path) -> None:
1058
+ from tradingcodex_cli import startup_status
1059
+
1060
+ workspace = make_workspace(tmp_path)
1061
+ module_lock_path = workspace / ".tradingcodex" / "generated" / "module-lock.json"
1062
+ module_lock = json.loads(module_lock_path.read_text(encoding="utf-8"))
1063
+ module_lock["tradingcodex_version"] = "0.3.0"
1064
+ module_lock_path.write_text(json.dumps(module_lock, indent=2) + "\n", encoding="utf-8")
1065
+ monkeypatch.setattr(startup_status, "TRADINGCODEX_VERSION", "0.3.1")
1066
+ monkeypatch.setattr(
1067
+ startup_status,
1068
+ "latest_release_info",
1069
+ lambda: {"latest_release_version": "unknown", "latest_release_status": "unavailable", "latest_release_source": "test"},
1070
+ )
1071
+
1072
+ update_status = startup_status.build_update_status(workspace, latest_version_hint="0.3.2")
1073
+
1074
+ assert update_status["workspace_update_available"] is True
1075
+ assert update_status["latest_release_source"] == "service_status"
1076
+ assert update_status["package_update_required"] is True
1077
+ assert update_status["workspace_update_allowed"] is False
1078
+ assert update_status["command"] == "uvx --refresh --from tradingcodex tcx update ."
1079
+
1080
+
901
1081
  def test_repo_skill_templates_keep_instruction_boundary() -> None:
902
1082
  skill_root = ROOT / "workspace_templates" / "modules" / "repo-skills" / "files" / ".agents" / "skills"
903
1083
  subagent_skill_root = ROOT / "workspace_templates" / "modules" / "repo-skills" / "files" / ".tradingcodex" / "subagents" / "skills"
@@ -1393,7 +1573,7 @@ def test_runtime_mode_update_and_connector_build_cli(tmp_path: Path) -> None:
1393
1573
  module_lock_path.write_text(json.dumps(module_lock, indent=2) + "\n", encoding="utf-8")
1394
1574
  update_status = json.loads(
1395
1575
  run(
1396
- ["./tcx", "update", "status", "--json"],
1576
+ ["./tcx", "update", "status", "--json", "--skip-refresh"],
1397
1577
  workspace,
1398
1578
  env_extra={"TRADINGCODEX_CODEX_PERMISSION": "danger-full-access", "TRADINGCODEX_LATEST_RELEASE_VERSION": TRADINGCODEX_VERSION},
1399
1579
  ).stdout
@@ -1693,6 +1873,7 @@ def test_update_refreshes_workspace_contract_and_preserves_identity(tmp_path: Pa
1693
1873
  assert module_lock["tradingcodex_version"] == TRADINGCODEX_VERSION
1694
1874
  assert module_lock["tradingcodex_package_spec"] == "tradingcodex"
1695
1875
  assert 'TRADINGCODEX_UPDATE_SKIP_REFRESH="${TRADINGCODEX_UPDATE_SKIP_REFRESH:-0}"' in wrapper
1876
+ assert 'if [ "${1:-}" = "update" ] && [ "${2:-}" = "status" ]; then' not in wrapper
1696
1877
  assert 'if [ "${1:-}" = "update" ] && [ "$TRADINGCODEX_UPDATE_SKIP_REFRESH" != "1" ] && command -v uvx >/dev/null 2>&1; then' in wrapper
1697
1878
  assert '"--skip-refresh"' in wrapper
1698
1879
  assert " ./tcx doctor" in updated.stdout
@@ -1749,7 +1930,9 @@ def test_starter_prompt_keeps_negated_actions_out_of_execution() -> None:
1749
1930
  assert "Context budget:" in macro
1750
1931
  assert "context_summary" in macro
1751
1932
  assert "reader_summary, next_action" in macro
1752
- assert "Reader mode: open with a plain-English answer" in macro
1933
+ assert "Reader mode: keep final chat brief" in macro
1934
+ assert "create_research_artifact at `trading/reports/head-manager/synthesis-<workflow_run_id>.md`" in macro
1935
+ assert "final user-facing synthesis should be deep enough" not in macro
1753
1936
  assert "Artifact memory:" in macro
1754
1937
  assert "improvements for future judgment" in macro
1755
1938
  assert "Do not let downstream roles redo missing upstream work" in macro
@@ -2381,7 +2564,8 @@ def test_subagents_prompt_cli_and_api_expose_intake_summary(tmp_path: Path, monk
2381
2564
  for agent in cli_json["intake_summary"]["subagents"]
2382
2565
  if agent["role"] == "valuation-analyst"
2383
2566
  )
2384
- assert "Reader mode: open with a plain-English answer" in cli_json["starter_prompt"]
2567
+ assert "Reader mode: keep final chat brief" in cli_json["starter_prompt"]
2568
+ assert "synthesis-<workflow_run_id>" in cli_json["starter_prompt"]
2385
2569
  assert "Investor profile questions to ask if unanswered" in cli_json["starter_prompt"]
2386
2570
  assert "Method lenses for this lane" in cli_json["starter_prompt"]
2387
2571
 
@@ -4598,7 +4782,7 @@ def test_product_web_does_not_create_approvals_or_executions(monkeypatch) -> Non
4598
4782
  assert "Idea translated" in decision_body
4599
4783
  assert "candidate thesis" in decision_body
4600
4784
  assert "Portfolio fit" in decision_body
4601
- assert "Reviews the business, financial drivers" in decision_body
4785
+ assert "Reviews the business, financial drivers" not in decision_body
4602
4786
  assert "workflow reaches portfolio/order readiness" in decision_body
4603
4787
  assert "Next allowed actions" in decision_body
4604
4788
  assert "Answer missing profile questions" in decision_body
@@ -4705,6 +4889,83 @@ def test_file_native_research_artifacts_via_mcp_api_and_cli(tmp_path: Path) -> N
4705
4889
  assert strict_quality["frontmatter"]["reader_summary"].startswith("Plain-English first read")
4706
4890
  assert strict_quality["frontmatter"]["next_action"] == "Wait for valuation before any portfolio fit discussion."
4707
4891
  assert not any("non-expert first-read UX" in warning for warning in strict_quality["warnings"])
4892
+ synthesis = call_mcp_tool(workspace, "create_research_artifact", {
4893
+ "principal_id": "head-manager",
4894
+ "artifact_id": "synthesis-workflow-unit",
4895
+ "artifact_type": "synthesis_report",
4896
+ "universe": "public_equity",
4897
+ "workflow_type": "thesis_review",
4898
+ "symbol": "NVDA",
4899
+ "role": "head-manager",
4900
+ "title": "NVDA Head-Manager Synthesis",
4901
+ "markdown": """---
4902
+ workflow_lane: thesis_review
4903
+ forecast_allowed: false
4904
+ scenario_cases:
4905
+ - base case remains unmodeled in this synthesis smoke
4906
+ contrary_evidence:
4907
+ - accepted artifacts still have one unresolved source freshness gap
4908
+ source_trust_notes:
4909
+ - source posture comes from accepted role artifacts
4910
+ update_triggers:
4911
+ - new accepted role artifact changes the thesis
4912
+ invalidation_conditions:
4913
+ - accepted role artifact contradicts the synthesis
4914
+ ---
4915
+
4916
+ # NVDA Head-Manager Synthesis
4917
+
4918
+ ## Direct Answer
4919
+
4920
+ [inference] Accepted artifacts are sufficient for a research synthesis smoke, not for an order.
4921
+
4922
+ ## Accepted Artifact Inputs
4923
+
4924
+ [factual] Input artifacts are referenced by path in frontmatter and body.
4925
+
4926
+ ## Synthesis
4927
+
4928
+ [inference] The combined read remains research-only.
4929
+
4930
+ ## Disagreements/Conflicts
4931
+
4932
+ [factual] One freshness gap remains visible.
4933
+
4934
+ ## Source/As-Of Posture
4935
+
4936
+ [factual] Source posture is inherited from accepted role artifacts.
4937
+
4938
+ ## Missing Evidence
4939
+
4940
+ [factual] Updated filing snapshot remains missing.
4941
+
4942
+ ## Caveats
4943
+
4944
+ [assumption] No valuation, order, approval, or execution is implied.
4945
+
4946
+ ## Next Allowed Action
4947
+
4948
+ [factual] User can inspect the saved synthesis report.
4949
+ """,
4950
+ "source_as_of": "2026-06-01",
4951
+ "readiness_label": "not-decision-ready",
4952
+ "context_summary": "Head-manager synthesis report saved for user inspection.",
4953
+ "reader_summary": "Brief chat should point to this saved synthesis report.",
4954
+ "handoff_state": "accepted",
4955
+ "confidence": "medium",
4956
+ "missing_evidence": ["updated filing snapshot"],
4957
+ "next_recipient": "user",
4958
+ "next_action": "Inspect the saved synthesis report.",
4959
+ "blocked_actions": ["order_drafting", "approval", "execution"],
4960
+ "source_snapshot_ids": ["unit-test-filing"],
4961
+ "created_by": "head-manager",
4962
+ "export_path": "trading/reports/head-manager/synthesis-workflow-unit.md",
4963
+ })
4964
+ assert synthesis["export_path"] == "trading/reports/head-manager/synthesis-workflow-unit.md"
4965
+ synthesis_quality = json.loads(run(["./tcx", "quality-check", synthesis["export_path"], "--strict"], workspace).stdout)
4966
+ assert synthesis_quality["status"] == "pass"
4967
+ assert synthesis_quality["frontmatter"]["artifact_type"] == "synthesis_report"
4968
+ assert synthesis_quality["frontmatter"]["role"] == "head-manager"
4708
4969
  run_card = create_evidence_run_card(workspace, {
4709
4970
  "related_artifact_path": stored["export_path"],
4710
4971
  "config_hash": "unit-config-hash",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tradingcodex
3
- Version: 0.3.1
3
+ Version: 0.3.3
4
4
  Summary: Agentic investment workflow harness for Codex-native research and service-gated execution checks.
5
5
  Author: TradingCodex Authors
6
6
  License-Expression: Apache-2.0
@@ -229,7 +229,7 @@ provide investment recommendations or guarantee returns.
229
229
  | Status | Milestone |
230
230
  | --- | --- |
231
231
  | Shipped | Generated Codex workspace, fixed role roster, project MCP config, Django service plane, local web dashboard, Admin, Ninja API, file-native research memory, component registry, policy/audit primitives. |
232
- | Current `0.3.1` | Codex-native Decision Packages, independent judgment-review gate, staged workflow planning, artifact-supervisor loop closure state, Evidence Run/Validation Cards, provider capability profiles, and Python `>=3.11,<3.15` support. |
232
+ | Current `0.3.3` | Flexible package/workspace update status, skipped-version Django migration smoke coverage, brief research chat replies with saved head-manager synthesis reports, Codex-native Decision Packages, independent judgment-review gate, staged workflow planning, artifact-supervisor loop closure state, Evidence Run/Validation Cards, provider capability profiles, and Python `>=3.11,<3.15` support. |
233
233
  | Next | Deeper validation scenarios, richer provider capability profiles, stronger generated-workspace smoke coverage, and improved artifact quality tooling. |
234
234
  | Future | Separately governed verified adapters, hosted/managed services, enterprise policy/compliance packs, and broker-specific live providers only after explicit product, policy, adapter, and validation work. |
235
235