tradingcodex 1.0.0__tar.gz → 1.0.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (369) hide show
  1. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/CHANGELOG.md +32 -0
  2. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/PKG-INFO +1 -1
  3. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/docs/README.md +1 -1
  4. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/docs/deployment.md +24 -15
  5. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/docs/execution-without-subagent-plan.md +1 -1
  6. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/docs/generated-workspaces.md +13 -4
  7. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/docs/release-readiness.md +64 -29
  8. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/docs/research-memory-and-artifacts.md +6 -0
  9. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/docs/roles-skills-and-workflows.md +9 -1
  10. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/docs/user-facing-skills.md +5 -1
  11. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/installation.md +9 -1
  12. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_codex_cli_compat.py +4 -4
  13. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_codex_native_orchestration.py +20 -1
  14. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_dynamic_artifact_quality.py +21 -0
  15. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_e2e_user_scenarios.py +3 -2
  16. tradingcodex-1.0.2/tests/test_guidebook_contract.py +71 -0
  17. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_platform_runtime.py +62 -6
  18. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_release_contract.py +22 -11
  19. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_research_forecast_surfaces.py +45 -0
  20. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_security_invariants.py +16 -0
  21. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_skill_runtime_boundaries.py +4 -1
  22. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex.egg-info/PKG-INFO +1 -1
  23. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex.egg-info/SOURCES.txt +3 -0
  24. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_cli/commands/bootstrap.py +46 -1
  25. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_cli/commands/doctor.py +3 -1
  26. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/application/agents.py +16 -10
  27. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/application/artifact_quality.py +25 -6
  28. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/application/forecasting.py +2 -2
  29. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/mcp_runtime.py +88 -11
  30. tradingcodex-1.0.2/tradingcodex_service/version.py +1 -0
  31. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/codex-base/files/.codex/prompts/base_instructions/head-manager.md +1 -0
  32. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/research_artifact.schema.json +33 -3
  33. tradingcodex-1.0.2/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-artifact/SKILL.md +64 -0
  34. tradingcodex-1.0.2/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-artifact/agents/openai.yaml +6 -0
  35. tradingcodex-1.0.0/tradingcodex_service/version.py +0 -1
  36. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/CONTRIBUTING.md +0 -0
  37. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/LICENSE +0 -0
  38. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/MANIFEST.in +0 -0
  39. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/NOTICE +0 -0
  40. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/README.md +0 -0
  41. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/TRADEMARKS.md +0 -0
  42. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/__init__.py +0 -0
  43. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/audit/__init__.py +0 -0
  44. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/audit/admin.py +0 -0
  45. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/audit/apps.py +0 -0
  46. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/audit/migrations/0001_v1_initial.py +0 -0
  47. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/audit/migrations/__init__.py +0 -0
  48. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/audit/models.py +0 -0
  49. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/harness/__init__.py +0 -0
  50. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/harness/admin.py +0 -0
  51. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/harness/apps.py +0 -0
  52. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/harness/migrations/0001_v1_initial.py +0 -0
  53. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/harness/migrations/__init__.py +0 -0
  54. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/harness/models.py +0 -0
  55. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/harness/templatetags/__init__.py +0 -0
  56. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/integrations/__init__.py +0 -0
  57. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/integrations/admin.py +0 -0
  58. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/integrations/apps.py +0 -0
  59. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/integrations/migrations/0001_v1_initial.py +0 -0
  60. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/integrations/migrations/__init__.py +0 -0
  61. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/integrations/models.py +0 -0
  62. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/mcp/__init__.py +0 -0
  63. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/mcp/admin.py +0 -0
  64. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/mcp/apps.py +0 -0
  65. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/mcp/migrations/0001_v1_initial.py +0 -0
  66. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/mcp/migrations/__init__.py +0 -0
  67. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/mcp/models.py +0 -0
  68. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/mcp/services.py +0 -0
  69. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/orders/__init__.py +0 -0
  70. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/orders/admin.py +0 -0
  71. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/orders/apps.py +0 -0
  72. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/orders/migrations/0001_v1_initial.py +0 -0
  73. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/orders/migrations/__init__.py +0 -0
  74. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/orders/models.py +0 -0
  75. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/orders/services.py +0 -0
  76. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/policy/__init__.py +0 -0
  77. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/policy/admin.py +0 -0
  78. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/policy/apps.py +0 -0
  79. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/policy/migrations/0001_v1_initial.py +0 -0
  80. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/policy/migrations/__init__.py +0 -0
  81. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/policy/models.py +0 -0
  82. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/policy/services.py +0 -0
  83. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/portfolio/__init__.py +0 -0
  84. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/portfolio/admin.py +0 -0
  85. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/portfolio/apps.py +0 -0
  86. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/portfolio/migrations/0001_v1_initial.py +0 -0
  87. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/portfolio/migrations/__init__.py +0 -0
  88. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/apps/portfolio/models.py +0 -0
  89. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/assets/tradingcodex-banner.svg +0 -0
  90. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/docs/codex-native-orchestration.md +0 -0
  91. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/docs/components.md +0 -0
  92. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/docs/core-concepts-and-rules.md +0 -0
  93. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/docs/decision-memory.md +0 -0
  94. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/docs/financial-workflow-references.md +0 -0
  95. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/docs/guardrails.md +0 -0
  96. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/docs/harness.md +0 -0
  97. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/docs/improvement-loop.md +0 -0
  98. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/docs/interfaces-and-surfaces.md +0 -0
  99. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/docs/investment-brain-plugins.md +0 -0
  100. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/docs/licensing-and-commercialization.md +0 -0
  101. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/docs/product-direction.md +0 -0
  102. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/docs/safety-policy-and-execution.md +0 -0
  103. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/docs/system-architecture.md +0 -0
  104. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/docs/validation-and-test-plan.md +0 -0
  105. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/frontend/index.html +0 -0
  106. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/frontend/package-lock.json +0 -0
  107. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/frontend/package.json +0 -0
  108. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/frontend/src/App.tsx +0 -0
  109. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/frontend/src/api.ts +0 -0
  110. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/frontend/src/domain.ts +0 -0
  111. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/frontend/src/features/LibraryPage.tsx +0 -0
  112. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/frontend/src/features/SkillsPage.tsx +0 -0
  113. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/frontend/src/features/SystemPage.tsx +0 -0
  114. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/frontend/src/main.tsx +0 -0
  115. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/frontend/src/navigation.js +0 -0
  116. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/frontend/src/navigation.test.js +0 -0
  117. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/frontend/src/styles.css +0 -0
  118. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/frontend/src/ui.tsx +0 -0
  119. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/frontend/src/viewer-data.js +0 -0
  120. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/frontend/tsconfig.json +0 -0
  121. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/frontend/vite.config.ts +0 -0
  122. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/install.sh +0 -0
  123. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/pyproject.toml +0 -0
  124. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/setup.cfg +0 -0
  125. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_artifact_authentication.py +0 -0
  126. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_brain_skill.py +0 -0
  127. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_broker_center_prd.py +0 -0
  128. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_build_contract_metadata.py +0 -0
  129. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_build_hook.py +0 -0
  130. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_build_turn_grant.py +0 -0
  131. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_clean_v1_cli_audit.py +0 -0
  132. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_codex_cli_contract.py +0 -0
  133. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_dashboard_skill.py +0 -0
  134. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_decision_memory_core.py +0 -0
  135. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_dev_bootstrap.py +0 -0
  136. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_evaluation_lab_hardening.py +0 -0
  137. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_evaluation_profiles.py +0 -0
  138. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_investment_analysis.py +0 -0
  139. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_investment_brain_cli.py +0 -0
  140. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_investment_brain_prompt_layers.py +0 -0
  141. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_investment_brain_provenance.py +0 -0
  142. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_investment_brain_registry.py +0 -0
  143. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_investor_context.py +0 -0
  144. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_mcp_broker_release_health.py +0 -0
  145. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_mcp_operator_authority.py +0 -0
  146. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_native_execution_gateway.py +0 -0
  147. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_order_turn_grant.py +0 -0
  148. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_provider_source_approval.py +0 -0
  149. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_research_spec_profiles.py +0 -0
  150. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_runtime_paths.py +0 -0
  151. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_runtime_profile.py +0 -0
  152. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_source_snapshot_agent_contract.py +0 -0
  153. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_v1_migrations.py +0 -0
  154. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_v1_state_integrity.py +0 -0
  155. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_viewer.py +0 -0
  156. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tests/test_workspace_git_contract.py +0 -0
  157. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex.egg-info/dependency_links.txt +0 -0
  158. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex.egg-info/entry_points.txt +0 -0
  159. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex.egg-info/requires.txt +0 -0
  160. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex.egg-info/top_level.txt +0 -0
  161. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_cli/__init__.py +0 -0
  162. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_cli/__main__.py +0 -0
  163. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_cli/commands/__init__.py +0 -0
  164. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_cli/commands/build.py +0 -0
  165. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_cli/commands/connectors.py +0 -0
  166. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_cli/commands/db.py +0 -0
  167. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_cli/commands/decision.py +0 -0
  168. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_cli/commands/evaluation.py +0 -0
  169. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_cli/commands/forecast.py +0 -0
  170. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_cli/commands/home.py +0 -0
  171. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_cli/commands/investment_brains.py +0 -0
  172. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_cli/commands/investor_context.py +0 -0
  173. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_cli/commands/mcp.py +0 -0
  174. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_cli/commands/mode.py +0 -0
  175. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_cli/commands/orders.py +0 -0
  176. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_cli/commands/policy.py +0 -0
  177. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_cli/commands/profile.py +0 -0
  178. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_cli/commands/research.py +0 -0
  179. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_cli/commands/skills.py +0 -0
  180. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_cli/commands/strategies.py +0 -0
  181. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_cli/commands/subagents.py +0 -0
  182. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_cli/commands/utils.py +0 -0
  183. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_cli/commands/workflow.py +0 -0
  184. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_cli/commands/workspaces.py +0 -0
  185. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_cli/generator.py +0 -0
  186. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_cli/mcp_stdio.py +0 -0
  187. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_cli/package_source.py +0 -0
  188. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_cli/service_autostart.py +0 -0
  189. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_cli/startup_status.py +0 -0
  190. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_cli/versioning.py +0 -0
  191. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/__init__.py +0 -0
  192. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/admin.py +0 -0
  193. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/api.py +0 -0
  194. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/application/__init__.py +0 -0
  195. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/application/analysis_runs.py +0 -0
  196. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/application/artifact_bindings.py +0 -0
  197. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/application/audit.py +0 -0
  198. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/application/brokers.py +0 -0
  199. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/application/build_gateway.py +0 -0
  200. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/application/common.py +0 -0
  201. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/application/components.py +0 -0
  202. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/application/context_budget.py +0 -0
  203. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/application/customization.py +0 -0
  204. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/application/decision_packages.py +0 -0
  205. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/application/evaluation_lab.py +0 -0
  206. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/application/execution_gateway.py +0 -0
  207. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/application/git_subprocess.py +0 -0
  208. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/application/harness.py +0 -0
  209. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/application/health.py +0 -0
  210. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/application/investment_analysis.py +0 -0
  211. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/application/investment_brains.py +0 -0
  212. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/application/investor_context.py +0 -0
  213. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/application/markdown_preview.py +0 -0
  214. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/application/operator_authority.py +0 -0
  215. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/application/orders.py +0 -0
  216. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/application/policy.py +0 -0
  217. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/application/portfolio.py +0 -0
  218. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/application/postmortems.py +0 -0
  219. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/application/research.py +0 -0
  220. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/application/research_specs.py +0 -0
  221. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/application/runtime.py +0 -0
  222. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/application/runtime_mode.py +0 -0
  223. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/application/source_snapshots.py +0 -0
  224. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/application/viewer.py +0 -0
  225. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/application/workspace_git.py +0 -0
  226. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/application/workspaces.py +0 -0
  227. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/asgi.py +0 -0
  228. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/log_safety.py +0 -0
  229. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/runtime_profile.py +0 -0
  230. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/settings.py +0 -0
  231. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/static/tradingcodex_admin/favicon.svg +0 -0
  232. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/static/tradingcodex_web/assets/index-CFoXYUtq.js +0 -0
  233. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/static/tradingcodex_web/assets/index-DYzj_xRR.css +0 -0
  234. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/static/tradingcodex_web/index.html +0 -0
  235. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/urls.py +0 -0
  236. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/viewer_api.py +0 -0
  237. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/web.py +0 -0
  238. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/tradingcodex_service/wsgi.py +0 -0
  239. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/__init__.py +0 -0
  240. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/audit/files/.tradingcodex/audit/README.md +0 -0
  241. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/audit/files/trading/audit/.gitkeep +0 -0
  242. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/audit/module.json +0 -0
  243. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/codex-base/files/.codex/config.toml +0 -0
  244. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/codex-base/files/.codex/hooks/tradingcodex_hook.py +0 -0
  245. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/codex-base/files/.codex/hooks.json +0 -0
  246. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/codex-base/files/.codex/rules/tradingcodex.rules +0 -0
  247. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/codex-base/files/.tradingcodex/cli.py +0 -0
  248. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/codex-base/files/.tradingcodex/config.yaml +0 -0
  249. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/codex-base/files/AGENTS.md +0 -0
  250. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/codex-base/files/pyproject.toml +0 -0
  251. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/codex-base/files/tcx +0 -0
  252. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/codex-base/files/tcx.cmd +0 -0
  253. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/codex-base/module.json +0 -0
  254. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/policies/restricted-list.yaml +0 -0
  255. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/approval_receipt.schema.json +0 -0
  256. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/audit_event.schema.json +0 -0
  257. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/evidence_pack.schema.json +0 -0
  258. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/execution_result.schema.json +0 -0
  259. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/fundamental_report.schema.json +0 -0
  260. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/news_report.schema.json +0 -0
  261. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/order_ticket.schema.json +0 -0
  262. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/portfolio_review.schema.json +0 -0
  263. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/postmortem_report.schema.json +0 -0
  264. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/risk_report.schema.json +0 -0
  265. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/technical_report.schema.json +0 -0
  266. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/thesis.schema.json +0 -0
  267. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/enforcement-guardrails/files/.tradingcodex/schemas/valuation.schema.json +0 -0
  268. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/enforcement-guardrails/module.json +0 -0
  269. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/fundamental-analyst.toml +0 -0
  270. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/instrument-analyst.toml +0 -0
  271. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/judgment-reviewer.toml +0 -0
  272. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/macro-analyst.toml +0 -0
  273. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/news-analyst.toml +0 -0
  274. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/portfolio-manager.toml +0 -0
  275. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/risk-manager.toml +0 -0
  276. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/technical-analyst.toml +0 -0
  277. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/fixed-subagents/files/.codex/agents/valuation-analyst.toml +0 -0
  278. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/fixed-subagents/files/.tradingcodex/mainagent/skill-change-proposals/.gitkeep +0 -0
  279. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/fixed-subagents/module.json +0 -0
  280. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/guidance-guardrails/files/.tradingcodex/guidance/guardrails.md +0 -0
  281. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/guidance-guardrails/files/.tradingcodex/guidance/task-quality-checklist.md +0 -0
  282. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/guidance-guardrails/module.json +0 -0
  283. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/information-barriers/files/.tradingcodex/secrets.md +0 -0
  284. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/information-barriers/files/trading/forecasts/.gitkeep +0 -0
  285. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/information-barriers/files/trading/market-data/.gitkeep +0 -0
  286. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/information-barriers/files/trading/portfolio/.gitkeep +0 -0
  287. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/information-barriers/files/trading/reports/fundamental/.gitkeep +0 -0
  288. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/information-barriers/files/trading/reports/instrument/.gitkeep +0 -0
  289. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/information-barriers/files/trading/reports/macro/.gitkeep +0 -0
  290. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/information-barriers/files/trading/reports/news/.gitkeep +0 -0
  291. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/information-barriers/files/trading/reports/policy/.gitkeep +0 -0
  292. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/information-barriers/files/trading/reports/portfolio/.gitkeep +0 -0
  293. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/information-barriers/files/trading/reports/postmortem/.gitkeep +0 -0
  294. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/information-barriers/files/trading/reports/risk/.gitkeep +0 -0
  295. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/information-barriers/files/trading/reports/technical/.gitkeep +0 -0
  296. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/information-barriers/files/trading/reports/valuation/.gitkeep +0 -0
  297. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/information-barriers/files/trading/research/.gitkeep +0 -0
  298. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/information-barriers/module.json +0 -0
  299. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/paper-trading/module.json +0 -0
  300. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-automate/SKILL.md +0 -0
  301. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-automate/agents/openai.yaml +0 -0
  302. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-brain/SKILL.md +0 -0
  303. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-brain/agents/openai.yaml +0 -0
  304. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-brain/references/bundle-contract.md +0 -0
  305. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-build/SKILL.md +0 -0
  306. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-build/agents/openai.yaml +0 -0
  307. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-dashboard/SKILL.md +0 -0
  308. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-dashboard/agents/openai.yaml +0 -0
  309. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-investor-context/SKILL.md +0 -0
  310. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-investor-context/agents/openai.yaml +0 -0
  311. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-memory/SKILL.md +0 -0
  312. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-memory/agents/openai.yaml +0 -0
  313. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-allow/SKILL.md +0 -0
  314. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-allow/agents/openai.yaml +0 -0
  315. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-cancel/SKILL.md +0 -0
  316. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-cancel/agents/openai.yaml +0 -0
  317. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-submit/SKILL.md +0 -0
  318. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-order-submit/agents/openai.yaml +0 -0
  319. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-plan/SKILL.md +0 -0
  320. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-plan/agents/openai.yaml +0 -0
  321. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-server/SKILL.md +0 -0
  322. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-server/agents/openai.yaml +0 -0
  323. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-strategy/SKILL.md +0 -0
  324. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-strategy/agents/openai.yaml +0 -0
  325. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-workflow/SKILL.md +0 -0
  326. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-workflow/agents/openai.yaml +0 -0
  327. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-workflow/references/context-and-override.md +0 -0
  328. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.agents/skills/tcx-workflow/references/decision-quality-spine.md +0 -0
  329. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/fundamental-analyst/tcx-fundamental/SKILL.md +0 -0
  330. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/fundamental-analyst/tcx-fundamental/agents/openai.yaml +0 -0
  331. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/instrument-analyst/tcx-instrument/SKILL.md +0 -0
  332. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/instrument-analyst/tcx-instrument/agents/openai.yaml +0 -0
  333. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/judgment-reviewer/tcx-judgment/SKILL.md +0 -0
  334. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/judgment-reviewer/tcx-judgment/agents/openai.yaml +0 -0
  335. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/macro-analyst/tcx-macro/SKILL.md +0 -0
  336. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/macro-analyst/tcx-macro/agents/openai.yaml +0 -0
  337. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/news-analyst/tcx-news/SKILL.md +0 -0
  338. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/news-analyst/tcx-news/agents/openai.yaml +0 -0
  339. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/portfolio-manager/tcx-order-draft/SKILL.md +0 -0
  340. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/portfolio-manager/tcx-order-draft/agents/openai.yaml +0 -0
  341. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/portfolio-manager/tcx-portfolio/SKILL.md +0 -0
  342. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/portfolio-manager/tcx-portfolio/agents/openai.yaml +0 -0
  343. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-order-approve/SKILL.md +0 -0
  344. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-order-approve/agents/openai.yaml +0 -0
  345. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-policy/SKILL.md +0 -0
  346. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-policy/agents/openai.yaml +0 -0
  347. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-risk/SKILL.md +0 -0
  348. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/risk-manager/tcx-risk/agents/openai.yaml +0 -0
  349. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-anti-overfit/SKILL.md +0 -0
  350. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-anti-overfit/agents/openai.yaml +0 -0
  351. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-data-qc/SKILL.md +0 -0
  352. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-data-qc/agents/openai.yaml +0 -0
  353. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-evidence/SKILL.md +0 -0
  354. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-evidence/agents/openai.yaml +0 -0
  355. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-forecast/SKILL.md +0 -0
  356. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-forecast/agents/openai.yaml +0 -0
  357. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-scenarios/SKILL.md +0 -0
  358. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-scenarios/agents/openai.yaml +0 -0
  359. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-source-gate/SKILL.md +0 -0
  360. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/shared/tcx-source-gate/agents/openai.yaml +0 -0
  361. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/technical-analyst/tcx-technical/SKILL.md +0 -0
  362. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/technical-analyst/tcx-technical/agents/openai.yaml +0 -0
  363. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/valuation-analyst/tcx-valuation/SKILL.md +0 -0
  364. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/files/.tradingcodex/subagents/skills/valuation-analyst/tcx-valuation/agents/openai.yaml +0 -0
  365. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/repo-skills/module.json +0 -0
  366. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/tradingcodex-mcp/files/.tradingcodex/mcp/enforcer/README.md +0 -0
  367. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/tradingcodex-mcp/files/.tradingcodex/mcp/gateway/README.md +0 -0
  368. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/tradingcodex-mcp/files/.tradingcodex/mcp/server.py +0 -0
  369. {tradingcodex-1.0.0 → tradingcodex-1.0.2}/workspace_templates/modules/tradingcodex-mcp/module.json +0 -0
