invar-tools 1.10.0__tar.gz → 1.12.0__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 (485) hide show
  1. {invar_tools-1.10.0 → invar_tools-1.12.0}/.claude/skills/develop/SKILL.md +47 -1
  2. invar_tools-1.12.0/.claude/skills/review/SKILL.md +325 -0
  3. {invar_tools-1.10.0 → invar_tools-1.12.0}/.github/workflows/ci.yml +9 -3
  4. {invar_tools-1.10.0 → invar_tools-1.12.0}/.invar/context.md +53 -3
  5. {invar_tools-1.10.0 → invar_tools-1.12.0}/.pre-commit-config.yaml +9 -0
  6. {invar_tools-1.10.0 → invar_tools-1.12.0}/CLAUDE.md +31 -0
  7. {invar_tools-1.10.0 → invar_tools-1.12.0}/PKG-INFO +58 -8
  8. {invar_tools-1.10.0 → invar_tools-1.12.0}/README.md +55 -7
  9. invar_tools-1.12.0/docs/proposals/DX-74-experiment-report.md +1585 -0
  10. invar_tools-1.12.0/docs/proposals/DX-75-attention-aware-framework.md +959 -0
  11. invar_tools-1.12.0/docs/proposals/DX-78-mcp-protocol-sync.md +575 -0
  12. invar_tools-1.12.0/docs/proposals/LX-09-legacy-onboarding.md +387 -0
  13. invar_tools-1.12.0/docs/proposals/completed/DX-74-tiered-attention-defense.md +913 -0
  14. invar_tools-1.12.0/docs/proposals/completed/DX-76-structured-document-query.md +451 -0
  15. invar_tools-1.12.0/docs/proposals/completed/DX-77-mcp-doc-tools-enhancements.md +404 -0
  16. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/index.md +6 -3
  17. {invar_tools-1.10.0 → invar_tools-1.12.0}/pyproject.toml +5 -2
  18. invar_tools-1.12.0/src/invar/core/doc_edit.py +187 -0
  19. invar_tools-1.12.0/src/invar/core/doc_parser.py +563 -0
  20. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/ts_sig_parser.py +6 -3
  21. invar_tools-1.12.0/src/invar/mcp/handlers.py +436 -0
  22. invar_tools-1.12.0/src/invar/mcp/server.py +550 -0
  23. invar_tools-1.12.0/src/invar/node_tools/ts-query.js +396 -0
  24. invar_tools-1.12.0/src/invar/shell/commands/doc.py +409 -0
  25. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/shell/commands/guard.py +29 -0
  26. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/shell/commands/init.py +72 -13
  27. invar_tools-1.12.0/src/invar/shell/commands/perception.py +547 -0
  28. invar_tools-1.12.0/src/invar/shell/doc_tools.py +459 -0
  29. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/shell/fs.py +15 -14
  30. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/shell/prove/crosshair.py +3 -0
  31. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/shell/prove/guard_ts.py +13 -10
  32. invar_tools-1.12.0/src/invar/shell/py_refs.py +156 -0
  33. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/shell/skill_manager.py +17 -15
  34. invar_tools-1.12.0/src/invar/shell/ts_compiler.py +238 -0
  35. invar_tools-1.12.0/src/invar/templates/examples/typescript/patterns.md +193 -0
  36. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/skills/develop/SKILL.md.jinja +46 -0
  37. invar_tools-1.12.0/src/invar/templates/skills/review/SKILL.md.jinja +325 -0
  38. {invar_tools-1.10.0 → invar_tools-1.12.0}/tests/conftest.py +2 -1
  39. invar_tools-1.12.0/tests/experiments/conftest.py +7 -0
  40. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/README.md +150 -0
  41. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/RESULTS.md +75 -0
  42. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/RESULTS_V2.md +342 -0
  43. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/RESULTS_V4.md +710 -0
  44. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/ground_truth.yaml +428 -0
  45. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/prompts.yaml +105 -0
  46. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario/api_client.py +104 -0
  47. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario/auth_service.py +87 -0
  48. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario/config_manager.py +141 -0
  49. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario/data_processor.py +118 -0
  50. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario/file_handler.py +132 -0
  51. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario/utils.py +156 -0
  52. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v2/analytics_engine.py +825 -0
  53. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v2/ground_truth.yaml +282 -0
  54. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v2/inventory_manager.py +730 -0
  55. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v2/notification_service.py +736 -0
  56. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v2/order_processor.py +760 -0
  57. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v2/payment_gateway.py +634 -0
  58. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v2/user_service.py +700 -0
  59. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v3/README.md +60 -0
  60. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v3/cache_service.py +323 -0
  61. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v3/calculator.py +327 -0
  62. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v3/data_processor.py +337 -0
  63. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v3/ground_truth.yaml +454 -0
  64. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v3/user_manager.py +352 -0
  65. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v3/validator.py +347 -0
  66. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v4/.serena/.gitignore +1 -0
  67. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v4/.serena/project.yml +84 -0
  68. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v4/README.md +83 -0
  69. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v4/config_manager.py +243 -0
  70. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v4/data_service.py +306 -0
  71. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v4/ground_truth.yaml +530 -0
  72. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v4/math_utils.py +291 -0
  73. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v4/report_generator.py +346 -0
  74. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v4/user_auth.py +319 -0
  75. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v5/api_gateway.py +285 -0
  76. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v5/auth_service.py +279 -0
  77. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v5/cache_handler.py +270 -0
  78. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v5/config_loader.py +248 -0
  79. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v5/data_validator.py +283 -0
  80. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v5/ground_truth.yaml +888 -0
  81. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v5/metrics_collector.py +266 -0
  82. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v5/notification_service.py +261 -0
  83. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v5/payment_processor.py +343 -0
  84. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v5/report_builder.py +336 -0
  85. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v5/task_scheduler.py +296 -0
  86. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v5/user_manager.py +266 -0
  87. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v5/utils.py +308 -0
  88. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v6/api_gateway.py +270 -0
  89. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v6/auth_service.py +264 -0
  90. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v6/cache_handler.py +257 -0
  91. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v6/config_loader.py +239 -0
  92. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v6/data_validator.py +270 -0
  93. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v6/ground_truth.yaml +888 -0
  94. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v6/metrics_collector.py +256 -0
  95. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v6/notification_service.py +251 -0
  96. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v6/payment_processor.py +326 -0
  97. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v6/report_builder.py +324 -0
  98. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v6/task_scheduler.py +285 -0
  99. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v6/user_manager.py +252 -0
  100. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v6/utils.py +308 -0
  101. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v7/api_service.py +712 -0
  102. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v7/auth_manager.py +598 -0
  103. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v7/data_processor.py +602 -0
  104. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v7/ground_truth.yaml +239 -0
  105. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v7/report_engine.py +904 -0
  106. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v7/storage_handler.py +818 -0
  107. invar_tools-1.12.0/tests/experiments/dx74_attention_drift/scenario_v7/utils.py +417 -0
  108. {invar_tools-1.10.0 → invar_tools-1.12.0}/tests/integration/test_cli_flags.py +0 -2
  109. {invar_tools-1.10.0 → invar_tools-1.12.0}/tests/integration/test_dx55_regression.py +0 -3
  110. {invar_tools-1.10.0 → invar_tools-1.12.0}/tests/integration/test_dx56_sync.py +0 -3
  111. invar_tools-1.12.0/tests/integration/test_dx78_ts_compiler.py +572 -0
  112. {invar_tools-1.10.0 → invar_tools-1.12.0}/tests/integration/test_lx05_detection.py +0 -1
  113. {invar_tools-1.10.0 → invar_tools-1.12.0}/tests/integration/test_lx05_integration.py +0 -1
  114. {invar_tools-1.10.0 → invar_tools-1.12.0}/tests/integration/test_lx05_templates.py +0 -1
  115. {invar_tools-1.10.0 → invar_tools-1.12.0}/tests/integration/test_lx06_typescript.py +0 -3
  116. {invar_tools-1.10.0 → invar_tools-1.12.0}/tests/integration/test_lx07_skills.py +12 -11
  117. invar_tools-1.12.0/tests/integration/test_mcp_doc_tools.py +535 -0
  118. {invar_tools-1.10.0 → invar_tools-1.12.0}/tests/test_subprocess_env.py +0 -3
  119. invar_tools-1.10.0/.claude/skills/review/SKILL.md +0 -613
  120. invar_tools-1.10.0/src/invar/mcp/server.py +0 -355
  121. invar_tools-1.10.0/src/invar/shell/commands/perception.py +0 -251
  122. invar_tools-1.10.0/src/invar/templates/skills/review/SKILL.md.jinja +0 -613
  123. {invar_tools-1.10.0 → invar_tools-1.12.0}/.aider.conf.yml +0 -0
  124. {invar_tools-1.10.0 → invar_tools-1.12.0}/.claude/commands/audit.md +0 -0
  125. {invar_tools-1.10.0 → invar_tools-1.12.0}/.claude/commands/guard.md +0 -0
  126. {invar_tools-1.10.0 → invar_tools-1.12.0}/.claude/hooks/PostToolUse.sh +0 -0
  127. {invar_tools-1.10.0 → invar_tools-1.12.0}/.claude/hooks/PreToolUse.sh +0 -0
  128. {invar_tools-1.10.0 → invar_tools-1.12.0}/.claude/hooks/Stop.sh +0 -0
  129. {invar_tools-1.10.0 → invar_tools-1.12.0}/.claude/hooks/UserPromptSubmit.sh +0 -0
  130. {invar_tools-1.10.0 → invar_tools-1.12.0}/.claude/hooks/invar.PostToolUse.sh +0 -0
  131. {invar_tools-1.10.0 → invar_tools-1.12.0}/.claude/hooks/invar.PreToolUse.sh +0 -0
  132. {invar_tools-1.10.0 → invar_tools-1.12.0}/.claude/hooks/invar.Stop.sh +0 -0
  133. {invar_tools-1.10.0 → invar_tools-1.12.0}/.claude/hooks/invar.UserPromptSubmit.sh +0 -0
  134. {invar_tools-1.10.0 → invar_tools-1.12.0}/.claude/skills/acceptance/SKILL.md +0 -0
  135. {invar_tools-1.10.0 → invar_tools-1.12.0}/.claude/skills/invar-onboard/SKILL.md +0 -0
  136. {invar_tools-1.10.0 → invar_tools-1.12.0}/.claude/skills/invar-onboard/patterns/python.md +0 -0
  137. {invar_tools-1.10.0 → invar_tools-1.12.0}/.claude/skills/invar-onboard/patterns/typescript.md +0 -0
  138. {invar_tools-1.10.0 → invar_tools-1.12.0}/.claude/skills/invar-onboard/templates/assessment.md.jinja +0 -0
  139. {invar_tools-1.10.0 → invar_tools-1.12.0}/.claude/skills/invar-onboard/templates/roadmap.md.jinja +0 -0
  140. {invar_tools-1.10.0 → invar_tools-1.12.0}/.claude/skills/investigate/SKILL.md +0 -0
  141. {invar_tools-1.10.0 → invar_tools-1.12.0}/.claude/skills/propose/SKILL.md +0 -0
  142. {invar_tools-1.10.0 → invar_tools-1.12.0}/.claude/skills/security/SKILL.md +0 -0
  143. {invar_tools-1.10.0 → invar_tools-1.12.0}/.claude/skills/security/patterns/_common.yaml +0 -0
  144. {invar_tools-1.10.0 → invar_tools-1.12.0}/.claude/skills/security/patterns/python.yaml +0 -0
  145. {invar_tools-1.10.0 → invar_tools-1.12.0}/.claude/skills/security/patterns/typescript.yaml +0 -0
  146. {invar_tools-1.10.0 → invar_tools-1.12.0}/.cursorrules +0 -0
  147. {invar_tools-1.10.0 → invar_tools-1.12.0}/.github/workflows/publish.yml +0 -0
  148. {invar_tools-1.10.0 → invar_tools-1.12.0}/.gitignore +0 -0
  149. {invar_tools-1.10.0 → invar_tools-1.12.0}/.invar/archive/sessions-2025-12.md +0 -0
  150. {invar_tools-1.10.0 → invar_tools-1.12.0}/.invar/examples/README.md +0 -0
  151. {invar_tools-1.10.0 → invar_tools-1.12.0}/.invar/examples/conftest.py +0 -0
  152. {invar_tools-1.10.0 → invar_tools-1.12.0}/.invar/examples/contracts.py +0 -0
  153. {invar_tools-1.10.0 → invar_tools-1.12.0}/.invar/examples/core_shell.py +0 -0
  154. {invar_tools-1.10.0 → invar_tools-1.12.0}/.invar/examples/functional.py +0 -0
  155. {invar_tools-1.10.0 → invar_tools-1.12.0}/.invar/examples/workflow.md +0 -0
  156. {invar_tools-1.10.0 → invar_tools-1.12.0}/.invar/mcp-setup.md +0 -0
  157. {invar_tools-1.10.0 → invar_tools-1.12.0}/.invar/project-additions.md +0 -0
  158. {invar_tools-1.10.0 → invar_tools-1.12.0}/.invar/proposals/TEMPLATE.md +0 -0
  159. {invar_tools-1.10.0 → invar_tools-1.12.0}/.mcp.json +0 -0
  160. {invar_tools-1.10.0 → invar_tools-1.12.0}/.serena/.gitignore +0 -0
  161. {invar_tools-1.10.0 → invar_tools-1.12.0}/.serena/project.yml +0 -0
  162. {invar_tools-1.10.0 → invar_tools-1.12.0}/INVAR.md +0 -0
  163. {invar_tools-1.10.0 → invar_tools-1.12.0}/LICENSE +0 -0
  164. {invar_tools-1.10.0 → invar_tools-1.12.0}/LICENSE-GPL +0 -0
  165. {invar_tools-1.10.0 → invar_tools-1.12.0}/NOTICE +0 -0
  166. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/.nojekyll +0 -0
  167. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/agents.md +0 -0
  168. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/design.md +0 -0
  169. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/diagrams.md +0 -0
  170. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/guide.md +0 -0
  171. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/guides/aider.md +0 -0
  172. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/guides/cline.md +0 -0
  173. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/guides/continue.md +0 -0
  174. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/guides/cursor.md +0 -0
  175. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/guides/multi-agent.md +0 -0
  176. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/guides/pi.md +0 -0
  177. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/history/decisions-2024.md +0 -0
  178. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/history/feedback/compliance-analysis.md +0 -0
  179. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/history/feedback/feedback-memo.md +0 -0
  180. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/history/feedback/index.md +0 -0
  181. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/history/index.md +0 -0
  182. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/history/original-vision.md +0 -0
  183. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/history/protocol-evolution.md +0 -0
  184. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/history/research/cruxeval-quick-validation.md +0 -0
  185. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/index.html +0 -0
  186. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/logo.svg +0 -0
  187. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/DX-23-entry-point-detection.md +0 -0
  188. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/DX-25-functional-patterns.md +0 -0
  189. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/DX-29-pure-content-detection.md +0 -0
  190. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/DX-38-contract-quality-rules.md +0 -0
  191. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/DX-60-structured-rules-ssot.md +0 -0
  192. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/DX-61-functional-pattern-guidance.md +0 -0
  193. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/DX-61-implementation-design.md +0 -0
  194. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/DX-62-proactive-reference-reading.md +0 -0
  195. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/DX-68-agent-behavior-optimization.md +0 -0
  196. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/LX-01-multi-language-feasibility.md +0 -0
  197. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/LX-04-pi-agent-support.md +0 -0
  198. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/LX-07-extension-skills.md +0 -0
  199. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/LX-08-extension-skills-future.md +0 -0
  200. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/2024-12-21-guard-enhancements.md +0 -0
  201. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/2024-12-21-language-inspired-enhancements.md +0 -0
  202. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/2024-12-21-test-first-enhancement.md +0 -0
  203. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/2025-12-21-dx-improvements.md +0 -0
  204. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/2025-12-23-dx-20-property-testing-enhancements.md +0 -0
  205. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/2025-12-23-dx-21-package-and-init.md +0 -0
  206. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/AGENT-IMPROVEMENTS.md +0 -0
  207. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-11-documentation-restructure.md +0 -0
  208. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-12-hypothesis-fallback.md +0 -0
  209. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-13-incremental-prove.md +0 -0
  210. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-14-expanded-prove-usage.md +0 -0
  211. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-16-agent-tool-enforcement.md +0 -0
  212. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-17-workflow-enforcement.md +0 -0
  213. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-22-verification-strategy.md +0 -0
  214. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-24-mechanism-documentation.md +0 -0
  215. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-26-guard-simplification.md +0 -0
  216. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-27-system-prompt-protocol.md +0 -0
  217. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-28-semantic-verification.md +0 -0
  218. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-30-visible-workflow.md +0 -0
  219. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-31-adversarial-reviewer.md +0 -0
  220. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-32-workflow-iteration.md +0 -0
  221. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-33-verification-blind-spots.md +0 -0
  222. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-34-review-cycle.md +0 -0
  223. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-35-workflow-phase-separation.md +0 -0
  224. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-36-documentation-restructuring.md +0 -0
  225. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-37-coverage-integration.md +0 -0
  226. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-39-workflow-efficiency.md +0 -0
  227. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-40-smart-tool-redirect-hook.md +0 -0
  228. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-41-automatic-review-orchestration.md +0 -0
  229. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-42-workflow-auto-routing.md +0 -0
  230. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-43-cross-platform-distribution.md +0 -0
  231. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-45-template-consistency.md +0 -0
  232. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-46-documentation-audit.md +0 -0
  233. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-47-command-skill-naming.md +0 -0
  234. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-48-code-structure-reorganization.md +0 -0
  235. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-49-protocol-distribution-unification.md +0 -0
  236. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-50-workflow-enforcement.md +0 -0
  237. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-51-workflow-phase-visibility.md +0 -0
  238. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-52-venv-dependency-injection.md +0 -0
  239. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-53-review-loop-effectiveness.md +0 -0
  240. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-54-agent-native-context-management.md +0 -0
  241. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-55-claude-init-conflict-resolution.md +0 -0
  242. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-56-template-sync-unification.md +0 -0
  243. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-57-claude-code-hooks.md +0 -0
  244. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-58-document-structure-optimization.md +0 -0
  245. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-63-contracts-first-enforcement.md +0 -0
  246. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-64-version-display-unification.md +0 -0
  247. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-65-single-file-guard.md +0 -0
  248. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-66-escape-hatch-visibility.md +0 -0
  249. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-67-explicit-skill-invocation.md +0 -0
  250. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-69-project-uninstall.md +0 -0
  251. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-70-init-simplification.md +0 -0
  252. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-70-review-isolation.md +0 -0
  253. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-71-skill-command-simplification.md +0 -0
  254. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-72-mandatory-self-review-detection.md +0 -0
  255. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/LX-02-agent-portability-analysis.md +0 -0
  256. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/LX-03-multi-agent-support.md +0 -0
  257. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/LX-05-language-agnostic-protocol.md +0 -0
  258. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/LX-06-appendix-guard-comparison.md +0 -0
  259. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/LX-06-typescript-tooling.md +0 -0
  260. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/LX-09-legacy-onboarding.md +0 -0
  261. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/proposals/completed/LX-10-typescript-size-limits.md +0 -0
  262. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/reference/agent-information-hierarchy.md +0 -0
  263. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/reference/architecture/index.md +0 -0
  264. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/reference/contracts/advanced.md +0 -0
  265. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/reference/contracts/completeness.md +0 -0
  266. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/reference/contracts/doctests.md +0 -0
  267. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/reference/contracts/index.md +0 -0
  268. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/reference/contracts/pre-post.md +0 -0
  269. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/reference/documentation.md +0 -0
  270. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/reference/index.md +0 -0
  271. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/reference/proposal-workflow.md +0 -0
  272. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/reference/rules/index.md +0 -0
  273. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/reference/rules/severity.md +0 -0
  274. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/reference/verification/crosshair-vs-hypothesis.md +0 -0
  275. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/reference/verification/index.md +0 -0
  276. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/reference/verification/smart-routing.md +0 -0
  277. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/reference/workflow/index.md +0 -0
  278. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/reference/workflow/session-start.md +0 -0
  279. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/reference/workflow/usbv.md +0 -0
  280. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/terminal-gif-guide.md +0 -0
  281. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/test-reports/DX-55-test-report.md +0 -0
  282. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/test-reports/DX-56-test-report.md +0 -0
  283. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/test-reports/DX-58-test-scenario.md +0 -0
  284. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/testing/v1.5.0-stress-test.md +0 -0
  285. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/testing/v1.5.0-test-report.md +0 -0
  286. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/testing/v1.5.0-workflow-compliance.md +0 -0
  287. {invar_tools-1.10.0 → invar_tools-1.12.0}/docs/vision.md +0 -0
  288. {invar_tools-1.10.0 → invar_tools-1.12.0}/runtime/LICENSE +0 -0
  289. {invar_tools-1.10.0 → invar_tools-1.12.0}/runtime/README.md +0 -0
  290. {invar_tools-1.10.0 → invar_tools-1.12.0}/runtime/pyproject.toml +0 -0
  291. {invar_tools-1.10.0 → invar_tools-1.12.0}/runtime/src/invar_runtime/__init__.py +0 -0
  292. {invar_tools-1.10.0 → invar_tools-1.12.0}/runtime/src/invar_runtime/contracts.py +0 -0
  293. {invar_tools-1.10.0 → invar_tools-1.12.0}/runtime/src/invar_runtime/decorators.py +0 -0
  294. {invar_tools-1.10.0 → invar_tools-1.12.0}/runtime/src/invar_runtime/invariant.py +0 -0
  295. {invar_tools-1.10.0 → invar_tools-1.12.0}/runtime/src/invar_runtime/relations.py +0 -0
  296. {invar_tools-1.10.0 → invar_tools-1.12.0}/runtime/src/invar_runtime/resource.py +0 -0
  297. {invar_tools-1.10.0 → invar_tools-1.12.0}/scripts/embed_node_tools.py +0 -0
  298. {invar_tools-1.10.0 → invar_tools-1.12.0}/scripts/smart-guard.sh +0 -0
  299. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/core/__init__.py +0 -0
  300. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/__init__.py +0 -0
  301. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/__init__.py +0 -0
  302. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/contracts.py +0 -0
  303. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/entry_points.py +0 -0
  304. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/extraction.py +0 -0
  305. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/format_specs.py +0 -0
  306. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/format_strategies.py +0 -0
  307. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/formatter.py +0 -0
  308. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/hypothesis_strategies.py +0 -0
  309. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/inspect.py +0 -0
  310. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/lambda_helpers.py +0 -0
  311. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/language.py +0 -0
  312. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/models.py +0 -0
  313. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/must_use.py +0 -0
  314. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/parser.py +0 -0
  315. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/patterns/__init__.py +0 -0
  316. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/patterns/detector.py +0 -0
  317. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/patterns/p0_exhaustive.py +0 -0
  318. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/patterns/p0_literal.py +0 -0
  319. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/patterns/p0_newtype.py +0 -0
  320. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/patterns/p0_nonempty.py +0 -0
  321. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/patterns/p0_validation.py +0 -0
  322. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/patterns/registry.py +0 -0
  323. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/patterns/types.py +0 -0
  324. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/postcondition_scope.py +0 -0
  325. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/property_gen.py +0 -0
  326. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/purity.py +0 -0
  327. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/purity_heuristics.py +0 -0
  328. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/references.py +0 -0
  329. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/review_trigger.py +0 -0
  330. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/rule_meta.py +0 -0
  331. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/rules.py +0 -0
  332. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/shell_analysis.py +0 -0
  333. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/shell_architecture.py +0 -0
  334. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/strategies.py +0 -0
  335. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/suggestions.py +0 -0
  336. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/sync_helpers.py +0 -0
  337. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/tautology.py +0 -0
  338. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/template_helpers.py +0 -0
  339. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/template_parser.py +0 -0
  340. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/timeout_inference.py +0 -0
  341. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/trivial_detection.py +0 -0
  342. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/ts_parsers.py +0 -0
  343. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/utils.py +0 -0
  344. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/core/verification_routing.py +0 -0
  345. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/mcp/__init__.py +0 -0
  346. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/mcp/__main__.py +0 -0
  347. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/node_tools/MANIFEST +0 -0
  348. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/node_tools/__init__.py +0 -0
  349. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/node_tools/fc-runner/cli.js +0 -0
  350. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/node_tools/quick-check/cli.js +0 -0
  351. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/node_tools/ts-analyzer/cli.js +0 -0
  352. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/py.typed +0 -0
  353. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/shell/__init__.py +0 -0
  354. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/shell/claude_hooks.py +0 -0
  355. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/shell/commands/__init__.py +0 -0
  356. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/shell/commands/hooks.py +0 -0
  357. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/shell/commands/merge.py +0 -0
  358. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/shell/commands/mutate.py +0 -0
  359. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/shell/commands/skill.py +0 -0
  360. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/shell/commands/sync_self.py +0 -0
  361. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/shell/commands/template_sync.py +0 -0
  362. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/shell/commands/test.py +0 -0
  363. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/shell/commands/uninstall.py +0 -0
  364. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/shell/commands/update.py +0 -0
  365. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/shell/config.py +0 -0
  366. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/shell/contract_coverage.py +0 -0
  367. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/shell/coverage.py +0 -0
  368. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/shell/git.py +0 -0
  369. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/shell/guard_helpers.py +0 -0
  370. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/shell/guard_output.py +0 -0
  371. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/shell/mcp_config.py +0 -0
  372. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/shell/mutation.py +0 -0
  373. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/shell/pattern_integration.py +0 -0
  374. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/shell/pi_hooks.py +0 -0
  375. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/shell/property_tests.py +0 -0
  376. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/shell/prove/__init__.py +0 -0
  377. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/shell/prove/accept.py +0 -0
  378. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/shell/prove/cache.py +0 -0
  379. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/shell/prove/hypothesis.py +0 -0
  380. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/shell/subprocess_env.py +0 -0
  381. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/shell/template_engine.py +0 -0
  382. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/shell/templates.py +0 -0
  383. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/shell/testing.py +0 -0
  384. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/CLAUDE.md.template +0 -0
  385. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/__init__.py +0 -0
  386. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/claude-md/python/critical-rules.md +0 -0
  387. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/claude-md/python/quick-reference.md +0 -0
  388. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/claude-md/typescript/critical-rules.md +0 -0
  389. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/claude-md/typescript/quick-reference.md +0 -0
  390. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/claude-md/universal/check-in.md +0 -0
  391. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/claude-md/universal/skills.md +0 -0
  392. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/claude-md/universal/workflow.md +0 -0
  393. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/commands/audit.md.jinja +0 -0
  394. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/commands/guard.md +0 -0
  395. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/config/AGENT.md.jinja +0 -0
  396. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/config/CLAUDE.md.jinja +0 -0
  397. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/config/context.md.jinja +0 -0
  398. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/config/pre-commit.yaml.jinja +0 -0
  399. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/context.md.template +0 -0
  400. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/examples/python/README.md +0 -0
  401. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/examples/python/conftest.py +0 -0
  402. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/examples/python/contracts.py +0 -0
  403. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/examples/python/core_shell.py +0 -0
  404. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/examples/python/functional.py +0 -0
  405. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/examples/python/workflow.md +0 -0
  406. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/examples/typescript/README.md +0 -0
  407. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/examples/typescript/contracts.ts +0 -0
  408. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/examples/typescript/core_shell.ts +0 -0
  409. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/examples/typescript/functional.ts +0 -0
  410. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/examples/typescript/workflow.md +0 -0
  411. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/hooks/PostToolUse.sh.jinja +0 -0
  412. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/hooks/PreToolUse.sh.jinja +0 -0
  413. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/hooks/Stop.sh.jinja +0 -0
  414. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/hooks/UserPromptSubmit.sh.jinja +0 -0
  415. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/hooks/__init__.py +0 -0
  416. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/hooks/pi/invar.ts.jinja +0 -0
  417. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/manifest.toml +0 -0
  418. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/onboard/assessment.md.jinja +0 -0
  419. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/onboard/patterns/python.md +0 -0
  420. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/onboard/patterns/typescript.md +0 -0
  421. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/onboard/roadmap.md.jinja +0 -0
  422. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/proposal.md.template +0 -0
  423. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/protocol/INVAR.md.jinja +0 -0
  424. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/protocol/python/architecture-examples.md +0 -0
  425. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/protocol/python/contracts-syntax.md +0 -0
  426. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/protocol/python/markers.md +0 -0
  427. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/protocol/python/tools.md +0 -0
  428. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/protocol/python/troubleshooting.md +0 -0
  429. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/protocol/typescript/architecture-examples.md +0 -0
  430. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/protocol/typescript/contracts-syntax.md +0 -0
  431. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/protocol/typescript/markers.md +0 -0
  432. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/protocol/typescript/tools.md +0 -0
  433. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/protocol/typescript/troubleshooting.md +0 -0
  434. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/protocol/universal/architecture.md +0 -0
  435. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/protocol/universal/completion.md +0 -0
  436. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/protocol/universal/contracts-concept.md +0 -0
  437. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/protocol/universal/header.md +0 -0
  438. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/protocol/universal/session.md +0 -0
  439. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/protocol/universal/six-laws.md +0 -0
  440. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/protocol/universal/usbv.md +0 -0
  441. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/protocol/universal/visible-workflow.md +0 -0
  442. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/skills/extensions/_registry.yaml +0 -0
  443. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/skills/extensions/acceptance/SKILL.md +0 -0
  444. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/skills/extensions/invar-onboard/SKILL.md +0 -0
  445. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/skills/extensions/invar-onboard/patterns/python.md +0 -0
  446. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/skills/extensions/invar-onboard/patterns/typescript.md +0 -0
  447. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/skills/extensions/invar-onboard/templates/assessment.md.jinja +0 -0
  448. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/skills/extensions/invar-onboard/templates/roadmap.md.jinja +0 -0
  449. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/skills/extensions/security/SKILL.md +0 -0
  450. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/skills/extensions/security/patterns/_common.yaml +0 -0
  451. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/skills/extensions/security/patterns/python.yaml +0 -0
  452. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/skills/extensions/security/patterns/typescript.yaml +0 -0
  453. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/skills/investigate/SKILL.md.jinja +0 -0
  454. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/invar/templates/skills/propose/SKILL.md.jinja +0 -0
  455. {invar_tools-1.10.0 → invar_tools-1.12.0}/src/shell/__init__.py +0 -0
  456. {invar_tools-1.10.0 → invar_tools-1.12.0}/tests/__init__.py +0 -0
  457. {invar_tools-1.10.0 → invar_tools-1.12.0}/tests/integration/__init__.py +0 -0
  458. {invar_tools-1.10.0 → invar_tools-1.12.0}/typescript/.gitignore +0 -0
  459. {invar_tools-1.10.0 → invar_tools-1.12.0}/typescript/README.md +0 -0
  460. {invar_tools-1.10.0 → invar_tools-1.12.0}/typescript/package.json +0 -0
  461. {invar_tools-1.10.0 → invar_tools-1.12.0}/typescript/packages/eslint-plugin/package.json +0 -0
  462. {invar_tools-1.10.0 → invar_tools-1.12.0}/typescript/packages/eslint-plugin/src/index.ts +0 -0
  463. {invar_tools-1.10.0 → invar_tools-1.12.0}/typescript/packages/eslint-plugin/src/rules/no-any-in-schema.ts +0 -0
  464. {invar_tools-1.10.0 → invar_tools-1.12.0}/typescript/packages/eslint-plugin/src/rules/no-io-in-core.ts +0 -0
  465. {invar_tools-1.10.0 → invar_tools-1.12.0}/typescript/packages/eslint-plugin/src/rules/require-jsdoc-example.ts +0 -0
  466. {invar_tools-1.10.0 → invar_tools-1.12.0}/typescript/packages/eslint-plugin/src/rules/require-schema-validation.ts +0 -0
  467. {invar_tools-1.10.0 → invar_tools-1.12.0}/typescript/packages/eslint-plugin/src/rules/shell-result-type.ts +0 -0
  468. {invar_tools-1.10.0 → invar_tools-1.12.0}/typescript/packages/eslint-plugin/tsconfig.json +0 -0
  469. {invar_tools-1.10.0 → invar_tools-1.12.0}/typescript/packages/fc-runner/package.json +0 -0
  470. {invar_tools-1.10.0 → invar_tools-1.12.0}/typescript/packages/fc-runner/src/cli.ts +0 -0
  471. {invar_tools-1.10.0 → invar_tools-1.12.0}/typescript/packages/fc-runner/src/index.ts +0 -0
  472. {invar_tools-1.10.0 → invar_tools-1.12.0}/typescript/packages/fc-runner/tsconfig.json +0 -0
  473. {invar_tools-1.10.0 → invar_tools-1.12.0}/typescript/packages/quick-check/package.json +0 -0
  474. {invar_tools-1.10.0 → invar_tools-1.12.0}/typescript/packages/quick-check/src/cli.ts +0 -0
  475. {invar_tools-1.10.0 → invar_tools-1.12.0}/typescript/packages/quick-check/src/index.ts +0 -0
  476. {invar_tools-1.10.0 → invar_tools-1.12.0}/typescript/packages/quick-check/tsconfig.json +0 -0
  477. {invar_tools-1.10.0 → invar_tools-1.12.0}/typescript/packages/ts-analyzer/package.json +0 -0
  478. {invar_tools-1.10.0 → invar_tools-1.12.0}/typescript/packages/ts-analyzer/src/cli.ts +0 -0
  479. {invar_tools-1.10.0 → invar_tools-1.12.0}/typescript/packages/ts-analyzer/src/index.ts +0 -0
  480. {invar_tools-1.10.0 → invar_tools-1.12.0}/typescript/packages/ts-analyzer/tsconfig.json +0 -0
  481. {invar_tools-1.10.0 → invar_tools-1.12.0}/typescript/pnpm-workspace.yaml +0 -0
  482. {invar_tools-1.10.0 → invar_tools-1.12.0}/typescript/scripts/bundle.mjs +0 -0
  483. {invar_tools-1.10.0 → invar_tools-1.12.0}/typescript/tsconfig.base.json +0 -0
  484. {invar_tools-1.10.0 → invar_tools-1.12.0}/typescript/vitest.config.ts +0 -0
  485. {invar_tools-1.10.0 → invar_tools-1.12.0}/uv.lock +0 -0
