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