@@ -2,6 +2,38 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 1.0.2 - 2026-07-15
6
+
7
+ - Preserve an attached release workspace's explicit `TRADINGCODEX_HOME`,
8
+ explicit database override, and projected service address when an update is
9
+ launched through `uvx` instead of the generated wrapper. This prevents a
10
+ custom or isolated v1.0.0 workspace from silently switching to the platform
11
+ default ledger during a package refresh.
12
+ - Fix the public guide's full-width desktop grid so viewport gutters no longer
13
+ collapse the reading column, and align the provider-to-order header with the
14
+ primary Guide/Reference/GitHub navigation. Add route, fragment, mobile-menu,
15
+ and desktop-layout contract tests.
16
+ - Reduce hosted automation usage: normal CI, GitHub Pages deployment, and
17
+ release verification now use one job each; PyPI publication adds only its
18
+ protected upload job. Guide-only pushes skip the source CI workflow.
19
+
20
+ ## 1.0.1 - 2026-07-15
21
+
22
+ - Add the shared `tcx-artifact` skill to all nine producing fixed roles so
23
+ deferred MCP calls receive the exact research-artifact, thesis-lifecycle,
24
+ retry, and forecast persistence procedure.
25
+ - Expand `create_research_artifact` and `issue_forecast` MCP schemas to expose
26
+ state-specific lifecycle fields, one-range probability rules, RFC 3339
27
+ timestamps, and the complete base-rate contract before a call is attempted.
28
+ Artifact validation errors now name the supported alternative fields, and
29
+ MCP resource-template discovery returns an empty supported list. Omitted
30
+ forecast `issued_at` and revision `revised_at` values now reuse the same
31
+ service receipt timestamp as `recorded_at`, eliminating a microsecond race
32
+ that rejected otherwise valid agent calls.
33
+ - Require Codex CLI 0.144.4, the validated reference for generated permission
34
+ profiles, V2 fixed-role dispatch, hooks, and deferred TradingCodex MCP calls.
35
+ Older clients now fail the runtime doctor check with upgrade guidance.
36
+
5
37
  ## 1.0.0 - 2026-07-15
