invar-tools 1.11.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.11.0 → invar_tools-1.12.0}/.claude/skills/develop/SKILL.md +1 -2
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.claude/skills/investigate/SKILL.md +0 -55
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.invar/context.md +53 -3
- {invar_tools-1.11.0 → invar_tools-1.12.0}/CLAUDE.md +31 -11
- {invar_tools-1.11.0 → invar_tools-1.12.0}/PKG-INFO +25 -7
- {invar_tools-1.11.0 → invar_tools-1.12.0}/README.md +23 -6
- 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.11.0 → invar_tools-1.12.0}/docs/proposals/index.md +5 -3
- {invar_tools-1.11.0 → invar_tools-1.12.0}/pyproject.toml +3 -1
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/mcp/handlers.py +28 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/mcp/server.py +64 -14
- invar_tools-1.12.0/src/invar/node_tools/ts-query.js +396 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/shell/commands/guard.py +24 -0
- invar_tools-1.12.0/src/invar/shell/commands/perception.py +547 -0
- invar_tools-1.12.0/src/invar/shell/py_refs.py +156 -0
- 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.11.0 → invar_tools-1.12.0}/tests/conftest.py +2 -1
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario/api_client.py +0 -1
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario/auth_service.py +0 -2
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario/data_processor.py +0 -1
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario/file_handler.py +0 -2
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v2/analytics_engine.py +2 -6
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v2/inventory_manager.py +3 -4
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v2/notification_service.py +1 -2
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v2/payment_gateway.py +1 -3
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v2/user_service.py +0 -1
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v3/cache_service.py +6 -7
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v3/calculator.py +3 -4
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v3/data_processor.py +3 -4
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v3/user_manager.py +4 -5
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v3/validator.py +4 -4
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v4/config_manager.py +15 -16
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v4/data_service.py +21 -21
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v4/math_utils.py +9 -12
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v4/report_generator.py +18 -18
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v4/user_auth.py +13 -13
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v5/api_gateway.py +16 -15
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v5/auth_service.py +11 -11
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v5/cache_handler.py +12 -12
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v5/config_loader.py +23 -22
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v5/data_validator.py +12 -12
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v5/metrics_collector.py +23 -23
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v5/notification_service.py +10 -10
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v5/payment_processor.py +15 -16
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v5/report_builder.py +22 -22
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v5/task_scheduler.py +10 -9
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v5/user_manager.py +14 -18
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v5/utils.py +9 -9
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v6/api_gateway.py +16 -15
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v6/auth_service.py +11 -11
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v6/cache_handler.py +12 -12
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v6/config_loader.py +23 -22
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v6/data_validator.py +12 -12
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v6/metrics_collector.py +23 -23
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v6/notification_service.py +10 -10
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v6/payment_processor.py +15 -16
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v6/report_builder.py +22 -22
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v6/task_scheduler.py +10 -9
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v6/user_manager.py +14 -18
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v6/utils.py +9 -9
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v7/api_service.py +29 -29
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v7/auth_manager.py +40 -42
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v7/data_processor.py +42 -41
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v7/report_engine.py +37 -37
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v7/storage_handler.py +21 -22
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v7/utils.py +11 -11
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/integration/test_cli_flags.py +0 -2
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/integration/test_dx55_regression.py +0 -3
- {invar_tools-1.11.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.11.0 → invar_tools-1.12.0}/tests/integration/test_lx05_detection.py +0 -1
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/integration/test_lx05_integration.py +0 -1
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/integration/test_lx05_templates.py +0 -1
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/integration/test_lx06_typescript.py +0 -3
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/integration/test_lx07_skills.py +0 -3
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/integration/test_mcp_doc_tools.py +15 -16
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/test_subprocess_env.py +0 -3
- invar_tools-1.11.0/src/invar/shell/commands/perception.py +0 -251
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.aider.conf.yml +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.claude/commands/audit.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.claude/commands/guard.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.claude/hooks/PostToolUse.sh +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.claude/hooks/PreToolUse.sh +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.claude/hooks/Stop.sh +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.claude/hooks/UserPromptSubmit.sh +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.claude/hooks/invar.PostToolUse.sh +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.claude/hooks/invar.PreToolUse.sh +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.claude/hooks/invar.Stop.sh +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.claude/hooks/invar.UserPromptSubmit.sh +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.claude/skills/acceptance/SKILL.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.claude/skills/invar-onboard/SKILL.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.claude/skills/invar-onboard/patterns/python.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.claude/skills/invar-onboard/patterns/typescript.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.claude/skills/invar-onboard/templates/assessment.md.jinja +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.claude/skills/invar-onboard/templates/roadmap.md.jinja +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.claude/skills/propose/SKILL.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.claude/skills/review/SKILL.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.claude/skills/security/SKILL.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.claude/skills/security/patterns/_common.yaml +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.claude/skills/security/patterns/python.yaml +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.claude/skills/security/patterns/typescript.yaml +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.cursorrules +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.github/workflows/ci.yml +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.github/workflows/publish.yml +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.gitignore +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.invar/archive/sessions-2025-12.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.invar/examples/README.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.invar/examples/conftest.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.invar/examples/contracts.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.invar/examples/core_shell.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.invar/examples/functional.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.invar/examples/workflow.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.invar/mcp-setup.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.invar/project-additions.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.invar/proposals/TEMPLATE.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.mcp.json +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.pre-commit-config.yaml +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.serena/.gitignore +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/.serena/project.yml +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/INVAR.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/LICENSE +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/LICENSE-GPL +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/NOTICE +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/.nojekyll +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/agents.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/design.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/diagrams.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/guide.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/guides/aider.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/guides/cline.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/guides/continue.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/guides/cursor.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/guides/multi-agent.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/guides/pi.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/history/decisions-2024.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/history/feedback/compliance-analysis.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/history/feedback/feedback-memo.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/history/feedback/index.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/history/index.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/history/original-vision.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/history/protocol-evolution.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/history/research/cruxeval-quick-validation.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/index.html +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/logo.svg +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/DX-23-entry-point-detection.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/DX-25-functional-patterns.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/DX-29-pure-content-detection.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/DX-38-contract-quality-rules.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/DX-60-structured-rules-ssot.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/DX-61-functional-pattern-guidance.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/DX-61-implementation-design.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/DX-62-proactive-reference-reading.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/DX-68-agent-behavior-optimization.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/DX-74-experiment-report.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/DX-75-attention-aware-framework.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/LX-01-multi-language-feasibility.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/LX-04-pi-agent-support.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/LX-07-extension-skills.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/LX-08-extension-skills-future.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/2024-12-21-guard-enhancements.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/2024-12-21-language-inspired-enhancements.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/2024-12-21-test-first-enhancement.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/2025-12-21-dx-improvements.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/2025-12-23-dx-20-property-testing-enhancements.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/2025-12-23-dx-21-package-and-init.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/AGENT-IMPROVEMENTS.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-11-documentation-restructure.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-12-hypothesis-fallback.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-13-incremental-prove.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-14-expanded-prove-usage.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-16-agent-tool-enforcement.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-17-workflow-enforcement.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-22-verification-strategy.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-24-mechanism-documentation.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-26-guard-simplification.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-27-system-prompt-protocol.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-28-semantic-verification.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-30-visible-workflow.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-31-adversarial-reviewer.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-32-workflow-iteration.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-33-verification-blind-spots.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-34-review-cycle.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-35-workflow-phase-separation.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-36-documentation-restructuring.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-37-coverage-integration.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-39-workflow-efficiency.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-40-smart-tool-redirect-hook.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-41-automatic-review-orchestration.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-42-workflow-auto-routing.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-43-cross-platform-distribution.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-45-template-consistency.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-46-documentation-audit.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-47-command-skill-naming.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-48-code-structure-reorganization.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-49-protocol-distribution-unification.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-50-workflow-enforcement.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-51-workflow-phase-visibility.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-52-venv-dependency-injection.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-53-review-loop-effectiveness.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-54-agent-native-context-management.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-55-claude-init-conflict-resolution.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-56-template-sync-unification.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-57-claude-code-hooks.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-58-document-structure-optimization.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-63-contracts-first-enforcement.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-64-version-display-unification.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-65-single-file-guard.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-66-escape-hatch-visibility.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-67-explicit-skill-invocation.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-69-project-uninstall.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-70-init-simplification.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-70-review-isolation.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-71-skill-command-simplification.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-72-mandatory-self-review-detection.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-74-tiered-attention-defense.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-76-structured-document-query.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/DX-77-mcp-doc-tools-enhancements.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/LX-02-agent-portability-analysis.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/LX-03-multi-agent-support.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/LX-05-language-agnostic-protocol.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/LX-06-appendix-guard-comparison.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/LX-06-typescript-tooling.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/LX-09-legacy-onboarding.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/proposals/completed/LX-10-typescript-size-limits.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/reference/agent-information-hierarchy.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/reference/architecture/index.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/reference/contracts/advanced.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/reference/contracts/completeness.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/reference/contracts/doctests.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/reference/contracts/index.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/reference/contracts/pre-post.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/reference/documentation.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/reference/index.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/reference/proposal-workflow.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/reference/rules/index.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/reference/rules/severity.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/reference/verification/crosshair-vs-hypothesis.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/reference/verification/index.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/reference/verification/smart-routing.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/reference/workflow/index.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/reference/workflow/session-start.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/reference/workflow/usbv.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/terminal-gif-guide.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/test-reports/DX-55-test-report.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/test-reports/DX-56-test-report.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/test-reports/DX-58-test-scenario.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/testing/v1.5.0-stress-test.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/testing/v1.5.0-test-report.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/testing/v1.5.0-workflow-compliance.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/docs/vision.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/runtime/LICENSE +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/runtime/README.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/runtime/pyproject.toml +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/runtime/src/invar_runtime/__init__.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/runtime/src/invar_runtime/contracts.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/runtime/src/invar_runtime/decorators.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/runtime/src/invar_runtime/invariant.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/runtime/src/invar_runtime/relations.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/runtime/src/invar_runtime/resource.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/scripts/embed_node_tools.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/scripts/smart-guard.sh +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/core/__init__.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/__init__.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/__init__.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/contracts.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/doc_edit.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/doc_parser.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/entry_points.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/extraction.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/format_specs.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/format_strategies.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/formatter.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/hypothesis_strategies.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/inspect.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/lambda_helpers.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/language.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/models.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/must_use.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/parser.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/patterns/__init__.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/patterns/detector.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/patterns/p0_exhaustive.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/patterns/p0_literal.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/patterns/p0_newtype.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/patterns/p0_nonempty.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/patterns/p0_validation.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/patterns/registry.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/patterns/types.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/postcondition_scope.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/property_gen.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/purity.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/purity_heuristics.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/references.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/review_trigger.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/rule_meta.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/rules.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/shell_analysis.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/shell_architecture.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/strategies.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/suggestions.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/sync_helpers.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/tautology.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/template_helpers.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/template_parser.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/timeout_inference.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/trivial_detection.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/ts_parsers.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/ts_sig_parser.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/utils.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/core/verification_routing.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/mcp/__init__.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/mcp/__main__.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/node_tools/MANIFEST +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/node_tools/__init__.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/node_tools/fc-runner/cli.js +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/node_tools/quick-check/cli.js +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/node_tools/ts-analyzer/cli.js +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/py.typed +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/shell/__init__.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/shell/claude_hooks.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/shell/commands/__init__.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/shell/commands/doc.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/shell/commands/hooks.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/shell/commands/init.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/shell/commands/merge.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/shell/commands/mutate.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/shell/commands/skill.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/shell/commands/sync_self.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/shell/commands/template_sync.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/shell/commands/test.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/shell/commands/uninstall.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/shell/commands/update.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/shell/config.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/shell/contract_coverage.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/shell/coverage.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/shell/doc_tools.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/shell/fs.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/shell/git.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/shell/guard_helpers.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/shell/guard_output.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/shell/mcp_config.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/shell/mutation.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/shell/pattern_integration.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/shell/pi_hooks.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/shell/property_tests.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/shell/prove/__init__.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/shell/prove/accept.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/shell/prove/cache.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/shell/prove/crosshair.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/shell/prove/guard_ts.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/shell/prove/hypothesis.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/shell/skill_manager.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/shell/subprocess_env.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/shell/template_engine.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/shell/templates.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/shell/testing.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/CLAUDE.md.template +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/__init__.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/claude-md/python/critical-rules.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/claude-md/python/quick-reference.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/claude-md/typescript/critical-rules.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/claude-md/typescript/quick-reference.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/claude-md/universal/check-in.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/claude-md/universal/skills.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/claude-md/universal/workflow.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/commands/audit.md.jinja +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/commands/guard.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/config/AGENT.md.jinja +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/config/CLAUDE.md.jinja +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/config/context.md.jinja +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/config/pre-commit.yaml.jinja +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/context.md.template +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/examples/python/README.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/examples/python/conftest.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/examples/python/contracts.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/examples/python/core_shell.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/examples/python/functional.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/examples/python/workflow.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/examples/typescript/README.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/examples/typescript/contracts.ts +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/examples/typescript/core_shell.ts +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/examples/typescript/functional.ts +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/examples/typescript/workflow.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/hooks/PostToolUse.sh.jinja +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/hooks/PreToolUse.sh.jinja +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/hooks/Stop.sh.jinja +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/hooks/UserPromptSubmit.sh.jinja +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/hooks/__init__.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/hooks/pi/invar.ts.jinja +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/manifest.toml +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/onboard/assessment.md.jinja +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/onboard/patterns/python.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/onboard/patterns/typescript.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/onboard/roadmap.md.jinja +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/proposal.md.template +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/protocol/INVAR.md.jinja +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/protocol/python/architecture-examples.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/protocol/python/contracts-syntax.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/protocol/python/markers.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/protocol/python/tools.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/protocol/python/troubleshooting.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/protocol/typescript/architecture-examples.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/protocol/typescript/contracts-syntax.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/protocol/typescript/markers.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/protocol/typescript/tools.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/protocol/typescript/troubleshooting.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/protocol/universal/architecture.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/protocol/universal/completion.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/protocol/universal/contracts-concept.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/protocol/universal/header.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/protocol/universal/session.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/protocol/universal/six-laws.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/protocol/universal/usbv.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/protocol/universal/visible-workflow.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/skills/develop/SKILL.md.jinja +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/skills/extensions/_registry.yaml +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/skills/extensions/acceptance/SKILL.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/skills/extensions/invar-onboard/SKILL.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/skills/extensions/invar-onboard/patterns/python.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/skills/extensions/invar-onboard/patterns/typescript.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/skills/extensions/invar-onboard/templates/assessment.md.jinja +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/skills/extensions/invar-onboard/templates/roadmap.md.jinja +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/skills/extensions/security/SKILL.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/skills/extensions/security/patterns/_common.yaml +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/skills/extensions/security/patterns/python.yaml +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/skills/extensions/security/patterns/typescript.yaml +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/skills/investigate/SKILL.md.jinja +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/skills/propose/SKILL.md.jinja +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/invar/templates/skills/review/SKILL.md.jinja +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/src/shell/__init__.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/__init__.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/conftest.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/README.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/RESULTS.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/RESULTS_V2.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/RESULTS_V4.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/ground_truth.yaml +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/prompts.yaml +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario/config_manager.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario/utils.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v2/ground_truth.yaml +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v2/order_processor.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v3/README.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v3/ground_truth.yaml +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v4/.serena/.gitignore +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v4/.serena/project.yml +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v4/README.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v4/ground_truth.yaml +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v5/ground_truth.yaml +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v6/ground_truth.yaml +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/experiments/dx74_attention_drift/scenario_v7/ground_truth.yaml +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/tests/integration/__init__.py +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/typescript/.gitignore +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/typescript/README.md +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/typescript/package.json +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/typescript/packages/eslint-plugin/package.json +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/typescript/packages/eslint-plugin/src/index.ts +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/typescript/packages/eslint-plugin/src/rules/no-any-in-schema.ts +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/typescript/packages/eslint-plugin/src/rules/no-io-in-core.ts +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/typescript/packages/eslint-plugin/src/rules/require-jsdoc-example.ts +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/typescript/packages/eslint-plugin/src/rules/require-schema-validation.ts +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/typescript/packages/eslint-plugin/src/rules/shell-result-type.ts +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/typescript/packages/eslint-plugin/tsconfig.json +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/typescript/packages/fc-runner/package.json +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/typescript/packages/fc-runner/src/cli.ts +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/typescript/packages/fc-runner/src/index.ts +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/typescript/packages/fc-runner/tsconfig.json +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/typescript/packages/quick-check/package.json +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/typescript/packages/quick-check/src/cli.ts +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/typescript/packages/quick-check/src/index.ts +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/typescript/packages/quick-check/tsconfig.json +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/typescript/packages/ts-analyzer/package.json +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/typescript/packages/ts-analyzer/src/cli.ts +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/typescript/packages/ts-analyzer/src/index.ts +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/typescript/packages/ts-analyzer/tsconfig.json +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/typescript/pnpm-workspace.yaml +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/typescript/scripts/bundle.mjs +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/typescript/tsconfig.base.json +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/typescript/vitest.config.ts +0 -0
- {invar_tools-1.11.0 → invar_tools-1.12.0}/uv.lock +0 -0
|
@@ -420,8 +420,7 @@ Agent:
|
|
|
420
420
|
|
|
421
421
|
✓ Final: guard PASS | 0 errors, 1 warning
|
|
422
422
|
```
|
|
423
|
-
<!--/invar:skill-->
|
|
424
|
-
<!--invar:extensions-->
|
|
423
|
+
<!--/invar:skill--><!--invar:extensions-->
|
|
425
424
|
<!-- ========================================================================
|
|
426
425
|
EXTENSIONS REGION - USER EDITABLE
|
|
427
426
|
Add project-specific extensions here. This section is preserved on update.
|
|
@@ -67,61 +67,6 @@ 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?
|
|
125
70
|
|
|
126
71
|
## Exit Format
|
|
127
72
|
|
|
@@ -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 |
|
|
@@ -83,18 +83,7 @@ src/{project}/
|
|
|
83
83
|
|
|
84
84
|
> Full decision tree: [INVAR.md#core-shell](./INVAR.md#decision-tree-core-vs-shell)
|
|
85
85
|
|
|
86
|
-
### Document Tools (DX-76)
|
|
87
86
|
|
|
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`)
|
|
98
87
|
|
|
99
88
|
## Documentation Structure
|
|
100
89
|
|
|
@@ -299,6 +288,37 @@ When continuing from a previous session summary:
|
|
|
299
288
|
3. **Display phase header** before resuming work
|
|
300
289
|
4. **Re-read context.md** for project state
|
|
301
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
|
+
|
|
302
322
|
<!--/invar:user-->
|
|
303
323
|
|
|
304
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,6 +24,7 @@ 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
|
|
28
29
|
Requires-Dist: markdown-it-py>=3.0
|
|
29
30
|
Requires-Dist: mcp>=1.0
|
|
@@ -146,7 +147,19 @@ Guard passed.
|
|
|
146
147
|
|
|
147
148
|
## 🚀 Quick Start
|
|
148
149
|
|
|
149
|
-
|
|
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
|
|
150
163
|
|
|
151
164
|
### 📦 Two Packages, Different Purposes
|
|
152
165
|
|
|
@@ -303,14 +316,17 @@ function average(items: number[]): number {
|
|
|
303
316
|
|
|
304
317
|
### ✅ Solution 2: Multi-Layer Verification
|
|
305
318
|
|
|
306
|
-
Guard provides fast feedback
|
|
319
|
+
Guard provides fast feedback **on top of standard type checking**. Agent sees errors, fixes immediately:
|
|
307
320
|
|
|
308
321
|
| Layer | Tool | Speed | What It Catches |
|
|
309
322
|
|-------|------|-------|-----------------|
|
|
323
|
+
| **Type Check*** | mypy (Python) / tsc (TypeScript) | ~1s | Type errors, missing annotations |
|
|
310
324
|
| **Static** | Guard rules | ~0.5s | Architecture violations, missing contracts |
|
|
311
|
-
| **Doctest** | pytest | ~2s | Example correctness |
|
|
312
|
-
| **Property** | Hypothesis | ~10s | Edge cases via random inputs |
|
|
313
|
-
| **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>
|
|
314
330
|
|
|
315
331
|
```
|
|
316
332
|
┌──────────┐ ┌───────────┐ ┌───────────┐ ┌────────────┐
|
|
@@ -525,7 +541,7 @@ Cursor users get full verification via MCP:
|
|
|
525
541
|
|----------------|---------|----------|
|
|
526
542
|
| `INVAR.md` | Protocol for AI agents | Required |
|
|
527
543
|
| `.invar/` | Config, context, examples | Required |
|
|
528
|
-
| `.pre-commit-config.yaml` | Verification before commit | Optional |
|
|
544
|
+
| `.pre-commit-config.yaml` | Verification before commit (Ruff, mypy*, Guard) | Optional |
|
|
529
545
|
| `src/core/`, `src/shell/` | Recommended structure | Optional |
|
|
530
546
|
| `CLAUDE.md` | Agent instructions | Claude Code |
|
|
531
547
|
| `.claude/skills/` | Workflow + extension skills | Claude Code |
|
|
@@ -534,6 +550,8 @@ Cursor users get full verification via MCP:
|
|
|
534
550
|
| `.mcp.json` | MCP server config | Claude Code |
|
|
535
551
|
| `AGENT.md` | Universal agent instructions | Other agents |
|
|
536
552
|
|
|
553
|
+
<sup>* mypy hook included in `.pre-commit-config.yaml` but requires: `pip install mypy`</sup>
|
|
554
|
+
|
|
537
555
|
**Note:** If `pyproject.toml` exists, Guard configuration goes there as `[tool.invar.guard]` instead of `.invar/config.toml`.
|
|
538
556
|
|
|
539
557
|
**Recommended structure:**
|
|
@@ -103,7 +103,19 @@ Guard passed.
|
|
|
103
103
|
|
|
104
104
|
## 🚀 Quick Start
|
|
105
105
|
|
|
106
|
-
|
|
106
|
+
### Tool × Language Support
|
|
107
|
+
|
|
108
|
+
| Tool | Python | TypeScript | Notes |
|
|
109
|
+
|------|--------|------------|-------|
|
|
110
|
+
| `invar guard` | ✅ Full | ⚠️ Partial | TS: tsc + eslint + vitest |
|
|
111
|
+
| `invar sig` | ✅ Full | ✅ Full | TS: TS Compiler API |
|
|
112
|
+
| `invar map` | ✅ Full | ✅ Full | TS: With reference counts |
|
|
113
|
+
| `invar refs` | ✅ Full | ✅ Full | Cross-file reference finding |
|
|
114
|
+
| `invar doc *` | ✅ Full | ✅ Full | Language-agnostic |
|
|
115
|
+
|
|
116
|
+
**TypeScript Notes:**
|
|
117
|
+
- Requires Node.js + TypeScript (most TS projects have these)
|
|
118
|
+
- Falls back to regex parser if Node.js unavailable
|
|
107
119
|
|
|
108
120
|
### 📦 Two Packages, Different Purposes
|
|
109
121
|
|
|
@@ -260,14 +272,17 @@ function average(items: number[]): number {
|
|
|
260
272
|
|
|
261
273
|
### ✅ Solution 2: Multi-Layer Verification
|
|
262
274
|
|
|
263
|
-
Guard provides fast feedback
|
|
275
|
+
Guard provides fast feedback **on top of standard type checking**. Agent sees errors, fixes immediately:
|
|
264
276
|
|
|
265
277
|
| Layer | Tool | Speed | What It Catches |
|
|
266
278
|
|-------|------|-------|-----------------|
|
|
279
|
+
| **Type Check*** | mypy (Python) / tsc (TypeScript) | ~1s | Type errors, missing annotations |
|
|
267
280
|
| **Static** | Guard rules | ~0.5s | Architecture violations, missing contracts |
|
|
268
|
-
| **Doctest** | pytest | ~2s | Example correctness |
|
|
269
|
-
| **Property** | Hypothesis | ~10s | Edge cases via random inputs |
|
|
270
|
-
| **Symbolic** | CrossHair | ~30s | Mathematical proof of contracts |
|
|
281
|
+
| **Doctest** | pytest / vitest | ~2s | Example correctness |
|
|
282
|
+
| **Property** | Hypothesis / fast-check | ~10s | Edge cases via random inputs |
|
|
283
|
+
| **Symbolic** | CrossHair / (TS: N/A) | ~30s | Mathematical proof of contracts |
|
|
284
|
+
|
|
285
|
+
<sup>* Requires separate installation: `pip install mypy` or configure TypeScript in your project</sup>
|
|
271
286
|
|
|
272
287
|
```
|
|
273
288
|
┌──────────┐ ┌───────────┐ ┌───────────┐ ┌────────────┐
|
|
@@ -482,7 +497,7 @@ Cursor users get full verification via MCP:
|
|
|
482
497
|
|----------------|---------|----------|
|
|
483
498
|
| `INVAR.md` | Protocol for AI agents | Required |
|
|
484
499
|
| `.invar/` | Config, context, examples | Required |
|
|
485
|
-
| `.pre-commit-config.yaml` | Verification before commit | Optional |
|
|
500
|
+
| `.pre-commit-config.yaml` | Verification before commit (Ruff, mypy*, Guard) | Optional |
|
|
486
501
|
| `src/core/`, `src/shell/` | Recommended structure | Optional |
|
|
487
502
|
| `CLAUDE.md` | Agent instructions | Claude Code |
|
|
488
503
|
| `.claude/skills/` | Workflow + extension skills | Claude Code |
|
|
@@ -491,6 +506,8 @@ Cursor users get full verification via MCP:
|
|
|
491
506
|
| `.mcp.json` | MCP server config | Claude Code |
|
|
492
507
|
| `AGENT.md` | Universal agent instructions | Other agents |
|
|
493
508
|
|
|
509
|
+
<sup>* mypy hook included in `.pre-commit-config.yaml` but requires: `pip install mypy`</sup>
|
|
510
|
+
|
|
494
511
|
**Note:** If `pyproject.toml` exists, Guard configuration goes there as `[tool.invar.guard]` instead of `.invar/config.toml`.
|
|
495
512
|
|
|
496
513
|
**Recommended structure:**
|