@@ -2,7 +2,7 @@
2
2
  name: develop
3
3
  description: Implementation phase following USBV workflow. Use when task is clear and actionable - "add", "implement", "create", "fix", "update", "build", "write". Requires Check-In at start and Final at end.
4
4
  _invar:
5
- version: "5.0"
5
+ version: "5.1"
6
6
  managed: skill
7
7
  ---
8
8
  <!--invar:skill-->
@@ -189,6 +189,52 @@ Co-Authored-By: Claude <noreply@anthropic.com>"
189
189
  - All TodoWrite items complete
190
190
  - Integration works (if applicable)
191
191
 
192
+ #### Isolation Requirement (DX-75)
193
+
194
+ **For non-trivial implementations (>3 functions OR >200 lines), VALIDATE requires isolation:**
195
+
196
+ ```
197
+ ┌─────────────────────────────────────────────────────────────┐
198
+ │ VALIDATE with Isolation │
199
+ │ ───────────────────────────────────────────────────────────│
200
+ │ │
201
+ │ Why: You (the builder) have context contamination. │
202
+ │ You "know" what the code is supposed to do. │
203
+ │ You cannot objectively verify your own work. │
204
+ │ │
205
+ │ Steps: │
206
+ │ 1. Main Agent: Run invar_guard() — mechanical checks │
207
+ │ │
208
+ │ 2. Spawn Isolated VALIDATOR (Task tool, model=opus): │
209
+ │ ┌─────────────────────────────────────────────────┐ │
210
+ │ │ RECEIVES: │ │
211
+ │ │ - Implementation files │ │
212
+ │ │ - Contracts (@pre/@post) │ │
213
+ │ │ - Original task description │ │
214
+ │ │ │ │
215
+ │ │ DOES NOT RECEIVE: │ │
216
+ │ │ - Development conversation │ │
217
+ │ │ - Your reasoning or decisions │ │
218
+ │ │ - Previous iterations │ │
219
+ │ │ │ │
220
+ │ │ TASK: "Does this implementation satisfy the │ │
221
+ │ │ contracts? Are there gaps or edge cases?" │ │
222
+ │ └─────────────────────────────────────────────────┘ │
223
+ │ │
224
+ │ 3. If VALIDATOR finds issues: │
225
+ │ - Main agent fixes │
226
+ │ - Spawn NEW validator (never reuse) │
227
+ │ - Repeat until PASS │
228
+ │ │
229
+ │ Exit: Guard PASS + Isolated Validator PASS │
230
+ └─────────────────────────────────────────────────────────────┘
231
+ ```
232
+
233
+ **Skip isolation when:**
234
+ - Simple changes (<3 functions AND <200 lines)
235
+ - Pure refactoring (no behavior change)
236
+ - Documentation-only changes
237
+
192
238
  ## Task Batching
