invar-tools 1.8.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 (488) hide show
  1. invar_tools-1.11.0/.claude/hooks/PostToolUse.sh +10 -0
  2. invar_tools-1.11.0/.claude/hooks/PreToolUse.sh +10 -0
  3. invar_tools-1.11.0/.claude/hooks/Stop.sh +10 -0
  4. invar_tools-1.11.0/.claude/hooks/UserPromptSubmit.sh +10 -0
  5. invar_tools-1.11.0/.claude/skills/acceptance/SKILL.md +383 -0
  6. {invar_tools-1.8.0 → invar_tools-1.11.0}/.claude/skills/develop/SKILL.md +56 -4
  7. invar_tools-1.11.0/.claude/skills/invar-onboard/SKILL.md +448 -0
  8. invar_tools-1.11.0/.claude/skills/invar-onboard/patterns/python.md +347 -0
  9. invar_tools-1.11.0/.claude/skills/invar-onboard/patterns/typescript.md +452 -0
  10. invar_tools-1.11.0/.claude/skills/invar-onboard/templates/assessment.md.jinja +214 -0
  11. invar_tools-1.11.0/.claude/skills/invar-onboard/templates/roadmap.md.jinja +168 -0
  12. {invar_tools-1.8.0 → invar_tools-1.11.0}/.claude/skills/investigate/SKILL.md +55 -0
  13. invar_tools-1.11.0/.claude/skills/review/SKILL.md +325 -0
  14. invar_tools-1.11.0/.claude/skills/security/SKILL.md +382 -0
  15. invar_tools-1.11.0/.claude/skills/security/patterns/_common.yaml +126 -0
  16. invar_tools-1.11.0/.claude/skills/security/patterns/python.yaml +155 -0
  17. invar_tools-1.11.0/.claude/skills/security/patterns/typescript.yaml +194 -0
  18. {invar_tools-1.8.0 → invar_tools-1.11.0}/.github/workflows/ci.yml +9 -3
  19. {invar_tools-1.8.0 → invar_tools-1.11.0}/.gitignore +6 -0
  20. {invar_tools-1.8.0 → invar_tools-1.11.0}/.invar/context.md +8 -8
  21. {invar_tools-1.8.0/src/invar/templates → invar_tools-1.11.0/.invar}/examples/README.md +2 -0
  22. {invar_tools-1.8.0/src/invar/templates → invar_tools-1.11.0/.invar}/examples/conftest.py +1 -1
  23. {invar_tools-1.8.0/src/invar/templates → invar_tools-1.11.0/.invar}/examples/contracts.py +81 -4
  24. invar_tools-1.11.0/.invar/examples/core_shell.py +227 -0
  25. {invar_tools-1.8.0 → invar_tools-1.11.0}/.invar/examples/functional.py +165 -2
  26. {invar_tools-1.8.0 → invar_tools-1.11.0}/.pre-commit-config.yaml +9 -0
  27. {invar_tools-1.8.0 → invar_tools-1.11.0}/CLAUDE.md +19 -2
  28. {invar_tools-1.8.0 → invar_tools-1.11.0}/INVAR.md +101 -37
  29. {invar_tools-1.8.0 → invar_tools-1.11.0}/PKG-INFO +336 -12
  30. {invar_tools-1.8.0 → invar_tools-1.11.0}/README.md +334 -11
  31. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/design.md +32 -2
  32. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/index.html +88 -2
  33. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/DX-62-proactive-reference-reading.md +11 -1
  34. invar_tools-1.11.0/docs/proposals/DX-74-experiment-report.md +1585 -0
  35. invar_tools-1.11.0/docs/proposals/DX-75-attention-aware-framework.md +959 -0
  36. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/LX-04-pi-agent-support.md +20 -14
  37. invar_tools-1.11.0/docs/proposals/LX-07-extension-skills.md +1561 -0
  38. invar_tools-1.11.0/docs/proposals/LX-08-extension-skills-future.md +67 -0
  39. {invar_tools-1.8.0/docs/proposals → invar_tools-1.11.0/docs/proposals/completed}/DX-39-workflow-efficiency.md +1 -1
  40. {invar_tools-1.8.0/docs/proposals → invar_tools-1.11.0/docs/proposals/completed}/DX-41-automatic-review-orchestration.md +1 -1
  41. {invar_tools-1.8.0/docs/proposals → invar_tools-1.11.0/docs/proposals/completed}/DX-42-workflow-auto-routing.md +1 -1
  42. {invar_tools-1.8.0/docs/proposals → invar_tools-1.11.0/docs/proposals/completed}/DX-50-workflow-enforcement.md +4 -1
  43. {invar_tools-1.8.0/docs/proposals → invar_tools-1.11.0/docs/proposals/completed}/DX-51-workflow-phase-visibility.md +1 -1
  44. {invar_tools-1.8.0/docs/proposals → invar_tools-1.11.0/docs/proposals/completed}/DX-52-venv-dependency-injection.md +1 -1
  45. {invar_tools-1.8.0/docs/proposals → invar_tools-1.11.0/docs/proposals/completed}/DX-67-explicit-skill-invocation.md +1 -1
  46. invar_tools-1.11.0/docs/proposals/completed/DX-70-review-isolation.md +185 -0
  47. invar_tools-1.11.0/docs/proposals/completed/DX-71-skill-command-simplification.md +152 -0
  48. invar_tools-1.11.0/docs/proposals/completed/DX-72-mandatory-self-review-detection.md +140 -0
  49. invar_tools-1.11.0/docs/proposals/completed/DX-74-tiered-attention-defense.md +913 -0
  50. invar_tools-1.11.0/docs/proposals/completed/DX-76-structured-document-query.md +451 -0
  51. invar_tools-1.11.0/docs/proposals/completed/DX-77-mcp-doc-tools-enhancements.md +404 -0
  52. invar_tools-1.11.0/docs/proposals/completed/LX-05-language-agnostic-protocol.md +1237 -0
  53. invar_tools-1.11.0/docs/proposals/completed/LX-06-appendix-guard-comparison.md +499 -0
  54. invar_tools-1.11.0/docs/proposals/completed/LX-06-typescript-tooling.md +920 -0
  55. invar_tools-1.11.0/docs/proposals/completed/LX-09-legacy-onboarding.md +1290 -0
  56. invar_tools-1.11.0/docs/proposals/completed/LX-10-typescript-size-limits.md +267 -0
  57. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/index.md +85 -12
  58. {invar_tools-1.8.0 → invar_tools-1.11.0}/pyproject.toml +13 -4
  59. {invar_tools-1.8.0 → invar_tools-1.11.0}/runtime/src/invar_runtime/__init__.py +1 -1
  60. {invar_tools-1.8.0 → invar_tools-1.11.0}/runtime/src/invar_runtime/contracts.py +78 -11
  61. invar_tools-1.11.0/scripts/embed_node_tools.py +219 -0
  62. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/__init__.py +8 -0
  63. invar_tools-1.11.0/src/invar/core/doc_edit.py +187 -0
  64. invar_tools-1.11.0/src/invar/core/doc_parser.py +563 -0
  65. invar_tools-1.11.0/src/invar/core/language.py +88 -0
  66. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/models.py +106 -0
  67. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/patterns/detector.py +6 -1
  68. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/patterns/p0_exhaustive.py +15 -3
  69. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/patterns/p0_literal.py +15 -3
  70. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/patterns/p0_newtype.py +15 -3
  71. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/patterns/p0_nonempty.py +15 -3
  72. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/patterns/p0_validation.py +15 -3
  73. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/patterns/registry.py +5 -1
  74. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/patterns/types.py +5 -1
  75. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/property_gen.py +4 -0
  76. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/rules.py +84 -18
  77. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/sync_helpers.py +27 -1
  78. invar_tools-1.11.0/src/invar/core/ts_parsers.py +286 -0
  79. invar_tools-1.11.0/src/invar/core/ts_sig_parser.py +310 -0
  80. invar_tools-1.11.0/src/invar/mcp/handlers.py +408 -0
  81. invar_tools-1.11.0/src/invar/mcp/server.py +500 -0
  82. invar_tools-1.11.0/src/invar/node_tools/MANIFEST +7 -0
  83. invar_tools-1.11.0/src/invar/node_tools/__init__.py +51 -0
  84. invar_tools-1.11.0/src/invar/node_tools/fc-runner/cli.js +77 -0
  85. invar_tools-1.11.0/src/invar/node_tools/quick-check/cli.js +28 -0
  86. invar_tools-1.11.0/src/invar/node_tools/ts-analyzer/cli.js +480 -0
  87. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/shell/claude_hooks.py +35 -12
  88. invar_tools-1.11.0/src/invar/shell/commands/doc.py +409 -0
  89. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/shell/commands/guard.py +41 -1
  90. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/shell/commands/init.py +154 -16
  91. invar_tools-1.11.0/src/invar/shell/commands/perception.py +251 -0
  92. invar_tools-1.11.0/src/invar/shell/commands/skill.py +187 -0
  93. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/shell/commands/template_sync.py +65 -13
  94. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/shell/commands/uninstall.py +60 -12
  95. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/shell/commands/update.py +6 -14
  96. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/shell/contract_coverage.py +1 -0
  97. invar_tools-1.11.0/src/invar/shell/doc_tools.py +459 -0
  98. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/shell/fs.py +67 -13
  99. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/shell/pi_hooks.py +6 -0
  100. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/shell/prove/crosshair.py +3 -0
  101. invar_tools-1.11.0/src/invar/shell/prove/guard_ts.py +902 -0
  102. invar_tools-1.11.0/src/invar/shell/skill_manager.py +355 -0
  103. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/shell/template_engine.py +28 -4
  104. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/shell/templates.py +4 -4
  105. invar_tools-1.11.0/src/invar/templates/claude-md/python/critical-rules.md +33 -0
  106. invar_tools-1.11.0/src/invar/templates/claude-md/python/quick-reference.md +24 -0
  107. invar_tools-1.11.0/src/invar/templates/claude-md/typescript/critical-rules.md +40 -0
  108. invar_tools-1.11.0/src/invar/templates/claude-md/typescript/quick-reference.md +24 -0
  109. invar_tools-1.11.0/src/invar/templates/claude-md/universal/check-in.md +25 -0
  110. invar_tools-1.11.0/src/invar/templates/claude-md/universal/skills.md +73 -0
  111. invar_tools-1.11.0/src/invar/templates/claude-md/universal/workflow.md +55 -0
  112. invar_tools-1.8.0/src/invar/templates/commands/audit.md → invar_tools-1.11.0/src/invar/templates/commands/audit.md.jinja +18 -1
  113. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/templates/config/AGENT.md.jinja +58 -0
  114. invar_tools-1.11.0/src/invar/templates/config/CLAUDE.md.jinja +51 -0
  115. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/templates/config/context.md.jinja +19 -0
  116. {invar_tools-1.8.0/.invar/examples → invar_tools-1.11.0/src/invar/templates/examples/python}/README.md +4 -0
  117. invar_tools-1.11.0/src/invar/templates/examples/python/conftest.py +3 -0
  118. {invar_tools-1.8.0/.invar/examples → invar_tools-1.11.0/src/invar/templates/examples/python}/contracts.py +81 -4
  119. invar_tools-1.11.0/src/invar/templates/examples/python/core_shell.py +227 -0
  120. invar_tools-1.11.0/src/invar/templates/examples/python/functional.py +613 -0
  121. invar_tools-1.11.0/src/invar/templates/examples/python/workflow.md +81 -0
  122. invar_tools-1.11.0/src/invar/templates/examples/typescript/README.md +31 -0
  123. invar_tools-1.11.0/src/invar/templates/examples/typescript/contracts.ts +163 -0
  124. invar_tools-1.11.0/src/invar/templates/examples/typescript/core_shell.ts +374 -0
  125. invar_tools-1.11.0/src/invar/templates/examples/typescript/functional.ts +601 -0
  126. invar_tools-1.11.0/src/invar/templates/examples/typescript/workflow.md +95 -0
  127. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/templates/hooks/PostToolUse.sh.jinja +10 -1
  128. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/templates/hooks/PreToolUse.sh.jinja +38 -0
  129. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/templates/hooks/Stop.sh.jinja +1 -1
  130. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/templates/hooks/UserPromptSubmit.sh.jinja +7 -0
  131. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/templates/hooks/pi/invar.ts.jinja +9 -0
  132. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/templates/manifest.toml +7 -6
  133. invar_tools-1.11.0/src/invar/templates/onboard/assessment.md.jinja +214 -0
  134. invar_tools-1.11.0/src/invar/templates/onboard/patterns/python.md +347 -0
  135. invar_tools-1.11.0/src/invar/templates/onboard/patterns/typescript.md +452 -0
  136. invar_tools-1.11.0/src/invar/templates/onboard/roadmap.md.jinja +168 -0
  137. invar_tools-1.11.0/src/invar/templates/protocol/INVAR.md.jinja +51 -0
  138. invar_tools-1.11.0/src/invar/templates/protocol/python/architecture-examples.md +41 -0
  139. invar_tools-1.11.0/src/invar/templates/protocol/python/contracts-syntax.md +56 -0
  140. invar_tools-1.11.0/src/invar/templates/protocol/python/markers.md +44 -0
  141. invar_tools-1.11.0/src/invar/templates/protocol/python/tools.md +24 -0
  142. invar_tools-1.11.0/src/invar/templates/protocol/python/troubleshooting.md +38 -0
  143. invar_tools-1.11.0/src/invar/templates/protocol/typescript/architecture-examples.md +52 -0
  144. invar_tools-1.11.0/src/invar/templates/protocol/typescript/contracts-syntax.md +73 -0
  145. invar_tools-1.11.0/src/invar/templates/protocol/typescript/markers.md +48 -0
  146. invar_tools-1.11.0/src/invar/templates/protocol/typescript/tools.md +65 -0
  147. invar_tools-1.11.0/src/invar/templates/protocol/typescript/troubleshooting.md +104 -0
  148. invar_tools-1.11.0/src/invar/templates/protocol/universal/architecture.md +36 -0
  149. invar_tools-1.11.0/src/invar/templates/protocol/universal/completion.md +14 -0
  150. invar_tools-1.11.0/src/invar/templates/protocol/universal/contracts-concept.md +37 -0
  151. invar_tools-1.11.0/src/invar/templates/protocol/universal/header.md +17 -0
  152. invar_tools-1.11.0/src/invar/templates/protocol/universal/session.md +17 -0
  153. invar_tools-1.11.0/src/invar/templates/protocol/universal/six-laws.md +10 -0
  154. invar_tools-1.11.0/src/invar/templates/protocol/universal/usbv.md +14 -0
  155. invar_tools-1.11.0/src/invar/templates/protocol/universal/visible-workflow.md +25 -0
  156. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/templates/skills/develop/SKILL.md.jinja +85 -3
  157. invar_tools-1.11.0/src/invar/templates/skills/extensions/_registry.yaml +93 -0
  158. invar_tools-1.11.0/src/invar/templates/skills/extensions/acceptance/SKILL.md +383 -0
  159. invar_tools-1.11.0/src/invar/templates/skills/extensions/invar-onboard/SKILL.md +448 -0
  160. invar_tools-1.11.0/src/invar/templates/skills/extensions/invar-onboard/patterns/python.md +347 -0
  161. invar_tools-1.11.0/src/invar/templates/skills/extensions/invar-onboard/patterns/typescript.md +452 -0
  162. invar_tools-1.11.0/src/invar/templates/skills/extensions/invar-onboard/templates/assessment.md.jinja +214 -0
  163. invar_tools-1.11.0/src/invar/templates/skills/extensions/invar-onboard/templates/roadmap.md.jinja +168 -0
  164. invar_tools-1.11.0/src/invar/templates/skills/extensions/security/SKILL.md +382 -0
  165. invar_tools-1.11.0/src/invar/templates/skills/extensions/security/patterns/_common.yaml +126 -0
  166. invar_tools-1.11.0/src/invar/templates/skills/extensions/security/patterns/python.yaml +155 -0
  167. invar_tools-1.11.0/src/invar/templates/skills/extensions/security/patterns/typescript.yaml +194 -0
  168. invar_tools-1.11.0/src/invar/templates/skills/review/SKILL.md.jinja +325 -0
  169. invar_tools-1.11.0/tests/experiments/conftest.py +7 -0
  170. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/README.md +150 -0
  171. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/RESULTS.md +75 -0
  172. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/RESULTS_V2.md +342 -0
  173. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/RESULTS_V4.md +710 -0
  174. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/ground_truth.yaml +428 -0
  175. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/prompts.yaml +105 -0
  176. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario/api_client.py +105 -0
  177. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario/auth_service.py +89 -0
  178. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario/config_manager.py +141 -0
  179. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario/data_processor.py +119 -0
  180. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario/file_handler.py +134 -0
  181. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario/utils.py +156 -0
  182. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v2/analytics_engine.py +829 -0
  183. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v2/ground_truth.yaml +282 -0
  184. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v2/inventory_manager.py +731 -0
  185. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v2/notification_service.py +737 -0
  186. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v2/order_processor.py +760 -0
  187. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v2/payment_gateway.py +636 -0
  188. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v2/user_service.py +701 -0
  189. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v3/README.md +60 -0
  190. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v3/cache_service.py +324 -0
  191. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v3/calculator.py +328 -0
  192. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v3/data_processor.py +338 -0
  193. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v3/ground_truth.yaml +454 -0
  194. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v3/user_manager.py +353 -0
  195. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v3/validator.py +347 -0
  196. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v4/.serena/.gitignore +1 -0
  197. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v4/.serena/project.yml +84 -0
  198. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v4/README.md +83 -0
  199. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v4/config_manager.py +244 -0
  200. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v4/data_service.py +306 -0
  201. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v4/ground_truth.yaml +530 -0
  202. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v4/math_utils.py +294 -0
  203. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v4/report_generator.py +346 -0
  204. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v4/user_auth.py +319 -0
  205. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v5/api_gateway.py +284 -0
  206. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v5/auth_service.py +279 -0
  207. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v5/cache_handler.py +270 -0
  208. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v5/config_loader.py +247 -0
  209. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v5/data_validator.py +283 -0
  210. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v5/ground_truth.yaml +888 -0
  211. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v5/metrics_collector.py +266 -0
  212. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v5/notification_service.py +261 -0
  213. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v5/payment_processor.py +344 -0
  214. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v5/report_builder.py +336 -0
  215. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v5/task_scheduler.py +295 -0
  216. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v5/user_manager.py +270 -0
  217. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v5/utils.py +308 -0
  218. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v6/api_gateway.py +269 -0
  219. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v6/auth_service.py +264 -0
  220. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v6/cache_handler.py +257 -0
  221. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v6/config_loader.py +238 -0
  222. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v6/data_validator.py +270 -0
  223. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v6/ground_truth.yaml +888 -0
  224. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v6/metrics_collector.py +256 -0
  225. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v6/notification_service.py +251 -0
  226. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v6/payment_processor.py +327 -0
  227. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v6/report_builder.py +324 -0
  228. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v6/task_scheduler.py +284 -0
  229. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v6/user_manager.py +256 -0
  230. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v6/utils.py +308 -0
  231. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v7/api_service.py +712 -0
  232. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v7/auth_manager.py +600 -0
  233. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v7/data_processor.py +601 -0
  234. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v7/ground_truth.yaml +239 -0
  235. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v7/report_engine.py +904 -0
  236. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v7/storage_handler.py +819 -0
  237. invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v7/utils.py +417 -0
  238. invar_tools-1.11.0/tests/integration/test_lx05_detection.py +131 -0
  239. invar_tools-1.11.0/tests/integration/test_lx05_integration.py +496 -0
  240. invar_tools-1.11.0/tests/integration/test_lx05_templates.py +228 -0
  241. invar_tools-1.11.0/tests/integration/test_lx06_typescript.py +409 -0
  242. invar_tools-1.11.0/tests/integration/test_lx07_skills.py +494 -0
  243. invar_tools-1.11.0/tests/integration/test_mcp_doc_tools.py +536 -0
  244. invar_tools-1.11.0/typescript/.gitignore +27 -0
  245. invar_tools-1.11.0/typescript/README.md +105 -0
  246. invar_tools-1.11.0/typescript/package.json +34 -0
  247. invar_tools-1.11.0/typescript/packages/eslint-plugin/package.json +38 -0
  248. invar_tools-1.11.0/typescript/packages/eslint-plugin/src/index.ts +61 -0
  249. invar_tools-1.11.0/typescript/packages/eslint-plugin/src/rules/no-any-in-schema.ts +47 -0
  250. invar_tools-1.11.0/typescript/packages/eslint-plugin/src/rules/no-io-in-core.ts +108 -0
  251. invar_tools-1.11.0/typescript/packages/eslint-plugin/src/rules/require-jsdoc-example.ts +75 -0
  252. invar_tools-1.11.0/typescript/packages/eslint-plugin/src/rules/require-schema-validation.ts +202 -0
  253. invar_tools-1.11.0/typescript/packages/eslint-plugin/src/rules/shell-result-type.ts +166 -0
  254. invar_tools-1.11.0/typescript/packages/eslint-plugin/tsconfig.json +8 -0
  255. invar_tools-1.11.0/typescript/packages/fc-runner/package.json +42 -0
  256. invar_tools-1.11.0/typescript/packages/fc-runner/src/cli.ts +150 -0
  257. invar_tools-1.11.0/typescript/packages/fc-runner/src/index.ts +328 -0
  258. invar_tools-1.11.0/typescript/packages/fc-runner/tsconfig.json +8 -0
  259. invar_tools-1.11.0/typescript/packages/quick-check/package.json +47 -0
  260. invar_tools-1.11.0/typescript/packages/quick-check/src/cli.ts +123 -0
  261. invar_tools-1.11.0/typescript/packages/quick-check/src/index.ts +279 -0
  262. invar_tools-1.11.0/typescript/packages/quick-check/tsconfig.json +8 -0
  263. invar_tools-1.11.0/typescript/packages/ts-analyzer/package.json +42 -0
  264. invar_tools-1.11.0/typescript/packages/ts-analyzer/src/cli.ts +131 -0
  265. invar_tools-1.11.0/typescript/packages/ts-analyzer/src/index.ts +622 -0
  266. invar_tools-1.11.0/typescript/packages/ts-analyzer/tsconfig.json +8 -0
  267. invar_tools-1.11.0/typescript/pnpm-workspace.yaml +2 -0
  268. invar_tools-1.11.0/typescript/scripts/bundle.mjs +65 -0
  269. invar_tools-1.11.0/typescript/tsconfig.base.json +24 -0
  270. invar_tools-1.11.0/typescript/vitest.config.ts +13 -0
  271. {invar_tools-1.8.0 → invar_tools-1.11.0}/uv.lock +126 -1
  272. invar_tools-1.8.0/.claude/hooks/PostToolUse.sh +0 -3
  273. invar_tools-1.8.0/.claude/hooks/PreToolUse.sh +0 -3
  274. invar_tools-1.8.0/.claude/hooks/Stop.sh +0 -3
  275. invar_tools-1.8.0/.claude/hooks/UserPromptSubmit.sh +0 -3
  276. invar_tools-1.8.0/.claude/skills/review/SKILL.md +0 -352
  277. invar_tools-1.8.0/.invar/examples/conftest.py +0 -3
  278. invar_tools-1.8.0/.invar/examples/core_shell.py +0 -127
  279. invar_tools-1.8.0/.invar/examples/workflow.md +0 -258
  280. invar_tools-1.8.0/src/invar/mcp/server.py +0 -355
  281. invar_tools-1.8.0/src/invar/shell/commands/perception.py +0 -127
  282. invar_tools-1.8.0/src/invar/templates/config/CLAUDE.md.jinja +0 -244
  283. invar_tools-1.8.0/src/invar/templates/examples/core_shell.py +0 -127
  284. invar_tools-1.8.0/src/invar/templates/protocol/INVAR.md +0 -310
  285. invar_tools-1.8.0/src/invar/templates/skills/review/SKILL.md.jinja +0 -353
  286. {invar_tools-1.8.0 → invar_tools-1.11.0}/.aider.conf.yml +0 -0
  287. {invar_tools-1.8.0 → invar_tools-1.11.0}/.claude/commands/audit.md +0 -0
  288. {invar_tools-1.8.0 → invar_tools-1.11.0}/.claude/commands/guard.md +0 -0
  289. {invar_tools-1.8.0 → invar_tools-1.11.0}/.claude/hooks/invar.PostToolUse.sh +0 -0
  290. {invar_tools-1.8.0 → invar_tools-1.11.0}/.claude/hooks/invar.PreToolUse.sh +0 -0
  291. {invar_tools-1.8.0 → invar_tools-1.11.0}/.claude/hooks/invar.Stop.sh +0 -0
  292. {invar_tools-1.8.0 → invar_tools-1.11.0}/.claude/hooks/invar.UserPromptSubmit.sh +0 -0
  293. {invar_tools-1.8.0 → invar_tools-1.11.0}/.claude/skills/propose/SKILL.md +0 -0
  294. {invar_tools-1.8.0 → invar_tools-1.11.0}/.cursorrules +0 -0
  295. {invar_tools-1.8.0 → invar_tools-1.11.0}/.github/workflows/publish.yml +0 -0
  296. {invar_tools-1.8.0 → invar_tools-1.11.0}/.invar/archive/sessions-2025-12.md +0 -0
  297. {invar_tools-1.8.0/src/invar/templates → invar_tools-1.11.0/.invar}/examples/workflow.md +0 -0
  298. {invar_tools-1.8.0 → invar_tools-1.11.0}/.invar/mcp-setup.md +0 -0
  299. {invar_tools-1.8.0 → invar_tools-1.11.0}/.invar/project-additions.md +0 -0
  300. {invar_tools-1.8.0 → invar_tools-1.11.0}/.invar/proposals/TEMPLATE.md +0 -0
  301. {invar_tools-1.8.0 → invar_tools-1.11.0}/.mcp.json +0 -0
  302. {invar_tools-1.8.0 → invar_tools-1.11.0}/.serena/.gitignore +0 -0
  303. {invar_tools-1.8.0 → invar_tools-1.11.0}/.serena/project.yml +0 -0
  304. {invar_tools-1.8.0 → invar_tools-1.11.0}/LICENSE +0 -0
  305. {invar_tools-1.8.0 → invar_tools-1.11.0}/LICENSE-GPL +0 -0
  306. {invar_tools-1.8.0 → invar_tools-1.11.0}/NOTICE +0 -0
  307. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/.nojekyll +0 -0
  308. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/agents.md +0 -0
  309. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/diagrams.md +0 -0
  310. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/guide.md +0 -0
  311. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/guides/aider.md +0 -0
  312. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/guides/cline.md +0 -0
  313. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/guides/continue.md +0 -0
  314. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/guides/cursor.md +0 -0
  315. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/guides/multi-agent.md +0 -0
  316. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/guides/pi.md +0 -0
  317. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/history/decisions-2024.md +0 -0
  318. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/history/feedback/compliance-analysis.md +0 -0
  319. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/history/feedback/feedback-memo.md +0 -0
  320. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/history/feedback/index.md +0 -0
  321. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/history/index.md +0 -0
  322. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/history/original-vision.md +0 -0
  323. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/history/protocol-evolution.md +0 -0
  324. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/history/research/cruxeval-quick-validation.md +0 -0
  325. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/logo.svg +0 -0
  326. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/DX-23-entry-point-detection.md +0 -0
  327. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/DX-25-functional-patterns.md +0 -0
  328. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/DX-29-pure-content-detection.md +0 -0
  329. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/DX-38-contract-quality-rules.md +0 -0
  330. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/DX-60-structured-rules-ssot.md +0 -0
  331. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/DX-61-functional-pattern-guidance.md +0 -0
  332. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/DX-61-implementation-design.md +0 -0
  333. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/DX-68-agent-behavior-optimization.md +0 -0
  334. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/LX-01-multi-language-feasibility.md +0 -0
  335. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/completed/2024-12-21-guard-enhancements.md +0 -0
  336. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/completed/2024-12-21-language-inspired-enhancements.md +0 -0
  337. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/completed/2024-12-21-test-first-enhancement.md +0 -0
  338. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/completed/2025-12-21-dx-improvements.md +0 -0
  339. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/completed/2025-12-23-dx-20-property-testing-enhancements.md +0 -0
  340. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/completed/2025-12-23-dx-21-package-and-init.md +0 -0
  341. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/completed/AGENT-IMPROVEMENTS.md +0 -0
  342. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-11-documentation-restructure.md +0 -0
  343. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-12-hypothesis-fallback.md +0 -0
  344. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-13-incremental-prove.md +0 -0
  345. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-14-expanded-prove-usage.md +0 -0
  346. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-16-agent-tool-enforcement.md +0 -0
  347. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-17-workflow-enforcement.md +0 -0
  348. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-22-verification-strategy.md +0 -0
  349. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-24-mechanism-documentation.md +0 -0
  350. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-26-guard-simplification.md +0 -0
  351. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-27-system-prompt-protocol.md +0 -0
  352. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-28-semantic-verification.md +0 -0
  353. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-30-visible-workflow.md +0 -0
  354. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-31-adversarial-reviewer.md +0 -0
  355. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-32-workflow-iteration.md +0 -0
  356. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-33-verification-blind-spots.md +0 -0
  357. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-34-review-cycle.md +0 -0
  358. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-35-workflow-phase-separation.md +0 -0
  359. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-36-documentation-restructuring.md +0 -0
  360. {invar_tools-1.8.0/docs/proposals → invar_tools-1.11.0/docs/proposals/completed}/DX-37-coverage-integration.md +0 -0
  361. {invar_tools-1.8.0/docs/proposals → invar_tools-1.11.0/docs/proposals/completed}/DX-40-smart-tool-redirect-hook.md +0 -0
  362. {invar_tools-1.8.0/docs/proposals → invar_tools-1.11.0/docs/proposals/completed}/DX-43-cross-platform-distribution.md +0 -0
  363. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-45-template-consistency.md +0 -0
  364. {invar_tools-1.8.0/docs/proposals → invar_tools-1.11.0/docs/proposals/completed}/DX-46-documentation-audit.md +0 -0
  365. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-47-command-skill-naming.md +0 -0
  366. {invar_tools-1.8.0/docs/proposals → invar_tools-1.11.0/docs/proposals/completed}/DX-48-code-structure-reorganization.md +0 -0
  367. {invar_tools-1.8.0/docs/proposals → invar_tools-1.11.0/docs/proposals/completed}/DX-49-protocol-distribution-unification.md +0 -0
  368. {invar_tools-1.8.0/docs/proposals → invar_tools-1.11.0/docs/proposals/completed}/DX-53-review-loop-effectiveness.md +0 -0
  369. {invar_tools-1.8.0/docs/proposals → invar_tools-1.11.0/docs/proposals/completed}/DX-54-agent-native-context-management.md +0 -0
  370. {invar_tools-1.8.0/docs/proposals → invar_tools-1.11.0/docs/proposals/completed}/DX-55-claude-init-conflict-resolution.md +0 -0
  371. {invar_tools-1.8.0/docs/proposals → invar_tools-1.11.0/docs/proposals/completed}/DX-56-template-sync-unification.md +0 -0
  372. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-57-claude-code-hooks.md +0 -0
  373. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-58-document-structure-optimization.md +0 -0
  374. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-63-contracts-first-enforcement.md +0 -0
  375. {invar_tools-1.8.0/docs/proposals → invar_tools-1.11.0/docs/proposals/completed}/DX-64-version-display-unification.md +0 -0
  376. {invar_tools-1.8.0/docs/proposals → invar_tools-1.11.0/docs/proposals/completed}/DX-65-single-file-guard.md +0 -0
  377. {invar_tools-1.8.0/docs/proposals → invar_tools-1.11.0/docs/proposals/completed}/DX-66-escape-hatch-visibility.md +0 -0
  378. {invar_tools-1.8.0/docs/proposals → invar_tools-1.11.0/docs/proposals/completed}/DX-69-project-uninstall.md +0 -0
  379. {invar_tools-1.8.0/docs/proposals → invar_tools-1.11.0/docs/proposals/completed}/DX-70-init-simplification.md +0 -0
  380. {invar_tools-1.8.0/docs/proposals → invar_tools-1.11.0/docs/proposals/completed}/LX-02-agent-portability-analysis.md +0 -0
  381. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/proposals/completed/LX-03-multi-agent-support.md +0 -0
  382. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/reference/agent-information-hierarchy.md +0 -0
  383. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/reference/architecture/index.md +0 -0
  384. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/reference/contracts/advanced.md +0 -0
  385. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/reference/contracts/completeness.md +0 -0
  386. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/reference/contracts/doctests.md +0 -0
  387. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/reference/contracts/index.md +0 -0
  388. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/reference/contracts/pre-post.md +0 -0
  389. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/reference/documentation.md +0 -0
  390. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/reference/index.md +0 -0
  391. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/reference/proposal-workflow.md +0 -0
  392. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/reference/rules/index.md +0 -0
  393. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/reference/rules/severity.md +0 -0
  394. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/reference/verification/crosshair-vs-hypothesis.md +0 -0
  395. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/reference/verification/index.md +0 -0
  396. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/reference/verification/smart-routing.md +0 -0
  397. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/reference/workflow/index.md +0 -0
  398. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/reference/workflow/session-start.md +0 -0
  399. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/reference/workflow/usbv.md +0 -0
  400. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/terminal-gif-guide.md +0 -0
  401. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/test-reports/DX-55-test-report.md +0 -0
  402. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/test-reports/DX-56-test-report.md +0 -0
  403. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/test-reports/DX-58-test-scenario.md +0 -0
  404. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/testing/v1.5.0-stress-test.md +0 -0
  405. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/testing/v1.5.0-test-report.md +0 -0
  406. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/testing/v1.5.0-workflow-compliance.md +0 -0
  407. {invar_tools-1.8.0 → invar_tools-1.11.0}/docs/vision.md +0 -0
  408. {invar_tools-1.8.0 → invar_tools-1.11.0}/runtime/LICENSE +0 -0
  409. {invar_tools-1.8.0 → invar_tools-1.11.0}/runtime/README.md +0 -0
  410. {invar_tools-1.8.0 → invar_tools-1.11.0}/runtime/pyproject.toml +0 -0
  411. {invar_tools-1.8.0 → invar_tools-1.11.0}/runtime/src/invar_runtime/decorators.py +0 -0
  412. {invar_tools-1.8.0 → invar_tools-1.11.0}/runtime/src/invar_runtime/invariant.py +0 -0
  413. {invar_tools-1.8.0 → invar_tools-1.11.0}/runtime/src/invar_runtime/relations.py +0 -0
  414. {invar_tools-1.8.0 → invar_tools-1.11.0}/runtime/src/invar_runtime/resource.py +0 -0
  415. {invar_tools-1.8.0 → invar_tools-1.11.0}/scripts/smart-guard.sh +0 -0
  416. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/core/__init__.py +0 -0
  417. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/__init__.py +0 -0
  418. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/contracts.py +0 -0
  419. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/entry_points.py +0 -0
  420. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/extraction.py +0 -0
  421. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/format_specs.py +0 -0
  422. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/format_strategies.py +0 -0
  423. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/formatter.py +0 -0
  424. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/hypothesis_strategies.py +0 -0
  425. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/inspect.py +0 -0
  426. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/lambda_helpers.py +0 -0
  427. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/must_use.py +0 -0
  428. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/parser.py +0 -0
  429. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/patterns/__init__.py +0 -0
  430. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/postcondition_scope.py +0 -0
  431. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/purity.py +0 -0
  432. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/purity_heuristics.py +0 -0
  433. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/references.py +0 -0
  434. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/review_trigger.py +0 -0
  435. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/rule_meta.py +0 -0
  436. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/shell_analysis.py +0 -0
  437. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/shell_architecture.py +0 -0
  438. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/strategies.py +0 -0
  439. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/suggestions.py +0 -0
  440. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/tautology.py +0 -0
  441. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/template_helpers.py +0 -0
  442. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/template_parser.py +0 -0
  443. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/timeout_inference.py +0 -0
  444. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/trivial_detection.py +0 -0
  445. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/utils.py +0 -0
  446. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/core/verification_routing.py +0 -0
  447. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/mcp/__init__.py +0 -0
  448. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/mcp/__main__.py +0 -0
  449. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/py.typed +0 -0
  450. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/shell/__init__.py +0 -0
  451. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/shell/commands/__init__.py +0 -0
  452. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/shell/commands/hooks.py +0 -0
  453. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/shell/commands/merge.py +0 -0
  454. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/shell/commands/mutate.py +0 -0
  455. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/shell/commands/sync_self.py +0 -0
  456. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/shell/commands/test.py +0 -0
  457. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/shell/config.py +0 -0
  458. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/shell/coverage.py +0 -0
  459. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/shell/git.py +0 -0
  460. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/shell/guard_helpers.py +0 -0
  461. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/shell/guard_output.py +0 -0
  462. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/shell/mcp_config.py +0 -0
  463. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/shell/mutation.py +0 -0
  464. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/shell/pattern_integration.py +0 -0
  465. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/shell/property_tests.py +0 -0
  466. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/shell/prove/__init__.py +0 -0
  467. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/shell/prove/accept.py +0 -0
  468. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/shell/prove/cache.py +0 -0
  469. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/shell/prove/hypothesis.py +0 -0
  470. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/shell/subprocess_env.py +0 -0
  471. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/shell/testing.py +0 -0
  472. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/templates/CLAUDE.md.template +0 -0
  473. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/templates/__init__.py +0 -0
  474. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/templates/commands/guard.md +0 -0
  475. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/templates/config/pre-commit.yaml.jinja +0 -0
  476. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/templates/context.md.template +0 -0
  477. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/templates/hooks/__init__.py +0 -0
  478. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/templates/proposal.md.template +0 -0
  479. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/templates/skills/investigate/SKILL.md.jinja +0 -0
  480. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/invar/templates/skills/propose/SKILL.md.jinja +0 -0
  481. {invar_tools-1.8.0 → invar_tools-1.11.0}/src/shell/__init__.py +0 -0
  482. {invar_tools-1.8.0 → invar_tools-1.11.0}/tests/__init__.py +0 -0
  483. {invar_tools-1.8.0 → invar_tools-1.11.0}/tests/conftest.py +0 -0
  484. {invar_tools-1.8.0 → invar_tools-1.11.0}/tests/integration/__init__.py +0 -0
  485. {invar_tools-1.8.0 → invar_tools-1.11.0}/tests/integration/test_cli_flags.py +0 -0
  486. {invar_tools-1.8.0 → invar_tools-1.11.0}/tests/integration/test_dx55_regression.py +0 -0
  487. {invar_tools-1.8.0 → invar_tools-1.11.0}/tests/integration/test_dx56_sync.py +0 -0
  488. {invar_tools-1.8.0 → invar_tools-1.11.0}/tests/test_subprocess_env.py +0 -0