6
38
 
7
39
  - Raise the validated Codex CLI reference to 0.144.4 while retaining the
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tradingcodex
3
- Version: 1.0.0
3
+ Version: 1.0.2
4
4
  Summary: Local-first investment operating system for Codex-native research and service-gated execution.
5
5
  Author: TradingCodex Authors
6
6
  License-Expression: Apache-2.0
@@ -47,7 +47,7 @@ If these layers disagree, treat `docs/` as the durable product intent and fix th
47
47
 
48
48
  | Document | Purpose |
49
49
  | --- | --- |
50
- | [release-readiness.md](./release-readiness.md) | v1.0.0 source readiness, final-commit and exact-artifact validation, and pending tag, publication, and post-publish gates. |
50
+ | [release-readiness.md](./release-readiness.md) | v1.0.1 source readiness, final-commit and exact-artifact validation, and pending tag, publication, and post-publish gates. |
51
51
 
52
52
  ## Workflow And Agent Documents
53
53
 
@@ -109,8 +109,12 @@ files are never replaced.
109
109
 
110
110
  ## Maintainer Prerequisites
111
111
 
112
- Release verification uses Python 3.11 and Node 22, while CI keeps the supported
113
- Python 3.11, 3.12, 3.13, and 3.14 range green. Node is a maintainer-only build
112
+ Release verification uses Python 3.11 and Node 22. The hosted CI budget runs
113
+ the complete source, frontend, and package gates once on Python 3.11 instead
114
+ of multiplying every push across the supported Python range and native
115
+ platforms. Maintainers run additional supported-version or native-platform
116
+ checks locally or through an explicit temporary/manual workflow when a change
117
+ touches compatibility-sensitive code. Node is a maintainer-only build
114
118
  dependency.