193
239
 
194
240
  For multiple tasks:
@@ -0,0 +1,325 @@
1
+ ---
2
+ name: review
3
+ description: Adversarial code review. Code is GUILTY until proven INNOCENT. Every round spawns isolated subagent reviewing FULL scope.
4
+ _invar:
5
+ version: "7.0"
6
+ managed: skill
7
+ ---
8
+ <!--invar:skill-->
9
+
10
+ # Review Skill (Adversarial)
11
+
12
+ ## Mandatory Rules (MUST follow, NO exceptions)
13
+
14
+ 1. **EVERY round MUST spawn isolated subagent** (Task tool with model=opus)
15
+ 2. **EVERY round reviews FULL scope** (all files, not just changes)
16
+ 3. **Code is GUILTY until proven INNOCENT**
17
+ 4. **NO user confirmation between rounds** — just do it
18
+ 5. **MAX_ROUNDS = 5**
19
+
20
+ **Violation = Review Invalid.** If you skip subagent or review only changes, the review is worthless.
21
+
22
+ ---
23
+
24
+ ## Scope Classification (DX-75)
25
+
26
+ **Before starting, classify the scope:**
27
+
28
+ | Classification | Criteria | Strategy |
29
+ |----------------|----------|----------|
30
+ | **SMALL** | <5 files AND <1500 lines | THOROUGH (no enumeration) |
31
+ | **MEDIUM** | 5-10 files OR 1500-5000 lines | HYBRID (enum + open) |
32
+ | **LARGE** | >10 files OR >5000 lines | CHUNKED (parallel subagents) |
33
+
34
+ **Why different strategies?**
35
+ - SMALL: Pre-enumeration causes "checklist mentality" — you only verify listed items, miss variants
36
+ - LARGE: Without enumeration, attention drifts — later files get less scrutiny
37
+
38
+ ---
39
+
40
+ ## Strategy: THOROUGH (SMALL scope)
41
+
42
+ ```
43
+ ┌─────────────────────────────────────────────────────────────┐
44
+ │ THOROUGH STRATEGY (for SMALL scope) │
45
+ │ ───────────────────────────────────────────────────────────│
46
+ │ │
47
+ │ ⚠️ DO NOT pre-enumerate issues or patterns │
48
+ │ ⚠️ DO NOT use grep/sig to "find issues first" │
49
+ │ │
50
+ │ Instead: │
51
+ │ 1. Read each file COMPLETELY, line by line │
52
+ │ 2. Apply checklist A-G as you read │
53
+ │ 3. Trust your judgment to find issues │
54
+ │ 4. Look for VARIANTS and EDGE CASES │
55
+ │ │
56
+ │ Why: Pre-enumeration narrows focus to known patterns. │
57
+ │ Small scope = you CAN read everything thoroughly. │
58
+ │ This finds issues that pattern matching misses. │
59
+ └─────────────────────────────────────────────────────────────┘
60
+ ```
61
+
62
+ ## Strategy: HYBRID (MEDIUM scope)
63
+
64
+ ```
65
+ ┌─────────────────────────────────────────────────────────────┐
66
+ │ HYBRID STRATEGY (for MEDIUM scope) │
67
+ │ ───────────────────────────────────────────────────────────│
68
+ │ │
69
+ │ Phase 0: ENUMERATE (Main Agent) │
70
+ │ ┌─────────────────────────────────────────────────────┐ │
71
+ │ │ Use grep/invar_sig to find: │ │
72
+ │ │ - All @pre/@post contracts │ │
73
+ │ │ - All @invar:allow escape hatches │ │
74
+ │ │ - Hardcoded strings (secrets?) │ │
75
+ │ │ - subprocess/exec/eval calls │ │
76
+ │ │ - bare except clauses │ │
77
+ │ │ Create issue_map with file:line for each │ │
78
+ │ └─────────────────────────────────────────────────────┘ │
79
+ │ │
80
+ │ Phase 1: GUIDED REVIEW (Isolated Subagent) │
81
+ │ ┌─────────────────────────────────────────────────────┐ │
82
+ │ │ Pass issue_map to subagent │ │
83
+ │ │ Subagent verifies each item │ │
84
+ │ │ Reports: "Checked N/M items from issue_map" │ │
85
+ │ └─────────────────────────────────────────────────────┘ │
86
+ │ │
87
+ │ Phase 2: OPEN DISCOVERY (Same Subagent) │
88
+ │ ┌─────────────────────────────────────────────────────┐ │
89
+ │ │ "Now forget the issue_map. │ │
90
+ │ │ Look for issues NOT in the map: │ │
91
+ │ │ - Variants of listed patterns │ │
92
+ │ │ - Logic errors │ │
93
+ │ │ - Edge cases" │ │
94
+ │ │ Reports: "Found N additional issues" │ │
95
+ │ └─────────────────────────────────────────────────────┘ │
96
+ └─────────────────────────────────────────────────────────────┘
97
+ ```
98
+
99
+ ## Strategy: CHUNKED (LARGE scope)
100
+
101
+ ```
102
+ ┌─────────────────────────────────────────────────────────────┐
103
+ │ CHUNKED STRATEGY (for LARGE scope) │
104
+ │ ───────────────────────────────────────────────────────────│
105
+ │ │
106
+ │ 1. Split files into chunks of ~3-5 files each │
107
+ │ │
108
+ │ 2. For each chunk (can be parallel): │
109
+ │ - Spawn isolated subagent │
110
+ │ - Use HYBRID strategy within chunk │
111
+ │ │
112
+ │ 3. Cross-chunk analysis: │
113
+ │ - Check cross-file dependencies │
114
+ │ - Check API consistency │
115
+ │ │
116
+ │ 4. Merge all findings, deduplicate │
117
+ │ │
118
+ │ Why: Prevents "attention fatigue" on file 8+ of 15. │
119
+ │ Each chunk gets fresh attention. │
120
+ └─────────────────────────────────────────────────────────────┘
121
+ ```
122
+
123
+ ---
124
+
125
+ ## 2-Step Loop (MANDATORY workflow)
126
+
127
+ ```
128
+ ┌─────────────────────────────────────────────────────────────┐
129
+ │ Round N: │
130
+ │ │
131
+ │ 1. REVIEWER [Subagent] ─────────────────────────────────── │
132
+ │ • Spawn NEW isolated agent (Task tool) │
133
+ │ • Use strategy based on scope classification │
134
+ │ • Review ALL files in scope (full checklist A-G) │
135
+ │ • Return: issues[] or APPROVED │
136
+ │ │
137
+ │ 2. FIXER [Main Agent] ──────────────────────────────────── │
138
+ │ • Fix CRITICAL/MAJOR issues with CODE │
139
+ │ • Run invar_guard() │
140
+ │ • Cannot declare quality_met │
141
+ │ │
142
+ │ → Loop until: APPROVED OR max_rounds OR no_progress │
143
+ └─────────────────────────────────────────────────────────────┘
144
+ ```
145
+
146
+ **Why new subagent each round?**
147
+ - Main agent has context contamination from fixing
148
+ - "Fresh eyes" impossible in same context
149
+ - Round 2+ drifts to "verify my fixes" not "find problems"
150
+
151
+ ---
152
+
153
+ ## Review Checklist (apply to ALL files)
154
+
155
+ > **Principle:** Only items requiring semantic judgment. Mechanical checks handled by Guard.
156
+
157
+ ### A. Contract Semantic Value
158
+
159
+ - [ ] Does @pre constrain inputs beyond type checking?
160
+ - Bad: `@pre(lambda x: isinstance(x, int))`
161
+ - Good: `@pre(lambda x: x > 0 and x < MAX_VALUE)`
162
+ - [ ] Does @post verify meaningful output properties?
163
+ - Bad: `@post(lambda result: result is not None)`
164
+ - Good: `@post(lambda result: len(result) == len(input))`
165
+ - [ ] Could someone implement correctly from contracts alone?
166
+ - [ ] Are boundary conditions explicit in contracts?
167
+
168
+ ### B. Doctest Coverage
169
+
170
+ - [ ] Do doctests cover normal, boundary, and error cases?
171
+ - [ ] Are doctests testing behavior, not just syntax?
172
+
173
+ ### C. Code Quality
174
+
175
+ - [ ] Is duplicated code worth extracting?
176
+ - [ ] Is naming consistent and clear?
177
+ - [ ] Is complexity justified?
178
+
179
+ ### D. Escape Hatch Audit
180
+
181
+ - [ ] Is each @invar:allow justification valid?
182
+ - [ ] Could refactoring eliminate the need?
183
+
184
+ ### E. Logic Verification
185
+
186
+ - [ ] Do contracts correctly capture intended behavior?
187
+ - [ ] Are there paths that bypass contract checks?
188
+ - [ ] Are there implicit assumptions not in contracts?
189
+
190
+ ### F. Security
191
+
192
+ - [ ] Are inputs validated against security threats (injection, XSS)?
193
+ - [ ] No hardcoded secrets (API keys, passwords, tokens)?
194
+ - [ ] Are authentication/authorization checks correct?
195
+
196
+ ### G. Error Handling
197
+
198
+ - [ ] Are exceptions caught at appropriate level?
199
+ - [ ] Are error messages clear without leaking sensitive info?
200
+ - [ ] Is there graceful degradation on failure?
201
+
202
+ ---
203
+
204
+ ## Subagent Prompt Templates
205
+
206
+ ### THOROUGH (SMALL scope)
207
+
208
+ ```
209
+ You are an independent Adversarial Code Reviewer.
210
+
211
+ RULES:
212
+ 1. Code is GUILTY until proven INNOCENT
213
+ 2. You did NOT write this code — no emotional attachment
214
+ 3. Find reasons to REJECT, not accept
215
+ 4. Be specific: file:line + concrete fix
216
+
217
+ STRATEGY: THOROUGH READING
218
+ - Read each file COMPLETELY, line by line
219
+ - DO NOT pre-scan for patterns — just READ
220
+ - Look for VARIANTS and EDGE CASES
221
+ - Trust your judgment
222
+
223
+ SCOPE: [list all files]
224
+
225
+ Apply checklist A-G to each file.
226
+
227
+ OUTPUT FORMAT:
228
+ ## Verdict: APPROVED | NEEDS WORK | REJECTED
229
+ ## Critical Issues (must fix)
230
+ | ID | File:Line | Issue | Fix |
231
+ ## Major Issues (should fix)
232
+ | ID | File:Line | Issue | Fix |
233
+ ## Minor Issues (backlog)
234
+ | ID | File:Line | Issue | Fix |
235
+ ```
236
+
237
+ ### HYBRID (MEDIUM scope)
238
+
239
+ ```
240
+ You are an independent Adversarial Code Reviewer.
241
+
242
+ RULES:
243
+ 1. Code is GUILTY until proven INNOCENT
244
+ 2. You did NOT write this code — no emotional attachment
245
+ 3. Find reasons to REJECT, not accept
246
+ 4. Be specific: file:line + concrete fix
247
+
248
+ STRATEGY: HYBRID (two passes)
249
+
250
+ PASS 1 - GUIDED:
251
+ Using this issue_map, verify each potential issue:
252
+ [issue_map from Phase 0]
253
+
254
+ Report: "Verified X/Y items from issue_map"
255
+
256
+ PASS 2 - OPEN DISCOVERY:
257
+ Now FORGET the issue_map. Read the code fresh.
258
+ Look for issues NOT in the map:
259
+ - Variants of listed patterns
260
+ - Logic errors
261
+ - Edge cases
262
+
263
+ Report: "Found N additional issues not in issue_map"
264
+
265
+ SCOPE: [list all files]
266
+
267
+ OUTPUT FORMAT:
268
+ ## Verdict: APPROVED | NEEDS WORK | REJECTED
269
+ ## From Issue Map (Pass 1)
270
+ | ID | File:Line | Issue | Fix |
271
+ ## Additional Findings (Pass 2)
272
+ | ID | File:Line | Issue | Fix |
273
+ ```
274
+
275
+ ---
276
+
277
+ ## Exit Conditions
278
+
279
+ | Condition | Exit Reason | Result |
280
+ |-----------|-------------|--------|
281
+ | Subagent returns APPROVED | `quality_met` | Ready for merge |
282
+ | round >= 5 | `max_rounds` | Manual review needed |
283
+ | Same issues 2 rounds | `no_improvement` | Architectural issue |
284
+
285
+ ---
286
+
287
+ ## Exit Report
288
+
289
+ ```
290
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
291
+ 📋 REVIEW COMPLETE
292
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
293
+
294
+ **Scope:** SMALL | MEDIUM | LARGE
295
+ **Strategy:** THOROUGH | HYBRID | CHUNKED
296
+ **Exit:** quality_met | max_rounds | no_improvement
297
+ **Rounds:** N / 5
298
+ **Guard:** PASS | FAIL
299
+
300
+ ## Issues Table
301
+ | Issue | Severity | Round | Status | Evidence |
302
+
303
+ ## Round Summary
304
+ | Round | Found | Fixed |
305
+
306
+ ✓ Final: guard PASS | X errors, Y warnings
307
+ ```
308
+
309
+ ---
310
+
311
+ ## Scope Boundaries
312
+
313
+ **IS for:** Finding bugs, verifying contracts, security review
314
+ **NOT for:** New features → /develop | Understanding → /investigate
315
+
316
+ ## Excluded (Covered by Guard)
317
+
318
+ Don't duplicate mechanical checks:
319
+ - Core/Shell separation → Guard
320
+ - Missing contracts → Guard
321
+ - File/function size → Guard
322
+
323
+ <!--/invar:skill--><!--invar:extensions-->
324
+ <!-- User extensions preserved on update -->
325
+ <!--/invar:extensions-->
@@ -48,9 +48,15 @@ jobs:
48
48
 