@@ -0,0 +1,10 @@
1
+ #!/bin/bash
2
+ # Invar hook wrapper (DX-57)
3
+ # Ensure correct working directory regardless of where Claude Code invokes from
4
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
5
+ PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
6
+ if ! cd "$PROJECT_ROOT" 2>/dev/null; then
7
+ echo "[invar] Warning: Could not cd to $PROJECT_ROOT" >&2
8
+ exit 0 # Don't block Claude Code
9
+ fi
10
+ source "$SCRIPT_DIR/invar.PostToolUse.sh" "$@"
@@ -0,0 +1,10 @@
1
+ #!/bin/bash
2
+ # Invar hook wrapper (DX-57)
3
+ # Ensure correct working directory regardless of where Claude Code invokes from
4
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
5
+ PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
6
+ if ! cd "$PROJECT_ROOT" 2>/dev/null; then
7
+ echo "[invar] Warning: Could not cd to $PROJECT_ROOT" >&2
8
+ exit 0 # Don't block Claude Code
9
+ fi
10
+ source "$SCRIPT_DIR/invar.PreToolUse.sh" "$@"
@@ -0,0 +1,10 @@
1
+ #!/bin/bash
2
+ # Invar hook wrapper (DX-57)
3
+ # Ensure correct working directory regardless of where Claude Code invokes from
4
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
5
+ PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
6
+ if ! cd "$PROJECT_ROOT" 2>/dev/null; then
7
+ echo "[invar] Warning: Could not cd to $PROJECT_ROOT" >&2
8
+ exit 0 # Don't block Claude Code
9
+ fi
10
+ source "$SCRIPT_DIR/invar.Stop.sh" "$@"
@@ -0,0 +1,10 @@
1
+ #!/bin/bash
2
+ # Invar hook wrapper (DX-57)
3
+ # Ensure correct working directory regardless of where Claude Code invokes from
4
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
5
+ PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
6
+ if ! cd "$PROJECT_ROOT" 2>/dev/null; then
7
+ echo "[invar] Warning: Could not cd to $PROJECT_ROOT" >&2
8
+ exit 0 # Don't block Claude Code
9
+ fi
10
+ source "$SCRIPT_DIR/invar.UserPromptSubmit.sh" "$@"
@@ -0,0 +1,383 @@
1
+ <!--invar:skill-->
2
+ # /acceptance — Requirements Acceptance Review
3
+
4
+ > Extension Skill | Tier: T0 | Isolation: Default
5
+
6
+ ## Purpose
7
+
8
+ Verify implementation satisfies requirements with adversarial rigor. This skill performs PRD alignment review, checking that all requirements are implemented and edge cases are handled.
9
+
10
+ ## Triggers
11
+
12
+ Use this skill when user says: "acceptance", "check requirements", "PRD alignment", "acceptance review", "verify requirements"
13
+
14
+ ## Relationship to Core Skills
15
+
16
+ - `/review` = Code quality (bugs, contracts, security)
17
+ - `/acceptance` = Feature completeness (requirements coverage)
18
+
19
+ ---
20
+
21
+ ## Core Principles
22
+
23
+ | Principle | Description |
24
+ |-----------|-------------|
25
+ | **Skeptical by default** | Assume feature is NOT implemented until proven otherwise |
26
+ | **Evidence required** | "Implemented" requires file:line proof, not intuition |
27
+ | **Deep challenge** | Every requirement gets adversarial scenarios, no shortcuts |
28
+ | **Graceful degradation** | Works without Invar contracts (falls back to code analysis) |
29
+ | **Polluter pays** | External verification must restore state, or use dry-run |
30
+
31
+ ---
32
+
33
+ ## Depth Levels
34
+
35
+ | Level | Scope | Use Case |
36
+ |-------|-------|----------|
37
+ | `--quick` | P0 (Must-have) only, skip NFR/UI | Fast feedback, CI gates |
38
+ | `--standard` | P0 + P1, sample challenges | Normal development |
39
+ | `--deep` (default) | ALL requirements, full challenge, external verify | Release readiness |
40
+
41
+ **Default is `--deep`** — thorough verification is the norm.
42
+
43
+ ---
44
+
45
+ ## Workflow
46
+
47
+ ### Step 0: Isolation Check
48
+
49
+ ```
50
+ Parse depth: --quick / --standard / --deep (default)
51
+
52
+ If --deep (default):
53
+ ┌─────────────────────────────────────────────────────────┐
54
+ │ SPAWN ISOLATED AGENT │
55
+ │ │
56
+ │ Collect inputs: │
57
+ │ • PRD path (smart search or user-provided) │
58
+ │ • Design paths (if found) │
59
+ │ • Code scope (files/directories to review) │
60
+ │ │
61
+ │ Spawn Task agent with: │
62
+ │ • QA Acceptance Reviewer persona (see below) │
63
+ │ • NO conversation history │
64
+ │ • Only the collected inputs │
65
+ │ │
66
+ │ → Isolated agent executes steps 1-5 below │
67
+ │ → Returns structured report │
68
+ └─────────────────────────────────────────────────────────┘
69
+
70
+ If --quick or --standard:
71
+ └─ Continue in same context with persona switch
72
+ ```
73
+
74
+ ### Step 1: Entry
75
+
76
+ - Detect Invar (Enhanced/Standalone mode)
77
+ - Locate PRD: smart search or user-provided path
78
+ - Locate Design: design/, mockups/, figma/ (if exists)
79
+
80
+ **Invar Detection:**
81
+ - File-based: `INVAR.md` exists OR `.invar/` directory exists
82
+ - Context-based: `invar_guard` tool available in session
83
+ - Enhanced Mode → Use invar_guard, invar_sig, invar_map
84
+ - Standalone Mode → Use Read, Grep, Glob, Bash only
85
+
86
+ ### Step 2: Parse — Extract Requirements
87
+
88
+ Read PRD and extract:
89
+ - **FR (Functional):** What system must DO
90
+ - **NFR (Non-Functional):** Performance, security, UX
91
+ - **EC (Edge Case):** Explicitly mentioned scenarios
92
+ - **UI (UI/UX):** Visual/interaction requirements (if any)
93
+
94
+ **Output format:**
95
+ ```markdown
96
+ | ID | Type | Requirement | Priority |
97
+ |-------|------|--------------------------|----------|
98
+ | FR-1 | FR | User can login with email| Must |
99
+ | NFR-1 | NFR | Response time < 200ms | Should |
100
+ | UI-1 | UI | Login button is blue #007| Could |
101
+ ```
102
+
103
+ ### Step 3: Map — Link to Implementation (Skeptical)
104
+
105
+ **DEFAULT STATUS: ❌ Missing** (upgrade only with evidence)
106
+
107
+ **Evidence Sources (priority order):**
108
+ 1. Invar contracts (@pre/@post matching requirement)
109
+ 2. Type signatures + docstrings
110
+ 3. Test cases covering the requirement
111
+ 4. Code implementation (read and verify)
112
+
113
+ **Enhanced Mode:**
114
+ - `invar_sig` to find functions + contracts
115
+ - Cross-reference contracts with requirements
116
+
117
+ **Standalone Mode (no contracts):**
118
+ - Grep for requirement keywords
119
+ - Read docstrings, type hints, comments
120
+ - Trace code flow to verify implementation
121
+
122
+ **Output format:**
123
+ ```markdown
124
+ | ID | Requirement | Evidence | Status |
125
+ |------|--------------|--------------------| ------------|
126
+ | FR-1 | User login | auth.py:45 @post | ✅ Complete |
127
+ | FR-2 | Password reset| - | ❌ Missing |
128
+ | FR-3 | Email verify | email.py:30 (partial)| ⚠️ Partial|
129
+ ```
130
+
131
+ ### Step 4: Challenge — Deep Adversarial Scenarios
132
+
133
+ For **EVERY** requirement (no shortcuts):
134
+
135
+ **Functional (FR):**
136
+ - "What if input is empty/null/malformed?"
137
+ - "What if user lacks permission?"
138
+ - "What if dependent service fails?"
139
+ - "What if called twice/concurrently?"
140
+
141
+ **Non-Functional (NFR):**
142
+ - "Is there evidence this is measured?"
143
+ - "What's the worst-case scenario?"
144
+ - "How does it degrade under load?"
145
+
146
+ **Edge Cases (EC):**
147
+ - "Is boundary explicitly handled?"
148
+ - "What's the error message?"
149
+ - "Is it tested?"
150
+
151
+ **UI/UX (UI):**
152
+ - "Does implementation match design spec?"
153
+ - "Are design tokens correct (colors, spacing)?"
154
+ - "Is interaction behavior as specified?"
155
+
156
+ **Output format:**
157
+ ```markdown
158
+ | Scenario | Expected | Actual | Gap? |
159
+ |-----------------------|--------------|---------|------|
160
+ | Wrong password 5x | Lock account | No lock | ❌ |
161
+ | Empty email | Error msg | Crash | ❌ |
162
+ | Concurrent login | Queue/reject | Race bug| ❌ |
163
+ ```
164
+
165
+ ### Step 5: Verify — External Tool Validation
166
+
167
+ **POLLUTER PAYS PRINCIPLE:**
168
+ ```
169
+ Before running external verification:
170
+ 1. Can state be restored? (snapshot, rollback, reset)
171
+ → YES: Run freely, restore after
172
+ → NO: Must use dry-run / read-only mode
173
+
174
+ Examples:
175
+ • DB: Use transaction + rollback, or test DB
176
+ • Files: Backup → run → restore
177
+ • API: Use sandbox/test endpoint
178
+ • Destructive: MUST dry-run (--dry-run, --whatif)
179
+ ```
180
+
181
+ **Web Projects:**
182
+ - Playwright/Puppeteer for E2E flows
183
+ - curl/httpie for API endpoints
184
+ - Lighthouse for performance NFRs
185
+
186
+ **CLI Projects:**
187
+ - Actually invoke commands with test inputs
188
+ - Verify exit codes and output format
189
+
190
+ **Library Projects:**
191
+ - Run existing test suite
192
+ - Execute doctest examples
193
+
194
+ **NFR Benchmarks:**
195
+ ```bash
196
+ # Response Time
197
+ time curl -s http://localhost:8000/api/endpoint
198
+ hyperfine 'curl -s http://localhost:8000/api/endpoint'
199
+
200
+ # Load Testing
201
+ wrk -t4 -c100 -d30s http://localhost:8000/api/endpoint
202
+
203
+ # Memory
204
+ /usr/bin/time -v python script.py
205
+ ```
206
+
207
+ **UI/UX Deep Verification (4 levels):**
208
+ 1. **Level 1: Design Tokens** — Colors, Typography, Spacing
209
+ 2. **Level 2: Layout** — Flexbox/Grid alignment, Responsive breakpoints
210
+ 3. **Level 3: Interaction** — Hover/focus states, Animation, Keyboard nav
211
+ 4. **Level 4: Visual Regression** — Screenshot comparison (if baseline exists)
212
+
213
+ ### Step 6: Report — Coverage Matrix + Integration
214
+
215
+ ```markdown
216
+ ## Validation Report
217
+
218
+ **PRD:** docs/requirements.md
219
+ **Design:** design/mockups/ (if found)
220
+ **Mode:** Enhanced (Invar detected) / Standalone
221
+
222
+ ### Coverage Summary
223
+ | Status | Count | Percent |
224
+ |-------------|-------|---------|
225
+ | ✅ Complete | 7 | 58% |
226
+ | ⚠️ Partial | 3 | 25% |
227
+ | ❌ Missing | 2 | 17% |
228
+
229
+ ### Critical Gaps
230
+ 1. FR-2: Password reset — Not implemented
231
+ 2. NFR-1: Response time — Not measured
232
+
233
+ ### Adversarial Findings
234
+ | Finding | Severity | Location |
235
+ |----------------------------|----------|---------------|
236
+ | Account lockout missing | High | auth.py |
237
+ | Input validation incomplete| Medium | forms.py:23 |
238
+
239
+ ### UI/UX Discrepancies (if applicable)
240
+ | Element | Design | Actual | Action |
241
+ |--------------|-----------|-----------|--------------|
242
+ | Login button | #0070f3 | #007bff | Update color |
243
+
244
+ ### NFR Verification Results
245
+ | Requirement | Target | Measured | Status |
246
+ |-------------------|----------|----------|-----------|
247
+ | Response time | < 200ms | 145ms | ✅ Pass |
248
+ | Memory usage | < 100MB | 89MB | ✅ Pass |
249
+
250
+ ### Suggested /develop Tasks
251
+
252
+ **High Priority (Must-have gaps):**
253
+ 1. FR-2: Password reset
254
+ - Scope: auth/ module
255
+ - Estimate: ~80 LOC, 2 new functions
256
+
257
+ 2. Account lockout (adversarial finding)
258
+ - Scope: auth/session.py
259
+ - Estimate: ~30 LOC
260
+
261
+ ### Next Actions
262
+ 1. [ ] Implement FR-2 (use /develop)
263
+ 2. [ ] Add account lockout (use /develop)
264
+ 3. [ ] Run load test for NFR verification
265
+ ```
266
+
267
+ ---
268
+
269
+ ## PRD Smart Search
270
+
271
+ When user says "PRD" without path:
272
+
273
+ ```
274
+ Search order:
275
+ 1. docs/prd.md, docs/PRD.md, docs/requirements.md
276
+ 2. *.prd.md, *requirements*.md, *spec*.md
277
+ 3. README.md (Requirements section)
278
+ 4. .invar/prd.md
279
+
280
+ If multiple → ask user to select
281
+ If none → ask user for path
282
+ ```
283
+
284
+ ---
285
+
286
+ ## Design File Detection
287
+
288
+ ```
289
+ Search order:
290
+ 1. design/, mockups/, figma/
291
+ 2. *.fig, *.sketch (metadata only)
292
+ 3. docs/design/, docs/ui/
293
+ 4. .invar/design/
294
+
295
+ If found → enable UI/UX verification
296
+ If not → skip UI checks, note in report
297
+ ```
298
+
299
+ ---
300
+
301
+ ## Contract Fallback Strategy
302
+
303
+ When Invar contracts are not available:
304
+
305
+ | Fallback Level | Evidence Source | Confidence |
306
+ |----------------|-----------------|------------|
307
+ | 1. Type hints | `def login(email: str) -> User` | Medium |
308
+ | 2. Docstrings | `"""Returns user if valid credentials."""` | Medium |
309
+ | 3. Test cases | `test_login_success()` exists | High |
310
+ | 4. Code trace | Read implementation, verify logic | Low |
311
+
312
+ **Important:** Without contracts, increase skepticism. Code that "looks implemented" may have subtle bugs.
313
+
314
+ ---
315
+
316
+ ## QA Acceptance Reviewer Persona
317
+
318
+ Used in `--deep` mode (isolated agent):
319
+
320
+ ```
321
+ You are an independent QA Acceptance Reviewer.
322
+
323
+ CRITICAL RULES:
324
+ 1. You have NEVER seen this code before
325
+ 2. You do NOT know what the developer intended
326
+ 3. Assume NOTHING works until you verify evidence
327
+ 4. Your job is to FIND GAPS, not confirm success
328
+ 5. Be adversarial — challenge every claim
329
+
330
+ INPUT YOU WILL RECEIVE:
331
+ - PRD/Requirements document
332
+ - Code files to review
333
+ - Design specs (optional)
334
+
335
+ INPUT YOU WILL NOT RECEIVE:
336
+ - Development conversation history
337
+ - Developer's explanations
338
+ - Prior context about design decisions
339
+
340
+ OUTPUT: Structured Validation Report (see Step 6)
341
+ ```
342
+
343
+ ---
344
+
345
+ ## CLI Override
346
+
347
+ Override isolation level per-invocation:
348
+
349
+ ```
350
+ /acceptance → Uses --deep (default, spawns isolated agent)
351
+ /acceptance --quick → Same context, persona hint only
352
+ /acceptance --standard → Same context, persona switch
353
+ /acceptance --deep → Spawns isolated agent (explicit)
354
+ ```
355
+
356
+ **No external configuration required.** Defaults are in this SKILL.md.
357
+
358
+ ---
359
+
360
+ ## Installation
361
+
362
+ ```bash
363
+ # Via CLI
364
+ invar skill add acceptance
365
+
366
+ # Manual copy
367
+ cp -r /path/to/extensions/acceptance .claude/skills/
368
+ ```
369
+
370
+ ---
371
+
372
+ *Extension Skill v1.0 — LX-07*
373
+ <!--/invar:skill--><!--invar:extensions-->
374
+ <!-- ========================================================================
375
+ EXTENSIONS REGION - USER EDITABLE
376
+ Add project-specific extensions here. This section is preserved on update.
377
+
378
+ Examples of what to add:
379
+ - Custom acceptance criteria templates
380
+ - Project-specific requirement categories
381
+ - Domain-specific validation rules
382
+ ======================================================================== -->
383
+ <!--/invar:extensions-->
@@ -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-->
@@ -92,10 +92,11 @@ If task appears simple (4+ signals: single file, clear target, additive change,
92
92
 
93
93
  ### 2. SPECIFY
94
94
 
95
- - **Contracts FIRST:** Write `@pre`/`@post` before implementation
96
- - **Doctests:** Add examples for expected behavior
95
+ - **Contracts FIRST:** Write contracts before implementation
96
+ - **Examples:** Add examples for expected behavior
97
97
  - **Design:** Decompose complex tasks into sub-functions
98
98
 
99
+
99
100
  ```python
100
101
  # SPECIFY before BUILD:
101
102
  @pre(lambda x: x > 0)
@@ -108,6 +109,7 @@ def calculate(x: int) -> int:
108
109
  ... # Implementation comes in BUILD
109
110
  ```
110
111
 
112
+
111
113
  #### Function-Level Gates (DX-63)
112
114
 
113
115
  When creating new modules, use **incremental development**:
@@ -187,6 +189,52 @@ Co-Authored-By: Claude <noreply@anthropic.com>"
187
189
  - All TodoWrite items complete
188
190
  - Integration works (if applicable)
189
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
+
190
238
  ## Task Batching
191
239
 
192
240
  For multiple tasks:
@@ -211,6 +259,7 @@ For multiple tasks:
211
259
 
212
260
  Quick reference for resolving common Guard errors:
213
261
 
262
+
214
263
  | Error | Cause | Quick Fix |
215
264
  |-------|-------|-----------|
216
265
  | `forbidden_import: io` | I/O library in Core | Use `iter(s.splitlines())` not `io.StringIO` |
@@ -230,6 +279,7 @@ Check the "Suggested:" line in Guard output.
230
279
  **Note:** Use `from deal import pre, post` for lambda-based contracts.
231
280
  `invar_runtime.pre/post` are for Contract objects like `NonEmpty`.
232
281
 
282
+
233
283
  ## Timeout Handling
234
284
 
235
285
  | Threshold | Duration | Action |
@@ -355,6 +405,7 @@ Agent:
355
405
 
356
406
  @pre(lambda source, path: len(source.strip()) > 0)
357
407
 
408
+
358
409
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
359
410
  📍 /develop → BUILD (3/4)
360
411
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
@@ -369,7 +420,8 @@ Agent:
369
420
 
370
421
  ✓ Final: guard PASS | 0 errors, 1 warning
371
422
  ```
372
- <!--/invar:skill--><!--invar:extensions-->
423
+ <!--/invar:skill-->
424
+ <!--invar:extensions-->
373
425
  <!-- ========================================================================
374
426
  EXTENSIONS REGION - USER EDITABLE
375
427
  Add project-specific extensions here. This section is preserved on update.