115
119
 
116
120
  Configure PyPI Trusted Publishing for:
@@ -159,9 +163,11 @@ also require the disposable-workspace and Codex-native checks documented in
159
163
 
160
164
  ## CI And Release Automation
161
165
 
162
- `.github/workflows/ci.yml` is test-only. It runs frontend verification, safety
163
- invariants, the supported Python matrix, clean package construction, and native
164
- macOS and Windows wheel smokes. It never publishes.
166
+ `.github/workflows/ci.yml` is test-only. One Ubuntu/Python 3.11 job runs the
167
+ frontend build, complete Python suite and framework gates, clean package
168
+ construction, and the wheel smoke. Guide-only pushes skip this workflow because
169
+ the Pages workflow validates and deploys only static guide files. CI never
170
+ publishes.
165
171
 
166
172
  `.github/workflows/release.yml` is manual-only. Every run requires an explicit
167
173
  `release_version`. A dry run may build from any selected ref with
@@ -174,11 +180,13 @@ macOS and Windows wheel smokes. It never publishes.
174
180
  - the tagged commit is on `origin/main`
175
181
  - the wheel and source-distribution filenames carry the same version
176
182
  - the built wheel passes the Ubuntu smoke
177
- - the exact uploaded artifact passes native macOS and Windows smokes
178
183
  - the protected `pypi` environment approves Trusted Publishing
179
184
 
180
- The same uploaded artifact is downloaded by both native jobs and the PyPI
181
- publisher. No job rebuilds the distribution after verification.
185
+ The release workflow has one build/verification job. When publication is
186
+ requested, one protected PyPI job downloads that exact artifact and uploads it;
187
+ no job rebuilds the distribution after verification. Native macOS and Windows
188
+ release smokes are local or explicitly scheduled maintainer gates rather than
189
+ automatic jobs on every release.
182
190
 
183
191
  ## User Guide Pages
184
192
 
@@ -189,10 +197,10 @@ prompts, workspace viewing, reusable skills, and everyday recovery. The detailed
189
197
  product rules remain canonical in `README.md`, `installation.md`, and `docs/`;
190
198
  the guide links back to those sources rather than replacing them.
191
199
 
192
- `.github/workflows/deploy-user-guide.yml` uploads only `guidebook/` and deploys
193
- it to GitHub Pages after a push to `main` that changes the guide or its workflow.
194
- It can also be run manually. It does not build or deploy the Python package,
195
- the Django service, or a production Node runtime.
200
+ `.github/workflows/deploy-user-guide.yml` uses one job to configure, upload,
201
+ and deploy only `guidebook/` to GitHub Pages after a push to `main` that changes
202
+ the guide or its workflow. It can also be run manually. It does not build or
203
+ deploy the Python package, the Django service, or a production Node runtime.
196
204
 
197
205
  GitHub Pages is configured to use **GitHub Actions** as its publishing source.
198
206
  The guide for this repository is published at
@@ -214,8 +222,9 @@ The guide for this repository is published at
214
222
  ```
215
223
 
216
224
  5. In GitHub Actions, run `Manual Release` from that tag with the exact
217
- `release_version`. Use `publish_pypi=false` for a rehearsal and
218
- `publish_pypi=true` only for the approved publication.
225
+ `release_version`. Use `publish_pypi=true` for an approved publication; use
226
+ the optional `publish_pypi=false` rehearsal when release risk warrants an
227
+ additional hosted build.
219
228
 
220
229
  Pushing a branch or tag does not publish by itself.
221
230
 
@@ -252,7 +261,7 @@ sh "$SOURCE_ROOT/install.sh" \
252
261
  On native Windows PowerShell:
253
262
 
254
263
  ```powershell