49
49
  - name: Check types with mypy
50
50
  run: |
51
- mypy src/invar/ --ignore-missing-imports
52
- mypy runtime/src/invar_runtime/ --ignore-missing-imports
53
- continue-on-error: true
51
+ # Type check critical modules (MCP handlers, doc tools)
52
+ # Using --follow-imports=silent to check only specified files, not transitive deps
53
+ # Gradually expanding coverage. Templates excluded as example code.
54
+ mypy src/invar/mcp/handlers.py \
55
+ src/invar/core/doc_parser.py \
56
+ src/invar/core/doc_edit.py \
57
+ src/invar/shell/doc_tools.py \
58
+ --ignore-missing-imports \
59
+ --follow-imports=silent
54
60
 
55
61
  lint:
56
62
  runs-on: ubuntu-latest
@@ -51,10 +51,10 @@
51
51
 
52
52
  ## Current State
53
53
 
54
- - **PyPI:** `invar-tools` v1.10.0 + `invar-runtime` v1.3.0
54
+ - **PyPI:** `invar-tools` v1.12.0 + `invar-runtime` v1.3.0
55
55
  - **Protocol:** v5.0 (USBV workflow, DX-58 critical section)
56
- - **Status:** Feature complete, TypeScript support added
57
- - **Recent:** LX-05 (language-agnostic), LX-06 (TypeScript tooling), LX-07 (Extension Skills)
56
+ - **Status:** Feature complete, TypeScript support added (DX-78)
57
+ - **Recent:** DX-78 (TypeScript Compiler API integration), LX-05 (language-agnostic), LX-06 (TypeScript tooling), LX-07 (Extension Skills)
58
58
  - **Blockers:** None
