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