255
- $ReleaseVersion = "1.0.0"
264
+ $ReleaseVersion = "1.0.2"
256
265
  $Workspace = Join-Path $env:TEMP "tcx-pypi-$ReleaseVersion"
257
266
  New-Item -ItemType Directory -Force $Workspace | Out-Null
258
267
  Set-Location $Workspace
@@ -60,7 +60,7 @@ design, migration, and validation evidence.
60
60
  - Provider canary regressions prove that submit/cancel results, health details,
61
61
  account-sync exceptions, and successful account display metadata do not
62
62
  reappear in DB rows, API/MCP projections, execution results, or audit events.
63
- - A disposable generated workspace reports nine fixed roles and 31 skills,
63
+ - A disposable generated workspace reports nine fixed roles and 32 skills,
64
64
  contains no retired execution role, and exposes no ungated submit, cancel, or
65
65
  broker status-refresh mutation. Its one execution-risk MCP tool is
66
66
  `use_order_turn_grant`, which has no authority without hook-injected proof.
@@ -737,11 +737,11 @@ uvx --refresh --from tradingcodex tcx update . --from tradingcodex
737
737
  Generated root config sets `default_permissions = "trading-research"` and
738
738
  defines two custom profiles. It deliberately omits legacy `sandbox_mode` from
739
739
  the root and every fixed-role TOML because any loaded `sandbox_mode` overrides
740
- custom permission profiles in Codex. This contract supports Codex CLI 0.144.1
740
+ custom permission profiles in Codex. This contract requires Codex CLI 0.144.4
741
741
  or later on a locally supported platform. Version 0.144.4 is the current
742
- release-validation reference for permission profiles, hooks, required MCP
743
- startup, and the explicit V2 feature table. Older compatible patch versions
744
- warn but do not fail ordinary doctor checks. These remain version-sensitive
742
+ release-validation reference for permission profiles, hooks, required MCP,
743
+ deferred MCP calls, and the explicit V2 feature table. Older versions fail the
744
+ Codex runtime doctor check. These remain version-sensitive
745
745
  surfaces, so release validation includes strict config/feature inspection and
746
746
  a real native smoke.