59
59
 
60
60
  ## Active Work
@@ -117,6 +117,55 @@ Smart Guard (`invar guard`) runs multiple verification layers:
117
117
 
118
118
  ---
119
119
 
120
+ ## TypeScript Integration (DX-78)
121
+
122
+ **Status:** Complete and reviewed (2026-01-03)
123
+
124
+ ### Architecture
125
+
126
+ - **Python wrapper:** `src/invar/shell/ts_compiler.py` (uses subprocess to call Node.js)
127
+ - **TypeScript tool:** `src/invar/node_tools/ts-query.js` (TypeScript Compiler API)
128
+ - **Python refs:** `src/invar/shell/py_refs.py` (jedi library)
129
+ - **CLI integration:** `perception.py`, `guard.py` (multi-language routing)
130
+ - **MCP integration:** `handlers.py`, `server.py` (invar_refs tool)
131
+
132
+ ### Supported Commands
133
+
134
+ | Command | Python | TypeScript |
135
+ |---------|--------|------------|
136
+ | `invar sig <file>` | ✅ | ✅ |
137
+ | `invar map <path>` | ✅ | ✅ |
138
+ | `invar refs <file>::<symbol>` | ✅ (jedi) | ✅ (TS Compiler API) |
139
+
140
+ ### Security Model
141
+
142
+ - **Single-shot subprocess:** Process starts, runs query, outputs JSON, exits
143
+ - **No orphan risk:** No persistent Node.js processes
144
+ - **Path validation:** All file paths validated before subprocess execution
145
+ - **JSON parsing:** Input validation with error handling
146
+
147
+ ### Dependencies
148
+
149
+ - **Runtime:** Node.js + TypeScript package (peer dependency)
150
+ - **Python:** jedi library (required for Python refs)
151
+ - **Detection:** Automatic via tsconfig.json presence
152
+
153
+ ### Known Limitations
154
+
155
+ - Requires tsconfig.json in project root
156
+ - TypeScript project must be compilable
157
+ - No support for decorator metadata yet
158
+
159
+ ### Review History
160
+
161
+ - **2026-01-03:** Adversarial review completed
162
+ - Fixed 4 critical TypeScript bugs (JSON parsing, null checks, I/O error handling, TOCTOU)
163
+ - Fixed 5 major Python bugs (column hardcoding, missing markers, weak tests, dynamic types)
164
+ - 32 integration tests passing
165
+ - Guard: 0 errors, 0 warnings
166
+
167
+ ---
168
+
120
169
  ## Release Process
