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.
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/skills/develop/SKILL.md +49 -2
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/skills/investigate/SKILL.md +55 -0
- invar_tools-1.11.0/.claude/skills/review/SKILL.md +325 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.github/workflows/ci.yml +9 -3
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.pre-commit-config.yaml +9 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/CLAUDE.md +12 -1
- {invar_tools-1.10.0 → invar_tools-1.11.0}/PKG-INFO +34 -2
- {invar_tools-1.10.0 → invar_tools-1.11.0}/README.md +32 -1
- invar_tools-1.11.0/docs/proposals/DX-74-experiment-report.md +1585 -0
- invar_tools-1.11.0/docs/proposals/DX-75-attention-aware-framework.md +959 -0
- invar_tools-1.11.0/docs/proposals/completed/DX-74-tiered-attention-defense.md +913 -0
- invar_tools-1.11.0/docs/proposals/completed/DX-76-structured-document-query.md +451 -0
- invar_tools-1.11.0/docs/proposals/completed/DX-77-mcp-doc-tools-enhancements.md +404 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/index.md +2 -1
- {invar_tools-1.10.0 → invar_tools-1.11.0}/pyproject.toml +3 -2
- invar_tools-1.11.0/src/invar/core/doc_edit.py +187 -0
- invar_tools-1.11.0/src/invar/core/doc_parser.py +563 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/ts_sig_parser.py +6 -3
- invar_tools-1.11.0/src/invar/mcp/handlers.py +408 -0
- invar_tools-1.11.0/src/invar/mcp/server.py +500 -0
- invar_tools-1.11.0/src/invar/shell/commands/doc.py +409 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/commands/guard.py +5 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/commands/init.py +72 -13
- invar_tools-1.11.0/src/invar/shell/doc_tools.py +459 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/fs.py +15 -14
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/prove/crosshair.py +3 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/prove/guard_ts.py +13 -10
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/skill_manager.py +17 -15
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/skills/develop/SKILL.md.jinja +46 -0
- invar_tools-1.11.0/src/invar/templates/skills/review/SKILL.md.jinja +325 -0
- invar_tools-1.11.0/tests/experiments/conftest.py +7 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/README.md +150 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/RESULTS.md +75 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/RESULTS_V2.md +342 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/RESULTS_V4.md +710 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/ground_truth.yaml +428 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/prompts.yaml +105 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario/api_client.py +105 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario/auth_service.py +89 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario/config_manager.py +141 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario/data_processor.py +119 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario/file_handler.py +134 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario/utils.py +156 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v2/analytics_engine.py +829 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v2/ground_truth.yaml +282 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v2/inventory_manager.py +731 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v2/notification_service.py +737 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v2/order_processor.py +760 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v2/payment_gateway.py +636 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v2/user_service.py +701 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v3/README.md +60 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v3/cache_service.py +324 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v3/calculator.py +328 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v3/data_processor.py +338 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v3/ground_truth.yaml +454 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v3/user_manager.py +353 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v3/validator.py +347 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v4/.serena/.gitignore +1 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v4/.serena/project.yml +84 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v4/README.md +83 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v4/config_manager.py +244 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v4/data_service.py +306 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v4/ground_truth.yaml +530 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v4/math_utils.py +294 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v4/report_generator.py +346 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v4/user_auth.py +319 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v5/api_gateway.py +284 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v5/auth_service.py +279 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v5/cache_handler.py +270 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v5/config_loader.py +247 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v5/data_validator.py +283 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v5/ground_truth.yaml +888 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v5/metrics_collector.py +266 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v5/notification_service.py +261 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v5/payment_processor.py +344 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v5/report_builder.py +336 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v5/task_scheduler.py +295 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v5/user_manager.py +270 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v5/utils.py +308 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v6/api_gateway.py +269 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v6/auth_service.py +264 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v6/cache_handler.py +257 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v6/config_loader.py +238 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v6/data_validator.py +270 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v6/ground_truth.yaml +888 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v6/metrics_collector.py +256 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v6/notification_service.py +251 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v6/payment_processor.py +327 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v6/report_builder.py +324 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v6/task_scheduler.py +284 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v6/user_manager.py +256 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v6/utils.py +308 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v7/api_service.py +712 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v7/auth_manager.py +600 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v7/data_processor.py +601 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v7/ground_truth.yaml +239 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v7/report_engine.py +904 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v7/storage_handler.py +819 -0
- invar_tools-1.11.0/tests/experiments/dx74_attention_drift/scenario_v7/utils.py +417 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/tests/integration/test_lx07_skills.py +12 -8
- invar_tools-1.11.0/tests/integration/test_mcp_doc_tools.py +536 -0
- invar_tools-1.10.0/.claude/skills/review/SKILL.md +0 -613
- invar_tools-1.10.0/src/invar/mcp/server.py +0 -355
- invar_tools-1.10.0/src/invar/templates/skills/review/SKILL.md.jinja +0 -613
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.aider.conf.yml +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/commands/audit.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/commands/guard.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/hooks/PostToolUse.sh +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/hooks/PreToolUse.sh +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/hooks/Stop.sh +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/hooks/UserPromptSubmit.sh +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/hooks/invar.PostToolUse.sh +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/hooks/invar.PreToolUse.sh +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/hooks/invar.Stop.sh +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/hooks/invar.UserPromptSubmit.sh +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/skills/acceptance/SKILL.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/skills/invar-onboard/SKILL.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/skills/invar-onboard/patterns/python.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/skills/invar-onboard/patterns/typescript.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/skills/invar-onboard/templates/assessment.md.jinja +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/skills/invar-onboard/templates/roadmap.md.jinja +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/skills/propose/SKILL.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/skills/security/SKILL.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/skills/security/patterns/_common.yaml +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/skills/security/patterns/python.yaml +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.claude/skills/security/patterns/typescript.yaml +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.cursorrules +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.github/workflows/publish.yml +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.gitignore +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.invar/archive/sessions-2025-12.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.invar/context.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.invar/examples/README.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.invar/examples/conftest.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.invar/examples/contracts.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.invar/examples/core_shell.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.invar/examples/functional.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.invar/examples/workflow.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.invar/mcp-setup.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.invar/project-additions.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.invar/proposals/TEMPLATE.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.mcp.json +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.serena/.gitignore +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/.serena/project.yml +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/INVAR.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/LICENSE +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/LICENSE-GPL +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/NOTICE +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/.nojekyll +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/agents.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/design.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/diagrams.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/guide.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/guides/aider.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/guides/cline.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/guides/continue.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/guides/cursor.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/guides/multi-agent.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/guides/pi.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/history/decisions-2024.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/history/feedback/compliance-analysis.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/history/feedback/feedback-memo.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/history/feedback/index.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/history/index.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/history/original-vision.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/history/protocol-evolution.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/history/research/cruxeval-quick-validation.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/index.html +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/logo.svg +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/DX-23-entry-point-detection.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/DX-25-functional-patterns.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/DX-29-pure-content-detection.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/DX-38-contract-quality-rules.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/DX-60-structured-rules-ssot.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/DX-61-functional-pattern-guidance.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/DX-61-implementation-design.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/DX-62-proactive-reference-reading.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/DX-68-agent-behavior-optimization.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/LX-01-multi-language-feasibility.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/LX-04-pi-agent-support.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/LX-07-extension-skills.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/LX-08-extension-skills-future.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/2024-12-21-guard-enhancements.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/2024-12-21-language-inspired-enhancements.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/2024-12-21-test-first-enhancement.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/2025-12-21-dx-improvements.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/2025-12-23-dx-20-property-testing-enhancements.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/2025-12-23-dx-21-package-and-init.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/AGENT-IMPROVEMENTS.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-11-documentation-restructure.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-12-hypothesis-fallback.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-13-incremental-prove.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-14-expanded-prove-usage.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-16-agent-tool-enforcement.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-17-workflow-enforcement.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-22-verification-strategy.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-24-mechanism-documentation.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-26-guard-simplification.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-27-system-prompt-protocol.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-28-semantic-verification.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-30-visible-workflow.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-31-adversarial-reviewer.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-32-workflow-iteration.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-33-verification-blind-spots.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-34-review-cycle.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-35-workflow-phase-separation.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-36-documentation-restructuring.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-37-coverage-integration.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-39-workflow-efficiency.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-40-smart-tool-redirect-hook.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-41-automatic-review-orchestration.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-42-workflow-auto-routing.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-43-cross-platform-distribution.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-45-template-consistency.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-46-documentation-audit.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-47-command-skill-naming.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-48-code-structure-reorganization.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-49-protocol-distribution-unification.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-50-workflow-enforcement.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-51-workflow-phase-visibility.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-52-venv-dependency-injection.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-53-review-loop-effectiveness.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-54-agent-native-context-management.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-55-claude-init-conflict-resolution.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-56-template-sync-unification.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-57-claude-code-hooks.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-58-document-structure-optimization.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-63-contracts-first-enforcement.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-64-version-display-unification.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-65-single-file-guard.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-66-escape-hatch-visibility.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-67-explicit-skill-invocation.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-69-project-uninstall.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-70-init-simplification.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-70-review-isolation.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-71-skill-command-simplification.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/DX-72-mandatory-self-review-detection.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/LX-02-agent-portability-analysis.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/LX-03-multi-agent-support.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/LX-05-language-agnostic-protocol.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/LX-06-appendix-guard-comparison.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/LX-06-typescript-tooling.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/LX-09-legacy-onboarding.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/proposals/completed/LX-10-typescript-size-limits.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/reference/agent-information-hierarchy.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/reference/architecture/index.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/reference/contracts/advanced.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/reference/contracts/completeness.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/reference/contracts/doctests.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/reference/contracts/index.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/reference/contracts/pre-post.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/reference/documentation.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/reference/index.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/reference/proposal-workflow.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/reference/rules/index.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/reference/rules/severity.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/reference/verification/crosshair-vs-hypothesis.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/reference/verification/index.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/reference/verification/smart-routing.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/reference/workflow/index.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/reference/workflow/session-start.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/reference/workflow/usbv.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/terminal-gif-guide.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/test-reports/DX-55-test-report.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/test-reports/DX-56-test-report.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/test-reports/DX-58-test-scenario.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/testing/v1.5.0-stress-test.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/testing/v1.5.0-test-report.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/testing/v1.5.0-workflow-compliance.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/docs/vision.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/runtime/LICENSE +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/runtime/README.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/runtime/pyproject.toml +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/runtime/src/invar_runtime/__init__.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/runtime/src/invar_runtime/contracts.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/runtime/src/invar_runtime/decorators.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/runtime/src/invar_runtime/invariant.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/runtime/src/invar_runtime/relations.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/runtime/src/invar_runtime/resource.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/scripts/embed_node_tools.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/scripts/smart-guard.sh +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/core/__init__.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/__init__.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/__init__.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/contracts.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/entry_points.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/extraction.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/format_specs.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/format_strategies.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/formatter.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/hypothesis_strategies.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/inspect.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/lambda_helpers.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/language.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/models.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/must_use.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/parser.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/patterns/__init__.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/patterns/detector.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/patterns/p0_exhaustive.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/patterns/p0_literal.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/patterns/p0_newtype.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/patterns/p0_nonempty.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/patterns/p0_validation.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/patterns/registry.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/patterns/types.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/postcondition_scope.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/property_gen.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/purity.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/purity_heuristics.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/references.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/review_trigger.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/rule_meta.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/rules.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/shell_analysis.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/shell_architecture.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/strategies.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/suggestions.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/sync_helpers.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/tautology.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/template_helpers.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/template_parser.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/timeout_inference.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/trivial_detection.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/ts_parsers.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/utils.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/core/verification_routing.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/mcp/__init__.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/mcp/__main__.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/node_tools/MANIFEST +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/node_tools/__init__.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/node_tools/fc-runner/cli.js +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/node_tools/quick-check/cli.js +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/node_tools/ts-analyzer/cli.js +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/py.typed +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/__init__.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/claude_hooks.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/commands/__init__.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/commands/hooks.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/commands/merge.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/commands/mutate.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/commands/perception.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/commands/skill.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/commands/sync_self.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/commands/template_sync.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/commands/test.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/commands/uninstall.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/commands/update.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/config.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/contract_coverage.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/coverage.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/git.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/guard_helpers.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/guard_output.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/mcp_config.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/mutation.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/pattern_integration.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/pi_hooks.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/property_tests.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/prove/__init__.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/prove/accept.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/prove/cache.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/prove/hypothesis.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/subprocess_env.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/template_engine.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/templates.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/shell/testing.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/CLAUDE.md.template +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/__init__.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/claude-md/python/critical-rules.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/claude-md/python/quick-reference.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/claude-md/typescript/critical-rules.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/claude-md/typescript/quick-reference.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/claude-md/universal/check-in.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/claude-md/universal/skills.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/claude-md/universal/workflow.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/commands/audit.md.jinja +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/commands/guard.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/config/AGENT.md.jinja +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/config/CLAUDE.md.jinja +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/config/context.md.jinja +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/config/pre-commit.yaml.jinja +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/context.md.template +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/examples/python/README.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/examples/python/conftest.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/examples/python/contracts.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/examples/python/core_shell.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/examples/python/functional.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/examples/python/workflow.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/examples/typescript/README.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/examples/typescript/contracts.ts +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/examples/typescript/core_shell.ts +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/examples/typescript/functional.ts +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/examples/typescript/workflow.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/hooks/PostToolUse.sh.jinja +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/hooks/PreToolUse.sh.jinja +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/hooks/Stop.sh.jinja +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/hooks/UserPromptSubmit.sh.jinja +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/hooks/__init__.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/hooks/pi/invar.ts.jinja +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/manifest.toml +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/onboard/assessment.md.jinja +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/onboard/patterns/python.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/onboard/patterns/typescript.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/onboard/roadmap.md.jinja +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/proposal.md.template +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/protocol/INVAR.md.jinja +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/protocol/python/architecture-examples.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/protocol/python/contracts-syntax.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/protocol/python/markers.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/protocol/python/tools.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/protocol/python/troubleshooting.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/protocol/typescript/architecture-examples.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/protocol/typescript/contracts-syntax.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/protocol/typescript/markers.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/protocol/typescript/tools.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/protocol/typescript/troubleshooting.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/protocol/universal/architecture.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/protocol/universal/completion.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/protocol/universal/contracts-concept.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/protocol/universal/header.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/protocol/universal/session.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/protocol/universal/six-laws.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/protocol/universal/usbv.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/protocol/universal/visible-workflow.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/skills/extensions/_registry.yaml +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/skills/extensions/acceptance/SKILL.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/skills/extensions/invar-onboard/SKILL.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/skills/extensions/invar-onboard/patterns/python.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/skills/extensions/invar-onboard/patterns/typescript.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/skills/extensions/invar-onboard/templates/assessment.md.jinja +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/skills/extensions/invar-onboard/templates/roadmap.md.jinja +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/skills/extensions/security/SKILL.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/skills/extensions/security/patterns/_common.yaml +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/skills/extensions/security/patterns/python.yaml +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/skills/extensions/security/patterns/typescript.yaml +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/skills/investigate/SKILL.md.jinja +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/invar/templates/skills/propose/SKILL.md.jinja +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/src/shell/__init__.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/tests/__init__.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/tests/conftest.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/tests/integration/__init__.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/tests/integration/test_cli_flags.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/tests/integration/test_dx55_regression.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/tests/integration/test_dx56_sync.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/tests/integration/test_lx05_detection.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/tests/integration/test_lx05_integration.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/tests/integration/test_lx05_templates.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/tests/integration/test_lx06_typescript.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/tests/test_subprocess_env.py +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/.gitignore +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/README.md +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/package.json +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/packages/eslint-plugin/package.json +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/packages/eslint-plugin/src/index.ts +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/packages/eslint-plugin/src/rules/no-any-in-schema.ts +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/packages/eslint-plugin/src/rules/no-io-in-core.ts +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/packages/eslint-plugin/src/rules/require-jsdoc-example.ts +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/packages/eslint-plugin/src/rules/require-schema-validation.ts +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/packages/eslint-plugin/src/rules/shell-result-type.ts +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/packages/eslint-plugin/tsconfig.json +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/packages/fc-runner/package.json +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/packages/fc-runner/src/cli.ts +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/packages/fc-runner/src/index.ts +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/packages/fc-runner/tsconfig.json +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/packages/quick-check/package.json +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/packages/quick-check/src/cli.ts +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/packages/quick-check/src/index.ts +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/packages/quick-check/tsconfig.json +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/packages/ts-analyzer/package.json +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/packages/ts-analyzer/src/cli.ts +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/packages/ts-analyzer/src/index.ts +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/packages/ts-analyzer/tsconfig.json +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/pnpm-workspace.yaml +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/scripts/bundle.mjs +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/tsconfig.base.json +0 -0
- {invar_tools-1.10.0 → invar_tools-1.11.0}/typescript/vitest.config.ts +0 -0
- {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.
|
|
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
|
|
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
|
-
|
|
52
|
-
|
|
53
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|