747
747
  See the [Codex permissions reference](https://learn.chatgpt.com/docs/permissions).
@@ -1212,6 +1212,15 @@ service address projected by the launcher. Explicit process environment values s
1212
1212
  doctor then validates both home and DB projection and requires update when the
1213
1213
  generated ledger contract is stale.
1214
1214
 
1215
+ An index/package-runner update such as `uvx --refresh --from tradingcodex tcx
1216
+ update . --from tradingcodex` does not pass through the generated wrapper.
1217
+ Before regeneration, update therefore restores a validated workspace's
1218
+ recorded explicit home and DB override plus the service address from its
1219
+ generated project MCP configuration. It does not pin a recorded
1220
+ `platform_default` absolute path, so a copied workspace can resolve the native
1221
+ default on its destination platform. A new explicit process value remains the
1222
+ only implicit-free way to select a different runtime identity.
1223
+
1215
1224
  TOML, YAML, JSON, POSIX shell, CMD, and Python values are serialized with
1216
1225
  format-specific literals. This is required for macOS paths with spaces and
1217
1226
  Windows drive-letter/backslash paths. Generated code/config uses LF line
@@ -1,15 +1,14 @@
1
- # TradingCodex 1.0.0 Release Status
1
+ # TradingCodex 1.0.2 Release Status
2
2
 
3
- Status: release-branch implementation, broad suite, native workflow, browser,
4
- and exact Ubuntu/macOS/Windows distribution acceptance validated; merge CI,
5
- tag-bound rehearsal, tag, and publication remain pending
3
+ Status: local source, frontend, disposable native workflow, and exact
4
+ distribution gates complete; candidate CI, tag, and publication remain pending
6
5
  Updated: 2026-07-15
7
6
 
8
- This page records the current `1.0.0` release state. It is not an implementation
7
+ This page records the current `1.0.2` release state. It is not an implementation
9
8
  roadmap and does not treat source changes as proof that an exact distribution
10
9
  artifact or public release has passed its gates.
11
10
 
12
- ## v1.0.0 Contract
11
+ ## v1.0.2 Contract
13
12
 
14
13
  - `tradingcodex_service/version.py` is the single version source for package
15
14
  metadata, `tcx --version`, generated workspaces, release input, and tags.
@@ -26,29 +25,63 @@ artifact or public release has passed its gates.
26
25
  requires an installed provider plus every documented safety gate.
27
26
  - The React viewer is a committed static build served by Django and
28
27
  WhiteNoise; Node remains a maintainer-only build dependency.
29
- - PyPI publication is manual, tag-bound, and reuses one verified sdist and
30
- wheel across Ubuntu, macOS, Windows, and publication jobs.
28
+ - Package-runner updates preserve validated explicit home, database, and
29
+ service-address identity unless the operator supplies a replacement.
30
+ - PyPI publication is manual and tag-bound. Hosted automation uses one full CI
31
+ job, one Pages job, and one release build job; publication adds only the
32
+ protected artifact-upload job.
31
33
 
32
34
  ## Current Readiness
33
35
 
34
36
  | Area | Current state | Evidence or remaining gate |
35
37
  | --- | --- | --- |
36
- | Version identity | Verified in the working tree | `TRADINGCODEX_VERSION` is `1.0.0`; `pyproject.toml` reads it dynamically; `tcx --version` uses the same source. |
38
+ | Version identity | Verified in the working tree | `TRADINGCODEX_VERSION` is `1.0.2`; `pyproject.toml` reads it dynamically; `tcx --version` uses the same source. |
37
39
  | Schema baseline | Verified in the working tree | Project apps contain only `0001_v1_initial`; migration-graph and model-state checks live in `tests/test_v1_migrations.py`. |
38
- | Workspace baseline | Current-reference preflight, release-branch native acceptance, and exact-wheel CI verified | A disposable development workspace passed strict pinned-reference config, explicit V2, persisted trust for all eight project hooks, the final artifact-to-synthesis workflow, and the disabled-dispatch fail-closed check after the prepublication quality-gate fix. GitHub CI then passed the exact release-branch wheel on macOS and Windows. |
39
- | Interfaces and safety | Verified on the release branch | GitHub CI passed 614 tests on each of Python 3.11, 3.12, 3.13, and 3.14, plus Django checks, migration checks, compile passes, focused safety invariants, frontend verification, clean-wheel construction, and native acceptance. |
40
- | Frontend | Viewer source, build, and browser acceptance pass | Ten focused tests, typecheck/build, deterministic committed assets, three-section routing, read-only source checks, 1440px/900px/600px layouts, keyboard focus, workspace switching, long-label containment, and invalid-selection failure rendering pass. |
41
- | Release automation | Structurally verified | The release contract suite verifies tag and artifact gating; a manual `publish_pypi=false` rehearsal remains required. |
42
- | Distribution artifacts | Exact release-branch artifacts verified on Ubuntu, macOS, and Windows | Fresh `1.0.0` sdist/wheel build, `twine check`, and packaged-wheel smoke passed locally; GitHub CI built one clean wheel, passed its Ubuntu smoke, and reused the uploaded artifact for native macOS and Windows smokes. |
43
- | Git tag and PyPI | Not performed by this status | Merge/CI, annotated `v1.0.0` tag, protected-environment approval, and manual publication remain release-operator actions. |
40
+ | Workspace baseline | Exact candidate update acceptance passes locally | A disposable explicit-home/explicit-DB workspace updated through a package-runner-style process with those paths and its custom service address preserved. Prior v1.0.1 native role/artifact acceptance remains the unchanged harness baseline. |
41
+ | Interfaces and safety | Full local candidate suite passes | MCP schema, lifecycle-error, skill-projection, resource-template discovery, Codex-version, forecast receipt-time, Django, migration, compile, and full test gates pass. |
42
+ | Frontend and guidebook | Viewer and guide browser acceptance pass | Ten viewer tests and deterministic build pass. The guide passes local route/fragment checks, 1920px layout with a 768px reading column, consistent provider navigation, and real 390px mobile menu routing without horizontal overflow. |
43
+ | Release automation | Structurally verified | Contract tests enforce one normal CI job, one Pages deploy job, and one release build plus optional protected publication job. A dry-run rehearsal remains available when release risk warrants the extra hosted run. |
44
+ | Distribution artifacts | Exact local candidate passes | Fresh `1.0.2` sdist/wheel, `twine check`, and isolated packaged-wheel smoke passed on macOS. |
45
+ | Git tag and PyPI | Not performed by this status | Main CI, annotated `v1.0.2` tag, protected-environment approval, and manual publication remain release-operator actions. |
44
46
  | Post-publish verification | Blocked on publication | Exact-version POSIX and native Windows attach/doctor smokes run only after PyPI contains the immutable artifacts. |
45
47
 
46
48
  Release-branch status describes candidate source shape, not release sign-off.
47
49
  The merged commit and exact uploaded artifacts remain authoritative.
48
50
 
49
- Current release-branch evidence recorded on 2026-07-15 is listed below. It
50
- authorizes merge of the candidate but does not substitute for CI on the merged
51
- commit or the tag-bound rehearsal of the immutable release artifacts:
51
+ The local v1.0.2 candidate evidence recorded on 2026-07-15 is:
52
+
53
+ - The first full suite found six stale next-version fixtures after the version
54
+ bump; after correcting those fixtures, the final full-suite rerun reported
55
+ **624 passed** with three existing Pydantic deprecation warnings.
56
+ - `python3.11 manage.py check`, migration dry-run, compile pass, skill
57
+ validation, JSON-schema validation, and diff checks: passed.
58
+ - `npm ci --prefix frontend`, the ten-test frontend suite, typecheck/build, and
59
+ deterministic committed-asset comparison: passed.
60
+ - A package-runner-style update smoke preserved an explicit home, explicit DB,
61
+ and custom loopback service address while moving the workspace runtime to
62
+ `1.0.2`.
63
+ - Fresh `1.0.2` source and wheel distributions passed `twine check`; an
64
+ isolated macOS wheel install reported runtime version `1.0.2` and completed
65
+ the native platform smoke with a user-home path containing spaces.
66
+ - A fresh generated development workspace passed `tcx doctor` and the strict
67
+ current-reference Codex CLI contract, including all eight trusted hooks.
68
+ - Native artifact persistence completed with one exact
69
+ `fundamental-analyst` child after it loaded `tcx-artifact`; the accepted
70
+ artifact id was
71
+ `research_report-ACME-synthetic-fixture-fundamental-artifact-persistence-smoke-76d0866c5fa1`.
72
+ - Native forecast persistence completed in one exact child without an MCP
73
+ retry: artifact
74
+ `fundamental_report-receipt-race-fixed-synthetic-recurring-revenue-smoke-e3e03d1566da`
75
+ produced forecast `forecast-261e59a11d6d4bb39fe0e8c80c95042d`.
76
+ The omitted caller timestamp resolved to one service receipt time, so
77
+ `issued_at` equaled `recorded_at`.
78
+ - A fresh exact `$tcx-brain` management turn received the hook-owned build-turn
79
+ proof and completed the protected list call, confirming the current-reference
80
+ deferred MCP proof path.
81
+
82
+ The v1.0.0 baseline evidence recorded on 2026-07-15 is listed below. It does
83
+ not substitute for v1.0.2 validation, CI on the candidate commit, or the
84
+ tag-bound verification of the immutable patch artifacts:
52
85
 
53
86
  - GitHub Actions [CI run 29403737708](https://github.com/monarchjuno/tradingcodex/actions/runs/29403737708)
54
87
  passed on release-branch commit `12649b0`: the safety and financial invariant
@@ -168,8 +201,9 @@ and created no child event, role artifact, or synthesis.
168
201
 
169
202
  This is release-branch evidence. The candidate is ready to merge, but the
170
203
  release remains not ready to tag until the merged commit passes GitHub CI. The
171
- tagged immutable artifacts must then pass the manual `publish_pypi=false`
172
- rehearsal before publication.
204
+ tag-bound release build must verify the immutable artifacts before its optional
205
+ protected publication job can run. Use the separate `publish_pypi=false`
206
+ rehearsal when release risk warrants another hosted run.
173
207
 
174
208
  ### Workspace viewer browser acceptance
175
209
 
@@ -216,22 +250,23 @@ python3.11 -m twine check dist/*
216
250
  python3.11 tests/platform_wheel_smoke.py --wheel-dir dist
217
251
  ```
218
252
 
219
- CI and the manual release rehearsal must run the exact uploaded artifact on
220
- Ubuntu, native macOS, and native Windows. The protected `pypi` environment and
221
- Trusted Publisher configuration must be reviewed before publication.
253
+ The hosted release build validates the exact uploaded artifact on Ubuntu.
254
+ Compatibility-sensitive native macOS, Windows, or alternate-Python checks are
255
+ local or explicitly scheduled maintainer gates instead of default jobs. The
256
+ protected `pypi` environment and Trusted Publisher configuration must be
257
+ reviewed before publication.
222
258
 
223
259
  ## Tag And Publication State
224
260
 
225
261
  This document does not assert that the final commit is on `main`, CI is green,
226
- the tag exists, or PyPI contains `1.0.0`. After every final-commit and artifact
262
+ the tag exists, or PyPI contains `1.0.2`. After every final-commit and artifact
227
263
  gate passes:
228
264
 
229
265
  1. Merge the release commit to `main` and wait for CI.
230
- 2. Create and push the annotated tag `v1.0.0` at that commit.
231
- 3. Rehearse the manual workflow with `publish_pypi=false` and
232
- `release_version=1.0.0`.
233
- 4. With protected-environment approval, run the same tag with
234
- `publish_pypi=true`.
266
+ 2. Create and push the annotated tag `v1.0.2` at that commit.
267
+ 3. When release risk warrants the extra hosted run, rehearse with
268
+ `publish_pypi=false` and `release_version=1.0.2`.
269
+ 4. With protected-environment approval, run the tag with `publish_pypi=true`.
235
270
  5. Verify the immutable PyPI files, release notes, and exact-version POSIX and
236
271
  native Windows attach/doctor flows.
237
272
 
@@ -243,6 +243,12 @@ Codex and subagents should use service-layer tools when available:
243
243
  `create_blind_review_assignment`, `get_blind_review_packet`,
244
244
  `record_blind_human_review`, and `compare_evaluation_runs`
245
245
 
246
+ For forecast issue and revision, agents normally omit `issued_at` and
247
+ `revised_at`. The service assigns the event time and `recorded_at` from one
248
+ receipt timestamp, avoiding client-clock drift and preserving the invariant
249
+ that an event cannot occur after its system record. Explicit caller timestamps
250
+ remain timezone-aware and fail closed when they are in the future.
251
+
246
252
  `source_snapshot_ids` are service-issued references, not agent-authored labels.
247
253
  When reproducibility requires a snapshot, the producing role calls
248
254
  `record_source_snapshot` first and copies only the exact returned `snapshot_id`
@@ -118,6 +118,14 @@ Required quality includes source/as-of posture, non-empty readiness label,
118
118
  context and reader summaries, confidence, missing evidence, next action,
119
119
  blocked actions, and explicit handoff state.
120
120
 
121
+ Every producing fixed role receives the shared `tcx-artifact` skill. It maps
122
+ the service's state-specific thesis lifecycle, single-range probability,
123
+ follow-up request, RFC 3339, and complete forecast base-rate requirements into
124
+ a compact persistence procedure. MCP schemas expose the same nested fields so
125
+ deferred tool discovery supplies the contract before the call. A role applies
126
+ all returned corrections in one targeted retry and stops in `waiting` if the
127
+ same contract error repeats.
128
+
121
129
  For run-bound artifacts, provide `workflow_run_id` and exact consumed
122
130
  `input_artifact_ids`. The service derives producer identity, schema version,
123
131
  content hash, and input hashes. `plan_hash`, `stage_id`, and `task_id` are not v1
@@ -328,7 +336,7 @@ judgment, or mutate state. Operational diagnosis and recovery remain
328
336
 
329
337
  ## Validation
330
338
 
331
- Validate the nine-role fixed roster and projections, 31 skill bundles, absence
339
+ Validate the nine-role fixed roster and projections, 32 skill bundles, absence
332
340
  of raw public execution-mutation tools, protected grant-tool proof behavior,
333
341
  deterministic native-action and `$tcx-order-allow` hook behavior,
334
342
  exact V2 dispatch, multilingual analysis requests,
@@ -6,7 +6,7 @@ shape, automate, or review workflows without granting extra authority.
6
6
 
7
7
  ## Naming Contract
8
8
 
9
- All 31 bundled TradingCodex skills use the `tcx-` namespace. Prefer one word
9
+ All 32 bundled TradingCodex skills use the `tcx-` namespace. Prefer one word
10
10
  after the prefix and use at most two words when clarity or safety requires it,
11
11
  as in `tcx-order-submit` or `tcx-investor-context`. Folder names, frontmatter
12
12
  names, registry ids, projected paths, UI metadata, and explicit `$` invocations
@@ -16,6 +16,10 @@ The namespace is reserved for bundled product skills. User-owned
16
16
  `strategy-*`, `investment-brain-*`, and optional role skills remain separate;
17
17
  an optional skill cannot claim a `tcx-*` id.
18
18
 
19
+ The shared internal `tcx-artifact` skill is projected to every producing fixed
20
+ role. It teaches the exact research-artifact, thesis-lifecycle, and forecast
21
+ ledger contracts; users do not invoke it as a Head Manager entrypoint.
22
+
19
23
  ## Primary Entrypoints
20
24
 
21
25
  | Skill | Primary use | Main output |
@@ -48,7 +48,7 @@ The target workspace should be empty. A directory with only `.git` already
48
48
  initialized is fine, as is an empty directory inside an existing parent
49
49
  worktree.
50
50
 
51
- Use Codex CLI 0.144.1 or later on macOS, Linux, WSL, or native Windows. Version
51
+ Use Codex CLI 0.144.4 or later on macOS, Linux, WSL, or native Windows. Version
52
52
  0.144.4 is the current TradingCodex reference for custom permission profiles,
53
53
  hooks, required MCP startup, and explicit MultiAgent V2 configuration. Verify
54
54
  with `codex --version`; `./tcx doctor --layer guidance` fails below the
@@ -227,6 +227,14 @@ uvx --refresh --from tradingcodex tcx update . --from tradingcodex
227
227
  refreshes generated indexes, applies central DB migrations, records workspace
228
228
  provenance, and runs `./tcx doctor` unless `--no-doctor` is passed.
229
229
 
230
+ When the package refresh is launched directly through `uvx`, the updater also
231
+ restores an existing explicit `TRADINGCODEX_HOME`, explicit
232
+ `TRADINGCODEX_DB_NAME`, and projected loopback service address from the
233
+ validated workspace before regeneration. Explicit environment values on the
234
+ new update command still win, so a deliberate runtime move remains possible.
235
+ Platform-default homes are resolved again on the destination platform rather
236
+ than pinning an absolute path from a copied workspace.
237
+
230
238
  Inside a generated Codex workspace, the default `trading-research` profile and
231
239
  Plan mode cannot run workspace updates because update rewrites protected `.codex`
232
240
  prompt/config/hook surfaces. Research may still create and edit ordinary
@@ -12,8 +12,8 @@ from tradingcodex_cli.commands import doctor
12
12
  ("installed", "ok", "warn"),
13
13
  [
14
14
  ("0.144.0", False, False),
15
- ("0.144.1", True, True),
16
- ("0.144.2", True, True),
15
+ ("0.144.1", False, False),
16
+ ("0.144.2", False, False),
17
17
  ("0.144.4", True, False),
18
18
  ("0.145.0", True, True),
19
19
  ],
@@ -41,10 +41,10 @@ def test_codex_cli_reference_version_check(
41
41
  assert result["ok"] is ok
42
42
  assert bool(result.get("warn")) is warn
43
43
  assert f"installed={installed}" in result["detail"]
44
- assert "required>=0.144.1" in result["detail"]
44
+ assert "required>=0.144.4" in result["detail"]
45
45
  assert "reference=0.144.4" in result["detail"]
46
46
  if installed in {"0.144.1", "0.144.2"}:
47
- assert "compatible but older than reference" in result["detail"]
47
+ assert "older than required" in result["detail"]
48
48
  if installed == "0.145.0":
49
49
  assert "newer client requires harness revalidation" in result["detail"]
50
50
 
@@ -72,6 +72,25 @@ def test_mcp_surface_has_one_lightweight_run_tool_and_no_server_orchestrator() -
72
72
  improvement_item = artifact_properties["improvements"]["items"]
73
73
  assert improvement_item["type"] == "object"
74
74
  assert improvement_item["additionalProperties"] is False
75
+ lifecycle = artifact_properties["thesis_lifecycle"]
76
+ assert lifecycle["required"] == ["state"]
77
+ assert lifecycle["properties"]["state"]["enum"] == [
78
+ "exploring",
79
+ "testing",
80
+ "validated",
81
+ "rejected",
82
+ "monitoring",
83
+ ]
84
+ assert {"monitoring_artifact", "review_cadence"} <= set(lifecycle["properties"])
85
+ forecast_properties = TOOL_REGISTRY["issue_forecast"].input_schema["properties"]
86
+ assert forecast_properties["horizon"]["format"] == "date-time"
87
+ assert forecast_properties["issued_at"]["description"].startswith("Optional")
88
+ assert forecast_properties["base_rate"]["required"] == [
89
+ "cohort",
90
+ "source_snapshot_id",
91
+ "sample_size",
92
+ "selection_rule",
93
+ ]
75
94
 
76
95
 
77
96
  def test_authenticated_artifacts_bind_run_local_lineage(tmp_path: Path) -> None:
@@ -256,7 +275,7 @@ def test_generated_contract_projects_sol_head_and_terra_roles(workspace: Path) -
256
275
  assert 'enabled = true' in config
257
276
  assert 'max_concurrent_threads_per_session = 7' in config
258
277
  assert 'max_threads = 6' not in config
259
- assert model_policy["roles"]["head-manager"]["minimum_codex_version"] == "0.144.1"
278
+ assert model_policy["roles"]["head-manager"]["minimum_codex_version"] == "0.144.4"
260
279
  assert model_policy["roles"]["head-manager"]["reference_codex_version"] == "0.144.4"
261
280
  assert "required = true" in config
262
281
  assert '"begin_analysis_run"' in config
@@ -81,6 +81,27 @@ def test_explicit_quality_requirements_still_fail_closed(tmp_path: Path) -> None
81
81
  assert "decision_quality.contrary_evidence" in result["required_fields_missing"]
82
82
 
83
83
 
84
+ def test_monitoring_lifecycle_error_names_the_two_supported_fields(tmp_path: Path) -> None:
85
+ artifact_path = _write_artifact(
86
+ tmp_path,
87
+ "decision_quality_required: true\n"
88
+ "contrary_evidence: []\n"
89
+ "update_triggers: []\n"
90
+ "invalidation_conditions: []\n"
91
+ "source_trust_notes: []\n"
92
+ "thesis_lifecycle:\n"
93
+ " state: monitoring\n",
94
+ )
95
+
96
+ result = evaluate_decision_quality(tmp_path, artifact_path, strict=True)
97
+
98
+ assert "decision_quality.thesis_lifecycle.monitoring_artifact_or_cadence" in result["required_fields_missing"]
99
+ assert (
100
+ "thesis_lifecycle.state=monitoring requires either monitoring_artifact or review_cadence"
101
+ in result["warnings"]
102
+ )
103
+
104
+
84
105
  def test_explicit_context_gate_is_not_suppressed_by_producer_role(tmp_path: Path) -> None:
85
106
  artifact_path = _write_artifact(
86
107
  tmp_path,
@@ -242,7 +242,7 @@ def test_generated_workspace_codex_cli_user_scenario_matrix(tmp_path: Path) -> N
242
242
  status = json.loads(tcx(workspace, env_extra, "subagents", "status").stdout)
243
243
  assert status["installed_count"] == 9
244
244
  assert status["fixed_roster_ok"] is True
245
- assert status["skills_installed"] == 31
245
+ assert status["skills_installed"] == 32
246
246
  plan = json.loads(tcx(workspace, env_extra, "subagents", "plan", "--all").stdout)
247
247
  assert plan["requested_count"] == 9
248
248
  assert plan["parallel_spawn_ok"] is False
@@ -254,10 +254,11 @@ def test_generated_workspace_codex_cli_user_scenario_matrix(tmp_path: Path) -> N
254
254
  "tcx-data-qc",
255
255
  "tcx-scenarios",
256
256
  "tcx-forecast",
257
+ "tcx-artifact",
257
258
  "tcx-fundamental",
258
259
  ]
259
260
  judgment_inspect = json.loads(tcx(workspace, env_extra, "subagents", "inspect", "judgment-reviewer").stdout)
260
- assert judgment_inspect["effective_skills"] == ["tcx-judgment"]
261
+ assert judgment_inspect["effective_skills"] == ["tcx-artifact", "tcx-judgment"]
261
262
 
262
263
  optional_body = workspace / "source-quality-body.md"
263
264
  optional_body.write_text("# Source Quality Check\n\nCheck source dates and cite stale evidence warnings.\n", encoding="utf-8")
@@ -0,0 +1,71 @@
1
+ from __future__ import annotations
2
+
3
+ import re
4
+ from pathlib import Path
5
+ from urllib.parse import unquote, urlsplit
6
+
7
+
8
+ ROOT = Path(__file__).resolve().parents[1]
9
+ GUIDEBOOK = ROOT / "guidebook"
10
+ HREF_RE = re.compile(r'href="([^"]+)"')
11
+ ID_RE = re.compile(r'id="([^"]+)"')
12
+
13
+
14
+ def _html(path: Path) -> str:
15
+ return path.read_text(encoding="utf-8")
16
+
17
+
18
+ def test_guidebook_local_routes_and_fragments_resolve() -> None:
19
+ pages = sorted(GUIDEBOOK.glob("*.html"))
20
+ known_fragments = {
21
+ page.resolve(): set(ID_RE.findall(_html(page)))
22
+ for page in pages
23
+ }
24
+
25
+ for page in pages:
26
+ for raw_href in HREF_RE.findall(_html(page)):
27
+ parsed = urlsplit(raw_href)
28
+ if parsed.scheme or parsed.netloc or raw_href.startswith(("mailto:", "tel:")):
29
+ continue
30
+ target = page if not parsed.path else (page.parent / unquote(parsed.path)).resolve()
31
+ assert target.exists(), f"{page.name}: missing route {raw_href}"
32
+ if parsed.fragment and target.suffix == ".html":
33
+ assert parsed.fragment in known_fragments[target], (
34
+ f"{page.name}: missing fragment {raw_href}"
35
+ )
36
+
37
+
38
+ def test_provider_onboarding_uses_the_primary_guide_navigation() -> None:
39
+ page = _html(GUIDEBOOK / "provider-to-order.html")
40
+ header = page.split('<header class="global-header">', 1)[1].split("</header>", 1)[0]
41
+ assert re.findall(r">([^<>]+)</a>", header)[-3:] == ["Guide", "Reference", "GitHub"]
42
+ assert 'href="index.html" aria-current="page">Guide</a>' in header
43
+ assert 'href="https://github.com/monarchjuno/tradingcodex/tree/main/docs">Reference</a>' in header
44
+
45
+
46
+ def test_provider_mobile_menu_reaches_every_guide_section() -> None:
47
+ page = _html(GUIDEBOOK / "provider-to-order.html")
48
+ mobile = page.split('<details class="mobile-nav">', 1)[1].split("</details>", 1)[0]
49
+ assert HREF_RE.findall(mobile) == [
50
+ "index.html",
51
+ "dynamic-workflow.html",
52
+ "harness.html",
53
+ "decision-memory.html",
54
+ "reusable-context.html",
55
+ "execution-boundary.html",
56
+ "provider-to-order.html",
57
+ "skills.html",
58
+ "research.html",
59
+ "order.html",
60
+ "improve.html",
61
+ "customize.html",
62
+ "help-status.html",
63
+ ]
64
+
65
+
66
+ def test_full_desktop_shell_does_not_double_count_viewport_gutters() -> None:
67
+ css = (GUIDEBOOK / "assets" / "site.css").read_text(encoding="utf-8")
68
+ shell_rule = css.split(".docs-shell {", 1)[1].split("}", 1)[0]
69
+ assert "max-width: 1460px" in shell_rule
70
+ assert "padding: 2.75rem 1.5rem" in shell_rule
71
+ assert "calc((100vw - 1460px) / 2)" not in shell_rule