121
170
 
122
171
  **Do NOT use `twine upload` manually.** GitHub Actions handles PyPI publishing.
@@ -136,6 +185,7 @@ gh release create vX.Y.Z --title "vX.Y.Z - Title" --notes "..."
136
185
 
137
186
  | Version | Date | Highlights |
138
187
  |---------|------|------------|
188
+ | 1.12.0 | 2026-01 | TypeScript Compiler API integration (DX-78), multi-language refs |
139
189
  | 1.9.0 | 2026-01 | Extension Skills (LX-07), TypeScript support (LX-05/06) |
140
190
  | 1.8.0 | 2025-12 | Claude hooks improvements, interactive init (DX-70) |
141
191
  | 1.5.0 | 2025-12 | Language-agnostic protocol templates |
@@ -26,6 +26,15 @@ repos:
26
26
  stages: [pre-commit]
27
27
  types: [python]
28
28
 
29
+ # Mypy - Static type checker (checks critical modules only)
30
+ - id: mypy
31
+ name: Type Check (mypy)
32
+ entry: bash -c 'source .venv/bin/activate && mypy src/invar/mcp/handlers.py src/invar/core/doc_parser.py src/invar/core/doc_edit.py src/invar/shell/doc_tools.py --ignore-missing-imports --follow-imports=silent'
33
+ language: system
34
+ pass_filenames: false
35
+ stages: [pre-commit]
36
+ types: [python]
37
+
29
38
  # Smart Invar Guard - Full verification (static + doctests)
