invar-tools 1.10.0__tar.gz → 1.11.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 (477) hide show
  1. {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/skills/develop/SKILL.md +49 -2
  2. {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/skills/investigate/SKILL.md +55 -0
  3. invar_tools-1.11.0/.claude/skills/review/SKILL.md +325 -0
  4. {invar_tools-1.10.0 → invar_tools-1.11.0}/.github/workflows/ci.yml +9 -3
  5. {invar_tools-1.10.0 → invar_tools-1.11.0}/.pre-commit-config.yaml +9 -0
  6. {invar_tools-1.10.0 → invar_tools-1.11.0}/CLAUDE.md +12 -1
  7. {invar_tools-1.10.0 → invar_tools-1.11.0}/PKG-INFO +34 -2
  8. {invar_tools-1.10.0 → invar_tools-1.11.0}/README.md +32 -1
  9. invar_tools-1.11.0/docs/proposals/DX-74-experiment-report.md +1585 -0
  10. invar_tools-1.11.0/docs/proposals/DX-75-attention-aware-framework.md +959 -0
  11. invar_tools-1.11.0/docs/proposals/completed/DX-74-tiered-attention-defense.md +913 -0
  12. invar_tools-1.11.0/docs/proposals/completed/DX-76-structured-document-query.md +451 -0
  13. invar_tools-1.11.0/docs/proposals/completed/DX-77-mcp-doc-tools-enhancements.md +404 -0
  14. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/index.md +2 -1
  15. {invar_tools-1.10.0 → invar_tools-1.11.0}/pyproject.toml +3 -2
  16. invar_tools-1.11.0/src/invar/core/doc_edit.py +187 -0
  17. invar_tools-1.11.0/src/invar/core/doc_parser.py +563 -0
  18. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/ts_sig_parser.py +6 -3
  19. invar_tools-1.11.0/src/invar/mcp/handlers.py +408 -0
  20. invar_tools-1.11.0/src/invar/mcp/server.py +500 -0
  21. invar_tools-1.11.0/src/invar/shell/commands/doc.py +409 -0
  22. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/commands/guard.py +5 -0
  23. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/commands/init.py +72 -13
  24. invar_tools-1.11.0/src/invar/shell/doc_tools.py +459 -0
  25. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/fs.py +15 -14
  26. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/prove/crosshair.py +3 -0
  27. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/prove/guard_ts.py +13 -10
  28. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/skill_manager.py +17 -15
  29. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/skills/develop/SKILL.md.jinja +46 -0
  30. invar_tools-1.11.0/src/invar/templates/skills/review/SKILL.md.jinja +325 -0
  31. invar_tools-1.11.0/tests/experiments/conftest.py +7 -0
  32. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/README.md +150 -0
  33. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/RESULTS.md +75 -0
  34. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/RESULTS_V2.md +342 -0
  35. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/RESULTS_V4.md +710 -0
  36. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/ground_truth.yaml +428 -0
  37. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/prompts.yaml +105 -0
  38. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario/api_client.py +105 -0
  39. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario/auth_service.py +89 -0
  40. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario/config_manager.py +141 -0
  41. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario/data_processor.py +119 -0
  42. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario/file_handler.py +134 -0
  43. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario/utils.py +156 -0
  44. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v2/analytics_engine.py +829 -0
  45. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v2/ground_truth.yaml +282 -0
  46. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v2/inventory_manager.py +731 -0
  47. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v2/notification_service.py +737 -0
  48. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v2/order_processor.py +760 -0
  49. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v2/payment_gateway.py +636 -0
  50. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v2/user_service.py +701 -0
  51. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v3/README.md +60 -0
  52. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v3/cache_service.py +324 -0
  53. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v3/calculator.py +328 -0
  54. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v3/data_processor.py +338 -0
  55. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v3/ground_truth.yaml +454 -0
  56. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v3/user_manager.py +353 -0
  57. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v3/validator.py +347 -0
  58. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v4/.serena/.gitignore +1 -0
  59. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v4/.serena/project.yml +84 -0
  60. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v4/README.md +83 -0
  61. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v4/config_manager.py +244 -0
  62. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v4/data_service.py +306 -0
  63. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v4/ground_truth.yaml +530 -0
  64. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v4/math_utils.py +294 -0
  65. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v4/report_generator.py +346 -0
  66. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v4/user_auth.py +319 -0
  67. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v5/api_gateway.py +284 -0
  68. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v5/auth_service.py +279 -0
  69. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v5/cache_handler.py +270 -0
  70. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v5/config_loader.py +247 -0
  71. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v5/data_validator.py +283 -0
  72. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v5/ground_truth.yaml +888 -0
  73. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v5/metrics_collector.py +266 -0
  74. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v5/notification_service.py +261 -0
  75. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v5/payment_processor.py +344 -0
  76. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v5/report_builder.py +336 -0
  77. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v5/task_scheduler.py +295 -0
  78. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v5/user_manager.py +270 -0
  79. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v5/utils.py +308 -0
  80. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v6/api_gateway.py +269 -0
  81. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v6/auth_service.py +264 -0
  82. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v6/cache_handler.py +257 -0
  83. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v6/config_loader.py +238 -0
  84. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v6/data_validator.py +270 -0
  85. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v6/ground_truth.yaml +888 -0
  86. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v6/metrics_collector.py +256 -0
  87. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v6/notification_service.py +251 -0
  88. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v6/payment_processor.py +327 -0
  89. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v6/report_builder.py +324 -0
  90. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v6/task_scheduler.py +284 -0
  91. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v6/user_manager.py +256 -0
  92. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v6/utils.py +308 -0
  93. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v7/api_service.py +712 -0
  94. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v7/auth_manager.py +600 -0
  95. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v7/data_processor.py +601 -0
  96. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v7/ground_truth.yaml +239 -0
  97. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v7/report_engine.py +904 -0
  98. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v7/storage_handler.py +819 -0
  99. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v7/utils.py +417 -0
  100. {invar_tools-1.10.0 → invar_tools-1.11.0}/tests/integration/test_lx07_skills.py +12 -8
  101. invar_tools-1.11.0/tests/integration/test_mcp_doc_tools.py +536 -0
  102. invar_tools-1.10.0/.claude/skills/review/SKILL.md +0 -613
  103. invar_tools-1.10.0/src/invar/mcp/server.py +0 -355
  104. invar_tools-1.10.0/src/invar/templates/skills/review/SKILL.md.jinja +0 -613
  105. {invar_tools-1.10.0 → invar_tools-1.11.0}/.aider.conf.yml +0 -0
  106. {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/commands/audit.md +0 -0
  107. {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/commands/guard.md +0 -0
  108. {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/hooks/PostToolUse.sh +0 -0
  109. {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/hooks/PreToolUse.sh +0 -0
  110. {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/hooks/Stop.sh +0 -0
  111. {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/hooks/UserPromptSubmit.sh +0 -0
  112. {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/hooks/invar.PostToolUse.sh +0 -0
  113. {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/hooks/invar.PreToolUse.sh +0 -0
  114. {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/hooks/invar.Stop.sh +0 -0
  115. {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/hooks/invar.UserPromptSubmit.sh +0 -0
  116. {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/skills/acceptance/SKILL.md +0 -0
  117. {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/skills/invar-onboard/SKILL.md +0 -0
  118. {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/skills/invar-onboard/patterns/python.md +0 -0
  119. {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/skills/invar-onboard/patterns/typescript.md +0 -0
  120. {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/skills/invar-onboard/templates/assessment.md.jinja +0 -0
  121. {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/skills/invar-onboard/templates/roadmap.md.jinja +0 -0
  122. {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/skills/propose/SKILL.md +0 -0
  123. {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/skills/security/SKILL.md +0 -0
  124. {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/skills/security/patterns/_common.yaml +0 -0
  125. {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/skills/security/patterns/python.yaml +0 -0
  126. {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/skills/security/patterns/typescript.yaml +0 -0
  127. {invar_tools-1.10.0 → invar_tools-1.11.0}/.cursorrules +0 -0
  128. {invar_tools-1.10.0 → invar_tools-1.11.0}/.github/workflows/publish.yml +0 -0
  129. {invar_tools-1.10.0 → invar_tools-1.11.0}/.gitignore +0 -0
  130. {invar_tools-1.10.0 → invar_tools-1.11.0}/.invar/archive/sessions-2025-12.md +0 -0
  131. {invar_tools-1.10.0 → invar_tools-1.11.0}/.invar/context.md +0 -0
  132. {invar_tools-1.10.0 → invar_tools-1.11.0}/.invar/examples/README.md +0 -0
  133. {invar_tools-1.10.0 → invar_tools-1.11.0}/.invar/examples/conftest.py +0 -0
  134. {invar_tools-1.10.0 → invar_tools-1.11.0}/.invar/examples/contracts.py +0 -0
  135. {invar_tools-1.10.0 → invar_tools-1.11.0}/.invar/examples/core_shell.py +0 -0
  136. {invar_tools-1.10.0 → invar_tools-1.11.0}/.invar/examples/functional.py +0 -0
  137. {invar_tools-1.10.0 → invar_tools-1.11.0}/.invar/examples/workflow.md +0 -0
  138. {invar_tools-1.10.0 → invar_tools-1.11.0}/.invar/mcp-setup.md +0 -0
  139. {invar_tools-1.10.0 → invar_tools-1.11.0}/.invar/project-additions.md +0 -0
  140. {invar_tools-1.10.0 → invar_tools-1.11.0}/.invar/proposals/TEMPLATE.md +0 -0
  141. {invar_tools-1.10.0 → invar_tools-1.11.0}/.mcp.json +0 -0
  142. {invar_tools-1.10.0 → invar_tools-1.11.0}/.serena/.gitignore +0 -0
  143. {invar_tools-1.10.0 → invar_tools-1.11.0}/.serena/project.yml +0 -0
  144. {invar_tools-1.10.0 → invar_tools-1.11.0}/INVAR.md +0 -0
  145. {invar_tools-1.10.0 → invar_tools-1.11.0}/LICENSE +0 -0
  146. {invar_tools-1.10.0 → invar_tools-1.11.0}/LICENSE-GPL +0 -0
  147. {invar_tools-1.10.0 → invar_tools-1.11.0}/NOTICE +0 -0
  148. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/.nojekyll +0 -0
  149. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/agents.md +0 -0
  150. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/design.md +0 -0
  151. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/diagrams.md +0 -0
  152. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/guide.md +0 -0
  153. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/guides/aider.md +0 -0
  154. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/guides/cline.md +0 -0
  155. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/guides/continue.md +0 -0
  156. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/guides/cursor.md +0 -0
  157. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/guides/multi-agent.md +0 -0
  158. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/guides/pi.md +0 -0
  159. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/history/decisions-2024.md +0 -0
  160. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/history/feedback/compliance-analysis.md +0 -0
  161. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/history/feedback/feedback-memo.md +0 -0
  162. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/history/feedback/index.md +0 -0
  163. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/history/index.md +0 -0
  164. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/history/original-vision.md +0 -0
  165. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/history/protocol-evolution.md +0 -0
  166. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/history/research/cruxeval-quick-validation.md +0 -0
  167. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/index.html +0 -0
  168. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/logo.svg +0 -0
  169. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/DX-23-entry-point-detection.md +0 -0
  170. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/DX-25-functional-patterns.md +0 -0
  171. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/DX-29-pure-content-detection.md +0 -0
  172. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/DX-38-contract-quality-rules.md +0 -0
  173. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/DX-60-structured-rules-ssot.md +0 -0
  174. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/DX-61-functional-pattern-guidance.md +0 -0
  175. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/DX-61-implementation-design.md +0 -0
  176. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/DX-62-proactive-reference-reading.md +0 -0
  177. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/DX-68-agent-behavior-optimization.md +0 -0
  178. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/LX-01-multi-language-feasibility.md +0 -0
  179. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/LX-04-pi-agent-support.md +0 -0
  180. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/LX-07-extension-skills.md +0 -0
  181. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/LX-08-extension-skills-future.md +0 -0
  182. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/2024-12-21-guard-enhancements.md +0 -0
  183. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/2024-12-21-language-inspired-enhancements.md +0 -0
  184. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/2024-12-21-test-first-enhancement.md +0 -0
  185. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/2025-12-21-dx-improvements.md +0 -0
  186. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/2025-12-23-dx-20-property-testing-enhancements.md +0 -0
  187. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/2025-12-23-dx-21-package-and-init.md +0 -0
  188. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/AGENT-IMPROVEMENTS.md +0 -0
  189. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-11-documentation-restructure.md +0 -0
  190. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-12-hypothesis-fallback.md +0 -0
  191. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-13-incremental-prove.md +0 -0
  192. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-14-expanded-prove-usage.md +0 -0
  193. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-16-agent-tool-enforcement.md +0 -0
  194. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-17-workflow-enforcement.md +0 -0
  195. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-22-verification-strategy.md +0 -0
  196. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-24-mechanism-documentation.md +0 -0
  197. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-26-guard-simplification.md +0 -0
  198. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-27-system-prompt-protocol.md +0 -0
  199. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-28-semantic-verification.md +0 -0
  200. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-30-visible-workflow.md +0 -0
  201. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-31-adversarial-reviewer.md +0 -0
  202. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-32-workflow-iteration.md +0 -0
  203. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-33-verification-blind-spots.md +0 -0
  204. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-34-review-cycle.md +0 -0
  205. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-35-workflow-phase-separation.md +0 -0
  206. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-36-documentation-restructuring.md +0 -0
  207. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-37-coverage-integration.md +0 -0
  208. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-39-workflow-efficiency.md +0 -0
  209. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-40-smart-tool-redirect-hook.md +0 -0
  210. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-41-automatic-review-orchestration.md +0 -0
  211. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-42-workflow-auto-routing.md +0 -0
  212. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-43-cross-platform-distribution.md +0 -0
  213. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-45-template-consistency.md +0 -0
  214. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-46-documentation-audit.md +0 -0
  215. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-47-command-skill-naming.md +0 -0
  216. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-48-code-structure-reorganization.md +0 -0
  217. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-49-protocol-distribution-unification.md +0 -0
  218. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-50-workflow-enforcement.md +0 -0
  219. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-51-workflow-phase-visibility.md +0 -0
  220. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-52-venv-dependency-injection.md +0 -0
  221. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-53-review-loop-effectiveness.md +0 -0
  222. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-54-agent-native-context-management.md +0 -0
  223. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-55-claude-init-conflict-resolution.md +0 -0
  224. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-56-template-sync-unification.md +0 -0
  225. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-57-claude-code-hooks.md +0 -0
  226. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-58-document-structure-optimization.md +0 -0
  227. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-63-contracts-first-enforcement.md +0 -0
  228. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-64-version-display-unification.md +0 -0
  229. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-65-single-file-guard.md +0 -0
  230. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-66-escape-hatch-visibility.md +0 -0
  231. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-67-explicit-skill-invocation.md +0 -0
  232. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-69-project-uninstall.md +0 -0
  233. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-70-init-simplification.md +0 -0
  234. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-70-review-isolation.md +0 -0
  235. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-71-skill-command-simplification.md +0 -0
  236. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-72-mandatory-self-review-detection.md +0 -0
  237. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/LX-02-agent-portability-analysis.md +0 -0
  238. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/LX-03-multi-agent-support.md +0 -0
  239. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/LX-05-language-agnostic-protocol.md +0 -0
  240. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/LX-06-appendix-guard-comparison.md +0 -0
  241. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/LX-06-typescript-tooling.md +0 -0
  242. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/LX-09-legacy-onboarding.md +0 -0
  243. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/LX-10-typescript-size-limits.md +0 -0
  244. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/reference/agent-information-hierarchy.md +0 -0
  245. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/reference/architecture/index.md +0 -0
  246. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/reference/contracts/advanced.md +0 -0
  247. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/reference/contracts/completeness.md +0 -0
  248. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/reference/contracts/doctests.md +0 -0
  249. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/reference/contracts/index.md +0 -0
  250. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/reference/contracts/pre-post.md +0 -0
  251. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/reference/documentation.md +0 -0
  252. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/reference/index.md +0 -0
  253. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/reference/proposal-workflow.md +0 -0
  254. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/reference/rules/index.md +0 -0
  255. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/reference/rules/severity.md +0 -0
  256. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/reference/verification/crosshair-vs-hypothesis.md +0 -0
  257. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/reference/verification/index.md +0 -0
  258. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/reference/verification/smart-routing.md +0 -0
  259. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/reference/workflow/index.md +0 -0
  260. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/reference/workflow/session-start.md +0 -0
  261. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/reference/workflow/usbv.md +0 -0
  262. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/terminal-gif-guide.md +0 -0
  263. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/test-reports/DX-55-test-report.md +0 -0
  264. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/test-reports/DX-56-test-report.md +0 -0
  265. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/test-reports/DX-58-test-scenario.md +0 -0
  266. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/testing/v1.5.0-stress-test.md +0 -0
  267. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/testing/v1.5.0-test-report.md +0 -0
  268. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/testing/v1.5.0-workflow-compliance.md +0 -0
  269. {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/vision.md +0 -0
  270. {invar_tools-1.10.0 → invar_tools-1.11.0}/runtime/LICENSE +0 -0
  271. {invar_tools-1.10.0 → invar_tools-1.11.0}/runtime/README.md +0 -0
  272. {invar_tools-1.10.0 → invar_tools-1.11.0}/runtime/pyproject.toml +0 -0
  273. {invar_tools-1.10.0 → invar_tools-1.11.0}/runtime/src/invar_runtime/__init__.py +0 -0
  274. {invar_tools-1.10.0 → invar_tools-1.11.0}/runtime/src/invar_runtime/contracts.py +0 -0
  275. {invar_tools-1.10.0 → invar_tools-1.11.0}/runtime/src/invar_runtime/decorators.py +0 -0
  276. {invar_tools-1.10.0 → invar_tools-1.11.0}/runtime/src/invar_runtime/invariant.py +0 -0
  277. {invar_tools-1.10.0 → invar_tools-1.11.0}/runtime/src/invar_runtime/relations.py +0 -0
  278. {invar_tools-1.10.0 → invar_tools-1.11.0}/runtime/src/invar_runtime/resource.py +0 -0
  279. {invar_tools-1.10.0 → invar_tools-1.11.0}/scripts/embed_node_tools.py +0 -0
  280. {invar_tools-1.10.0 → invar_tools-1.11.0}/scripts/smart-guard.sh +0 -0
  281. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/core/__init__.py +0 -0
  282. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/__init__.py +0 -0
  283. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/__init__.py +0 -0
  284. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/contracts.py +0 -0
  285. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/entry_points.py +0 -0
  286. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/extraction.py +0 -0
  287. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/format_specs.py +0 -0
  288. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/format_strategies.py +0 -0
  289. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/formatter.py +0 -0
  290. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/hypothesis_strategies.py +0 -0
  291. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/inspect.py +0 -0
  292. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/lambda_helpers.py +0 -0
  293. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/language.py +0 -0
  294. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/models.py +0 -0
  295. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/must_use.py +0 -0
  296. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/parser.py +0 -0
  297. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/patterns/__init__.py +0 -0
  298. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/patterns/detector.py +0 -0
  299. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/patterns/p0_exhaustive.py +0 -0
  300. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/patterns/p0_literal.py +0 -0
  301. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/patterns/p0_newtype.py +0 -0
  302. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/patterns/p0_nonempty.py +0 -0
  303. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/patterns/p0_validation.py +0 -0
  304. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/patterns/registry.py +0 -0
  305. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/patterns/types.py +0 -0
  306. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/postcondition_scope.py +0 -0
  307. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/property_gen.py +0 -0
  308. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/purity.py +0 -0
  309. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/purity_heuristics.py +0 -0
  310. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/references.py +0 -0
  311. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/review_trigger.py +0 -0
  312. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/rule_meta.py +0 -0
  313. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/rules.py +0 -0
  314. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/shell_analysis.py +0 -0
  315. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/shell_architecture.py +0 -0
  316. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/strategies.py +0 -0
  317. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/suggestions.py +0 -0
  318. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/sync_helpers.py +0 -0
  319. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/tautology.py +0 -0
  320. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/template_helpers.py +0 -0
  321. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/template_parser.py +0 -0
  322. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/timeout_inference.py +0 -0
  323. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/trivial_detection.py +0 -0
  324. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/ts_parsers.py +0 -0
  325. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/utils.py +0 -0
  326. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/verification_routing.py +0 -0
  327. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/mcp/__init__.py +0 -0
  328. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/mcp/__main__.py +0 -0
  329. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/node_tools/MANIFEST +0 -0
  330. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/node_tools/__init__.py +0 -0
  331. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/node_tools/fc-runner/cli.js +0 -0
  332. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/node_tools/quick-check/cli.js +0 -0
  333. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/node_tools/ts-analyzer/cli.js +0 -0
  334. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/py.typed +0 -0
  335. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/__init__.py +0 -0
  336. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/claude_hooks.py +0 -0
  337. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/commands/__init__.py +0 -0
  338. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/commands/hooks.py +0 -0
  339. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/commands/merge.py +0 -0
  340. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/commands/mutate.py +0 -0
  341. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/commands/perception.py +0 -0
  342. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/commands/skill.py +0 -0
  343. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/commands/sync_self.py +0 -0
  344. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/commands/template_sync.py +0 -0
  345. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/commands/test.py +0 -0
  346. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/commands/uninstall.py +0 -0
  347. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/commands/update.py +0 -0
  348. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/config.py +0 -0
  349. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/contract_coverage.py +0 -0
  350. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/coverage.py +0 -0
  351. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/git.py +0 -0
  352. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/guard_helpers.py +0 -0
  353. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/guard_output.py +0 -0
  354. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/mcp_config.py +0 -0
  355. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/mutation.py +0 -0
  356. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/pattern_integration.py +0 -0
  357. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/pi_hooks.py +0 -0
  358. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/property_tests.py +0 -0
  359. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/prove/__init__.py +0 -0
  360. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/prove/accept.py +0 -0
  361. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/prove/cache.py +0 -0
  362. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/prove/hypothesis.py +0 -0
  363. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/subprocess_env.py +0 -0
  364. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/template_engine.py +0 -0
  365. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/templates.py +0 -0
  366. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/testing.py +0 -0
  367. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/CLAUDE.md.template +0 -0
  368. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/__init__.py +0 -0
  369. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/claude-md/python/critical-rules.md +0 -0
  370. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/claude-md/python/quick-reference.md +0 -0
  371. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/claude-md/typescript/critical-rules.md +0 -0
  372. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/claude-md/typescript/quick-reference.md +0 -0
  373. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/claude-md/universal/check-in.md +0 -0
  374. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/claude-md/universal/skills.md +0 -0
  375. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/claude-md/universal/workflow.md +0 -0
  376. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/commands/audit.md.jinja +0 -0
  377. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/commands/guard.md +0 -0
  378. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/config/AGENT.md.jinja +0 -0
  379. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/config/CLAUDE.md.jinja +0 -0
  380. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/config/context.md.jinja +0 -0
  381. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/config/pre-commit.yaml.jinja +0 -0
  382. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/context.md.template +0 -0
  383. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/examples/python/README.md +0 -0
  384. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/examples/python/conftest.py +0 -0
  385. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/examples/python/contracts.py +0 -0
  386. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/examples/python/core_shell.py +0 -0
  387. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/examples/python/functional.py +0 -0
  388. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/examples/python/workflow.md +0 -0
  389. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/examples/typescript/README.md +0 -0
  390. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/examples/typescript/contracts.ts +0 -0
  391. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/examples/typescript/core_shell.ts +0 -0
  392. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/examples/typescript/functional.ts +0 -0
  393. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/examples/typescript/workflow.md +0 -0
  394. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/hooks/PostToolUse.sh.jinja +0 -0
  395. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/hooks/PreToolUse.sh.jinja +0 -0
  396. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/hooks/Stop.sh.jinja +0 -0
  397. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/hooks/UserPromptSubmit.sh.jinja +0 -0
  398. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/hooks/__init__.py +0 -0
  399. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/hooks/pi/invar.ts.jinja +0 -0
  400. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/manifest.toml +0 -0
  401. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/onboard/assessment.md.jinja +0 -0
  402. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/onboard/patterns/python.md +0 -0
  403. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/onboard/patterns/typescript.md +0 -0
  404. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/onboard/roadmap.md.jinja +0 -0
  405. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/proposal.md.template +0 -0
  406. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/protocol/INVAR.md.jinja +0 -0
  407. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/protocol/python/architecture-examples.md +0 -0
  408. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/protocol/python/contracts-syntax.md +0 -0
  409. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/protocol/python/markers.md +0 -0
  410. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/protocol/python/tools.md +0 -0
  411. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/protocol/python/troubleshooting.md +0 -0
  412. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/protocol/typescript/architecture-examples.md +0 -0
  413. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/protocol/typescript/contracts-syntax.md +0 -0
  414. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/protocol/typescript/markers.md +0 -0
  415. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/protocol/typescript/tools.md +0 -0
  416. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/protocol/typescript/troubleshooting.md +0 -0
  417. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/protocol/universal/architecture.md +0 -0
  418. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/protocol/universal/completion.md +0 -0
  419. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/protocol/universal/contracts-concept.md +0 -0
  420. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/protocol/universal/header.md +0 -0
  421. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/protocol/universal/session.md +0 -0
  422. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/protocol/universal/six-laws.md +0 -0
  423. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/protocol/universal/usbv.md +0 -0
  424. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/protocol/universal/visible-workflow.md +0 -0
  425. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/skills/extensions/_registry.yaml +0 -0
  426. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/skills/extensions/acceptance/SKILL.md +0 -0
  427. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/skills/extensions/invar-onboard/SKILL.md +0 -0
  428. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/skills/extensions/invar-onboard/patterns/python.md +0 -0
  429. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/skills/extensions/invar-onboard/patterns/typescript.md +0 -0
  430. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/skills/extensions/invar-onboard/templates/assessment.md.jinja +0 -0
  431. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/skills/extensions/invar-onboard/templates/roadmap.md.jinja +0 -0
  432. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/skills/extensions/security/SKILL.md +0 -0
  433. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/skills/extensions/security/patterns/_common.yaml +0 -0
  434. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/skills/extensions/security/patterns/python.yaml +0 -0
  435. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/skills/extensions/security/patterns/typescript.yaml +0 -0
  436. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/skills/investigate/SKILL.md.jinja +0 -0
  437. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/skills/propose/SKILL.md.jinja +0 -0
  438. {invar_tools-1.10.0 → invar_tools-1.11.0}/src/shell/__init__.py +0 -0
  439. {invar_tools-1.10.0 → invar_tools-1.11.0}/tests/__init__.py +0 -0
  440. {invar_tools-1.10.0 → invar_tools-1.11.0}/tests/conftest.py +0 -0
  441. {invar_tools-1.10.0 → invar_tools-1.11.0}/tests/integration/__init__.py +0 -0
  442. {invar_tools-1.10.0 → invar_tools-1.11.0}/tests/integration/test_cli_flags.py +0 -0
  443. {invar_tools-1.10.0 → invar_tools-1.11.0}/tests/integration/test_dx55_regression.py +0 -0
  444. {invar_tools-1.10.0 → invar_tools-1.11.0}/tests/integration/test_dx56_sync.py +0 -0
  445. {invar_tools-1.10.0 → invar_tools-1.11.0}/tests/integration/test_lx05_detection.py +0 -0
  446. {invar_tools-1.10.0 → invar_tools-1.11.0}/tests/integration/test_lx05_integration.py +0 -0
  447. {invar_tools-1.10.0 → invar_tools-1.11.0}/tests/integration/test_lx05_templates.py +0 -0
  448. {invar_tools-1.10.0 → invar_tools-1.11.0}/tests/integration/test_lx06_typescript.py +0 -0
  449. {invar_tools-1.10.0 → invar_tools-1.11.0}/tests/test_subprocess_env.py +0 -0
  450. {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/.gitignore +0 -0
  451. {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/README.md +0 -0
  452. {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/package.json +0 -0
  453. {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/packages/eslint-plugin/package.json +0 -0
  454. {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/packages/eslint-plugin/src/index.ts +0 -0
  455. {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/packages/eslint-plugin/src/rules/no-any-in-schema.ts +0 -0
  456. {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/packages/eslint-plugin/src/rules/no-io-in-core.ts +0 -0
  457. {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/packages/eslint-plugin/src/rules/require-jsdoc-example.ts +0 -0
  458. {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/packages/eslint-plugin/src/rules/require-schema-validation.ts +0 -0
  459. {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/packages/eslint-plugin/src/rules/shell-result-type.ts +0 -0
  460. {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/packages/eslint-plugin/tsconfig.json +0 -0
  461. {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/packages/fc-runner/package.json +0 -0
  462. {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/packages/fc-runner/src/cli.ts +0 -0
  463. {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/packages/fc-runner/src/index.ts +0 -0
  464. {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/packages/fc-runner/tsconfig.json +0 -0
  465. {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/packages/quick-check/package.json +0 -0
  466. {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/packages/quick-check/src/cli.ts +0 -0
  467. {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/packages/quick-check/src/index.ts +0 -0
  468. {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/packages/quick-check/tsconfig.json +0 -0
  469. {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/packages/ts-analyzer/package.json +0 -0
  470. {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/packages/ts-analyzer/src/cli.ts +0 -0
  471. {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/packages/ts-analyzer/src/index.ts +0 -0
  472. {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/packages/ts-analyzer/tsconfig.json +0 -0
  473. {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/pnpm-workspace.yaml +0 -0
  474. {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/scripts/bundle.mjs +0 -0
  475. {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/tsconfig.base.json +0 -0
  476. {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/vitest.config.ts +0 -0
  477. {invar_tools-1.10.0 → invar_tools-1.11.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:
@@ -374,7 +420,8 @@ Agent:
374
420
 
375
421
  ✓ Final: guard PASS | 0 errors, 1 warning
376
422
  ```
377
- <!--/invar:skill--><!--invar:extensions-->
423
+ <!--/invar:skill-->
424
+ <!--invar:extensions-->
378
425
  <!-- ========================================================================
379
426
  EXTENSIONS REGION - USER EDITABLE
380
427
  Add project-specific extensions here. This section is preserved on update.
@@ -67,6 +67,61 @@ Before any workflow action:
67
67
  | Find entry points | `invar_map(top=10)` |
68
68
  | Search code patterns | Grep with regex |
69
69
  | Explore codebase | Task(Explore) agent |
70
+ | View document structure | `invar doc toc <file>` |
71
+ | Read document section | `invar doc read <file> <section>` |
72
+ | Search document sections | `invar doc find <pattern> <file>` |
73
+
74
+ ## Long Document Handling (>500 lines)
75
+
76
+ When understanding long documents (PRD, Spec, Design docs):
77
+
78
+ ### 1. Structure First
79
+
80
+ ```bash
81
+ invar doc toc spec.md --format text
82
+ ```
83
+
84
+ See the table of contents before reading content. Understand the document's organization.
85
+
86
+ ### 2. Read On-Demand
87
+
88
+ ```bash
89
+ invar doc read spec.md "requirements/auth"
90
+ ```
91
+
92
+ Only read sections relevant to your task. Avoid full-document reads.
93
+
94
+ ### 3. Track with TodoWrite
95
+
96
+ Create a todo item for each section you need to read:
97
+
98
+ ```
99
+ □ Read: Introduction (context)
100
+ □ Read: Requirements/Auth (main task)
101
+ □ Read: API Design (reference)
102
+ □ Read: Security (constraints)
103
+ ```
104
+
105
+ Mark each as completed after reading.
106
+
107
+ ### 4. Maintain Running Summary
108
+
109
+ After reading each section, update a mental summary:
110
+
111
+ ```
112
+ Key Points:
113
+ - Auth: JWT + refresh token (spec:48)
114
+ - Rate limit: 100 req/min (spec:120)
115
+ - Must support OAuth2 (spec:85)
116
+ ```
117
+
118
+ Include line references for traceability.
119
+
120
+ ### 5. Verify Coverage
121
+
122
+ Before concluding, check the TOC against your todos:
123
+ - Did you read all relevant sections?
124
+ - Any section titles suggest missed requirements?
70
125
 
71
126
  ## Exit Format
72
127
 
@@ -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
@@ -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
@@ -83,7 +83,18 @@ src/{project}/
83
83
 
84
84
  > Full decision tree: [INVAR.md#core-shell](./INVAR.md#decision-tree-core-vs-shell)
85
85
 
86
-
86
+ ### Document Tools (DX-76)
87
+
88
+ | I want to... | Use |
89
+ |--------------|-----|
90
+ | View document structure | `invar doc toc <file> [--format text]` |
91
+ | Read specific section | `invar doc read <file> <section>` |
92
+ | Search sections by title | `invar doc find <pattern> <files...>` |
93
+ | Replace section content | `invar doc replace <file> <section>` |
94
+ | Insert new section | `invar doc insert <file> <anchor>` |
95
+ | Delete section | `invar doc delete <file> <section>` |
96
+
97
+ **Section addressing:** slug path (`requirements/auth`), fuzzy (`auth`), index (`#0/#1`), line (`@48`)
87
98
 
88
99
  ## Documentation Structure
89
100
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: invar-tools
3
- Version: 1.10.0
3
+ Version: 1.11.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
@@ -25,6 +25,7 @@ Requires-Dist: crosshair-tool>=0.0.60
25
25
  Requires-Dist: hypothesis>=6.0
26
26
  Requires-Dist: invar-runtime>=1.0
27
27
  Requires-Dist: jinja2>=3.0
28
+ Requires-Dist: markdown-it-py>=3.0
28
29
  Requires-Dist: mcp>=1.0
29
30
  Requires-Dist: pre-commit>=3.0
30
31
  Requires-Dist: pydantic>=2.0
@@ -178,6 +179,7 @@ uvx invar-tools init
178
179
  # Or quick setup (skip prompts)
179
180
  uvx invar-tools init --claude # Claude Code
180
181
  uvx invar-tools init --pi # Pi Coding Agent
182
+ uvx invar-tools init --mcp-only # MCP tools only (legacy projects)
181
183
 
182
184
  # Add runtime contracts to your project
183
185
  pip install invar-runtime
@@ -584,7 +586,22 @@ These customizations are preserved when updating skills via `invar skill add`.
584
586
 
585
587
  ## 🔄 Legacy Project Migration
586
588
 
587
- For existing projects that want to adopt Invar's patterns, use the `/invar-onboard` skill:
589
+ ### Quick Start: MCP Tools Only
590
+
591
+ For projects that want Invar's MCP tools **without adopting the framework**:
592
+
593
+ ```bash
594
+ uvx invar-tools init --mcp-only
595
+ ```
596
+
597
+ This creates only `.mcp.json` — no INVAR.md, CLAUDE.md, or Core/Shell structure. Your AI agent gets access to:
598
+ - **Document tools** (`invar_doc_toc`, `invar_doc_read`, etc.)
599
+ - **Code navigation** (`invar_sig`, `invar_map`)
600
+ - **Basic verification** (`invar_guard` with minimal rules)
601
+
602
+ ### Full Adoption: `/invar-onboard`
603
+
604
+ For projects that want to fully adopt Invar's patterns, use the `/invar-onboard` skill:
588
605
 
589
606
  ```bash
590
607
  # Install the onboarding skill
@@ -785,9 +802,17 @@ rules = ["missing_contract", "shell_result"]
785
802
  | `invar guard --coverage` | Collect branch coverage from tests |
786
803
  | `invar init` | Initialize or update project (interactive) |
787
804
  | `invar init --claude` | Quick setup for Claude Code |
805
+ | `invar init --pi` | Quick setup for Pi agent |
806
+ | `invar init --mcp-only` | MCP tools only (no framework files) |
788
807
  | `invar uninstall` | Remove Invar from project (preserves user content) |
789
808
  | `invar sig <file>` | Show signatures and contracts |
790
809
  | `invar map` | Symbol map with reference counts |
810
+ | `invar doc toc <file>` | View document structure (headings) |
811
+ | `invar doc read <file> <section>` | Read specific section by slug/fuzzy/index |
812
+ | `invar doc find <pattern> <files>` | Search sections by title pattern |
813
+ | `invar doc replace <file> <section>` | Replace section content |
814
+ | `invar doc insert <file> <anchor>` | Insert content relative to section |
815
+ | `invar doc delete <file> <section>` | Delete section |
791
816
  | `invar rules` | List all rules with severity |
792
817
  | `invar test` | Property-based tests (Hypothesis) |
793
818
  | `invar verify` | Symbolic verification (CrossHair) |
@@ -805,6 +830,13 @@ rules = ["missing_contract", "shell_result"]
805
830
  | `invar_guard` | Smart multi-layer verification |
806
831
  | `invar_sig` | Extract signatures and contracts |
807
832
  | `invar_map` | Symbol map with reference counts |
833
+ | `invar_doc_toc` | Extract document structure (TOC) |
834
+ | `invar_doc_read` | Read specific section |
835
+ | `invar_doc_read_many` | Read multiple sections (batch) |
836
+ | `invar_doc_find` | Search sections by title pattern |
837
+ | `invar_doc_replace` | Replace section content |
838
+ | `invar_doc_insert` | Insert content relative to section |
839
+ | `invar_doc_delete` | Delete section |
808
840
 
809
841
  ---
810
842
 
@@ -136,6 +136,7 @@ uvx invar-tools init
136
136
  # Or quick setup (skip prompts)
137
137
  uvx invar-tools init --claude # Claude Code
138
138
  uvx invar-tools init --pi # Pi Coding Agent
139
+ uvx invar-tools init --mcp-only # MCP tools only (legacy projects)
139
140
 
140
141
  # Add runtime contracts to your project
141
142
  pip install invar-runtime
@@ -542,7 +543,22 @@ These customizations are preserved when updating skills via `invar skill add`.
542
543
 
543
544
  ## 🔄 Legacy Project Migration
544
545
 
545
- For existing projects that want to adopt Invar's patterns, use the `/invar-onboard` skill:
546
+ ### Quick Start: MCP Tools Only
547
+
548
+ For projects that want Invar's MCP tools **without adopting the framework**:
549
+
550
+ ```bash
551
+ uvx invar-tools init --mcp-only
552
+ ```
553
+
554
+ This creates only `.mcp.json` — no INVAR.md, CLAUDE.md, or Core/Shell structure. Your AI agent gets access to:
555
+ - **Document tools** (`invar_doc_toc`, `invar_doc_read`, etc.)
556
+ - **Code navigation** (`invar_sig`, `invar_map`)
557
+ - **Basic verification** (`invar_guard` with minimal rules)
558
+
559
+ ### Full Adoption: `/invar-onboard`
560
+
561
+ For projects that want to fully adopt Invar's patterns, use the `/invar-onboard` skill:
546
562
 
547
563
  ```bash
548
564
  # Install the onboarding skill
@@ -743,9 +759,17 @@ rules = ["missing_contract", "shell_result"]
743
759
  | `invar guard --coverage` | Collect branch coverage from tests |
744
760
  | `invar init` | Initialize or update project (interactive) |
745
761
  | `invar init --claude` | Quick setup for Claude Code |
762
+ | `invar init --pi` | Quick setup for Pi agent |
763
+ | `invar init --mcp-only` | MCP tools only (no framework files) |
746
764
  | `invar uninstall` | Remove Invar from project (preserves user content) |
747
765
  | `invar sig <file>` | Show signatures and contracts |
748
766
  | `invar map` | Symbol map with reference counts |
767
+ | `invar doc toc <file>` | View document structure (headings) |
768
+ | `invar doc read <file> <section>` | Read specific section by slug/fuzzy/index |
769
+ | `invar doc find <pattern> <files>` | Search sections by title pattern |
770
+ | `invar doc replace <file> <section>` | Replace section content |
771
+ | `invar doc insert <file> <anchor>` | Insert content relative to section |
772
+ | `invar doc delete <file> <section>` | Delete section |
749
773
  | `invar rules` | List all rules with severity |
750
774
  | `invar test` | Property-based tests (Hypothesis) |
751
775
  | `invar verify` | Symbolic verification (CrossHair) |
@@ -763,6 +787,13 @@ rules = ["missing_contract", "shell_result"]
763
787
  | `invar_guard` | Smart multi-layer verification |
764
788
  | `invar_sig` | Extract signatures and contracts |
765
789
  | `invar_map` | Symbol map with reference counts |
790
+ | `invar_doc_toc` | Extract document structure (TOC) |
791
+ | `invar_doc_read` | Read specific section |
792
+ | `invar_doc_read_many` | Read multiple sections (batch) |
793
+ | `invar_doc_find` | Search sections by title pattern |
794
+ | `invar_doc_replace` | Replace section content |
795
+ | `invar_doc_insert` | Insert content relative to section |
796
+ | `invar_doc_delete` | Delete section |
766
797
 
767
798
  ---
768
799