30
39
  # Runs full guard when rule files are modified, --changed otherwise
31
40
  # Note: invar guard already includes doctests, no separate pytest needed
@@ -288,6 +288,37 @@ When continuing from a previous session summary:
288
288
  3. **Display phase header** before resuming work
289
289
  4. **Re-read context.md** for project state
290
290
 
291
+ ## TypeScript Code Review
292
+
293
+ **CRITICAL:** TypeScript files in `src/invar/node_tools/` are PART of this project and MUST be reviewed.
294
+
295
+ When reviewing TypeScript code (*.js, *.ts files):
296
+
297
+ ### TypeScript-Specific Checklist
298
+
299
+ - [ ] **Error Handling:** All `JSON.parse()` calls wrapped in try/catch
300
+ - [ ] **Null Safety:** Optional property access uses `?.` or explicit null checks
301
+ - [ ] **I/O Safety:** All `fs.readFileSync()` wrapped in try/catch
302
+ - [ ] **Race Conditions:** No TOCTOU (check-then-use) patterns with file operations
303
+ - [ ] **Type Guards:** Runtime type checks for external inputs
304
+ - [ ] **Resource Cleanup:** No resource leaks in language services
305
+
306
+ ### Common TypeScript Vulnerabilities
307
+
308
+ | Pattern | Risk | Fix |
309
+ |---------|------|-----|
310
+ | `JSON.parse(input)` | Crashes on invalid JSON | `try { JSON.parse() } catch { error }` |
311
+ | `obj.prop.method()` | TypeError if prop is null | `obj.prop?.method()` or null check |
312
+ | `if (exists(f)) read(f)` | TOCTOU race condition | `try { read(f) } catch { handle }` |
313
+ | `fs.readFileSync()` in loop | One error kills all | Wrap each call in try/catch |
314
+
315
+ ### Integration Points
316
+
317
+ TypeScript files interact with Python via:
318
+ - **Subprocess:** Node.js process spawned by Python wrapper
319
+ - **JSON protocol:** Structured input/output via stdin/stdout
320
+ - **Path safety:** All file paths validated in Python layer before subprocess
321
+
291
322
  <!--/invar:user-->
292
323
 
293
324
  ---
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: invar-tools
3
- Version: 1.10.0
3
+ Version: 1.12.0
4
4
  Summary: AI-native software engineering tools with design-by-contract verification
5
5
  Project-URL: Homepage, https://github.com/tefx/invar
6
6
  Project-URL: Documentation, https://github.com/tefx/invar#readme
@@ -24,7 +24,9 @@ Requires-Python: >=3.11
24
24
  Requires-Dist: crosshair-tool>=0.0.60
25
25
  Requires-Dist: hypothesis>=6.0
26
26
  Requires-Dist: invar-runtime>=1.0
27
+ Requires-Dist: jedi>=0.19
27
28
  Requires-Dist: jinja2>=3.0
29
+ Requires-Dist: markdown-it-py>=3.0
28
30
  Requires-Dist: mcp>=1.0
29
31
  Requires-Dist: pre-commit>=3.0
30
32
  Requires-Dist: pydantic>=2.0
@@ -145,7 +147,19 @@ Guard passed.
145
147
 
146
148
  ## 🚀 Quick Start
147
149
 
148
- > **Language Support:** Python (full), TypeScript (verification via Zod contracts).
150
+ ### Tool × Language Support
151
+
152
+ | Tool | Python | TypeScript | Notes |
153
+ |------|--------|------------|-------|
154
+ | `invar guard` | ✅ Full | ⚠️ Partial | TS: tsc + eslint + vitest |
155
+ | `invar sig` | ✅ Full | ✅ Full | TS: TS Compiler API |
156
+ | `invar map` | ✅ Full | ✅ Full | TS: With reference counts |
157
+ | `invar refs` | ✅ Full | ✅ Full | Cross-file reference finding |
158
+ | `invar doc *` | ✅ Full | ✅ Full | Language-agnostic |
159
+
160
+ **TypeScript Notes:**
161
+ - Requires Node.js + TypeScript (most TS projects have these)
162
+ - Falls back to regex parser if Node.js unavailable
149
163
 
150
164
  ### 📦 Two Packages, Different Purposes
151
165
 
@@ -178,6 +192,7 @@ uvx invar-tools init
178
192
  # Or quick setup (skip prompts)
179
193
  uvx invar-tools init --claude # Claude Code
180
194
  uvx invar-tools init --pi # Pi Coding Agent
195
+ uvx invar-tools init --mcp-only # MCP tools only (legacy projects)
181
196
 
182
197
  # Add runtime contracts to your project
183
198
  pip install invar-runtime
@@ -301,14 +316,17 @@ function average(items: number[]): number {
301
316
 
302
317
  ### ✅ Solution 2: Multi-Layer Verification
303
318
 
304
- Guard provides fast feedback. Agent sees errors, fixes immediately:
319
+ Guard provides fast feedback **on top of standard type checking**. Agent sees errors, fixes immediately:
305
320
 
306
321
  | Layer | Tool | Speed | What It Catches |
307
322
  |-------|------|-------|-----------------|
323
+ | **Type Check*** | mypy (Python) / tsc (TypeScript) | ~1s | Type errors, missing annotations |
308
324
  | **Static** | Guard rules | ~0.5s | Architecture violations, missing contracts |
309
- | **Doctest** | pytest | ~2s | Example correctness |
310
- | **Property** | Hypothesis | ~10s | Edge cases via random inputs |
311
- | **Symbolic** | CrossHair | ~30s | Mathematical proof of contracts |
325
+ | **Doctest** | pytest / vitest | ~2s | Example correctness |
326
+ | **Property** | Hypothesis / fast-check | ~10s | Edge cases via random inputs |
327
+ | **Symbolic** | CrossHair / (TS: N/A) | ~30s | Mathematical proof of contracts |
328
+
329
+ <sup>* Requires separate installation: `pip install mypy` or configure TypeScript in your project</sup>
312
330
 
313
331
  ```
314
332
  ┌──────────┐ ┌───────────┐ ┌───────────┐ ┌────────────┐
@@ -523,7 +541,7 @@ Cursor users get full verification via MCP:
523
541
  |----------------|---------|----------|
524
542
  | `INVAR.md` | Protocol for AI agents | Required |
525
543
  | `.invar/` | Config, context, examples | Required |
526
- | `.pre-commit-config.yaml` | Verification before commit | Optional |
544
+ | `.pre-commit-config.yaml` | Verification before commit (Ruff, mypy*, Guard) | Optional |
527
545
  | `src/core/`, `src/shell/` | Recommended structure | Optional |
528
546
  | `CLAUDE.md` | Agent instructions | Claude Code |
529
547
  | `.claude/skills/` | Workflow + extension skills | Claude Code |
@@ -532,6 +550,8 @@ Cursor users get full verification via MCP:
532
550
  | `.mcp.json` | MCP server config | Claude Code |
533
551
  | `AGENT.md` | Universal agent instructions | Other agents |
534
552
 
553
+ <sup>* mypy hook included in `.pre-commit-config.yaml` but requires: `pip install mypy`</sup>
554
+
535
555
  **Note:** If `pyproject.toml` exists, Guard configuration goes there as `[tool.invar.guard]` instead of `.invar/config.toml`.
536
556
 
537
557
  **Recommended structure:**
@@ -584,7 +604,22 @@ These customizations are preserved when updating skills via `invar skill add`.
584
604
 
585
605
  ## 🔄 Legacy Project Migration
586
606
 
587
- For existing projects that want to adopt Invar's patterns, use the `/invar-onboard` skill:
607
+ ### Quick Start: MCP Tools Only
608
+
609
+ For projects that want Invar's MCP tools **without adopting the framework**:
610
+
611
+ ```bash
612
+ uvx invar-tools init --mcp-only
613
+ ```
614
+
615
+ This creates only `.mcp.json` — no INVAR.md, CLAUDE.md, or Core/Shell structure. Your AI agent gets access to:
616
+ - **Document tools** (`invar_doc_toc`, `invar_doc_read`, etc.)
617
+ - **Code navigation** (`invar_sig`, `invar_map`)
618
+ - **Basic verification** (`invar_guard` with minimal rules)
619
+
620
+ ### Full Adoption: `/invar-onboard`
621
+
622
+ For projects that want to fully adopt Invar's patterns, use the `/invar-onboard` skill:
588
623
 
589
624
  ```bash
590
625
  # Install the onboarding skill
@@ -785,9 +820,17 @@ rules = ["missing_contract", "shell_result"]
785
820
  | `invar guard --coverage` | Collect branch coverage from tests |
786
821
  | `invar init` | Initialize or update project (interactive) |
787
822
  | `invar init --claude` | Quick setup for Claude Code |
823
+ | `invar init --pi` | Quick setup for Pi agent |
824
+ | `invar init --mcp-only` | MCP tools only (no framework files) |
788
825
  | `invar uninstall` | Remove Invar from project (preserves user content) |
789
826
  | `invar sig <file>` | Show signatures and contracts |
790
827
  | `invar map` | Symbol map with reference counts |
828
+ | `invar doc toc <file>` | View document structure (headings) |
829
+ | `invar doc read <file> <section>` | Read specific section by slug/fuzzy/index |
830
+ | `invar doc find <pattern> <files>` | Search sections by title pattern |
831
+ | `invar doc replace <file> <section>` | Replace section content |
832
+ | `invar doc insert <file> <anchor>` | Insert content relative to section |
833
+ | `invar doc delete <file> <section>` | Delete section |
791
834
  | `invar rules` | List all rules with severity |
792
835
  | `invar test` | Property-based tests (Hypothesis) |
793
836
  | `invar verify` | Symbolic verification (CrossHair) |
@@ -805,6 +848,13 @@ rules = ["missing_contract", "shell_result"]
805
848
  | `invar_guard` | Smart multi-layer verification |
806
849
  | `invar_sig` | Extract signatures and contracts |
807
850
  | `invar_map` | Symbol map with reference counts |
851
+ | `invar_doc_toc` | Extract document structure (TOC) |
852
+ | `invar_doc_read` | Read specific section |
853
+ | `invar_doc_read_many` | Read multiple sections (batch) |
854
+ | `invar_doc_find` | Search sections by title pattern |
855
+ | `invar_doc_replace` | Replace section content |
856
+ | `invar_doc_insert` | Insert content relative to section |
857
+ | `invar_doc_delete` | Delete section |
808
858
 
809
859
  ---
810
860