invar-tools 1.5.0__py3-none-any.whl → 1.7.0__py3-none-any.whl
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/__init__.py +7 -1
- invar/core/entry_points.py +12 -10
- invar/core/formatter.py +15 -0
- invar/core/models.py +85 -0
- invar/shell/commands/guard.py +38 -9
- invar/shell/commands/init.py +8 -79
- invar/shell/commands/uninstall.py +341 -0
- invar/shell/config.py +46 -0
- invar/shell/guard_output.py +10 -0
- invar/shell/templates.py +1 -70
- invar/templates/CLAUDE.md.template +18 -10
- invar/templates/commands/audit.md +6 -0
- invar/templates/commands/guard.md +6 -0
- invar/templates/config/CLAUDE.md.jinja +51 -30
- invar/templates/config/context.md.jinja +14 -0
- invar/templates/pre-commit-config.yaml.template +2 -0
- invar/templates/protocol/INVAR.md +1 -0
- invar/templates/skills/develop/SKILL.md.jinja +2 -1
- {invar_tools-1.5.0.dist-info → invar_tools-1.7.0.dist-info}/METADATA +1 -1
- {invar_tools-1.5.0.dist-info → invar_tools-1.7.0.dist-info}/RECORD +25 -26
- invar/templates/aider.conf.yml.template +0 -31
- invar/templates/cursorrules.template +0 -40
- {invar_tools-1.5.0.dist-info → invar_tools-1.7.0.dist-info}/WHEEL +0 -0
- {invar_tools-1.5.0.dist-info → invar_tools-1.7.0.dist-info}/entry_points.txt +0 -0
- {invar_tools-1.5.0.dist-info → invar_tools-1.7.0.dist-info}/licenses/LICENSE +0 -0
- {invar_tools-1.5.0.dist-info → invar_tools-1.7.0.dist-info}/licenses/LICENSE-GPL +0 -0
- {invar_tools-1.5.0.dist-info → invar_tools-1.7.0.dist-info}/licenses/NOTICE +0 -0
|
@@ -12,6 +12,24 @@
|
|
|
12
12
|
| **Shell** | Returns `Result[T, E]` from `returns` library |
|
|
13
13
|
| **Flow** | USBV: Understand → Specify → Build → Validate |
|
|
14
14
|
|
|
15
|
+
### Contract Rules (CRITICAL)
|
|
16
|
+
|
|
17
|
+
```python
|
|
18
|
+
# ❌ WRONG: Lambda must include ALL parameters
|
|
19
|
+
@pre(lambda x: x >= 0)
|
|
20
|
+
def calc(x: int, y: int = 0): ...
|
|
21
|
+
|
|
22
|
+
# ✅ CORRECT: Include defaults too
|
|
23
|
+
@pre(lambda x, y=0: x >= 0)
|
|
24
|
+
def calc(x: int, y: int = 0): ...
|
|
25
|
+
|
|
26
|
+
# ❌ WRONG: @post cannot access parameters
|
|
27
|
+
@post(lambda result: result > x) # 'x' not available!
|
|
28
|
+
|
|
29
|
+
# ✅ CORRECT: @post only sees 'result'
|
|
30
|
+
@post(lambda result: result >= 0)
|
|
31
|
+
```
|
|
32
|
+
|
|
15
33
|
<!--/invar:critical-->
|
|
16
34
|
|
|
17
35
|
<!--invar:managed version="{{ version }}"-->
|
|
@@ -19,28 +37,13 @@
|
|
|
19
37
|
|
|
20
38
|
> **Protocol:** Follow [INVAR.md](./INVAR.md) — includes Check-In, USBV workflow, and Task Completion requirements.
|
|
21
39
|
|
|
22
|
-
## Check-In
|
|
40
|
+
## Check-In
|
|
23
41
|
|
|
24
|
-
|
|
42
|
+
> See [INVAR.md#check-in](./INVAR.md#check-in-required) for full protocol.
|
|
25
43
|
|
|
26
|
-
|
|
27
|
-
✓ Check-In: [project] | [branch] | [clean/dirty]
|
|
28
|
-
```
|
|
44
|
+
**Your first message MUST display:** `✓ Check-In: [project] | [branch] | [clean/dirty]`
|
|
29
45
|
|
|
30
|
-
Actions
|
|
31
|
-
1. Read `.invar/context.md` (Key Rules + Current State + Lessons Learned)
|
|
32
|
-
2. Show one-line status
|
|
33
|
-
|
|
34
|
-
Example:
|
|
35
|
-
```
|
|
36
|
-
✓ Check-In: MyProject | main | clean
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
**Do NOT execute guard or map at Check-In.**
|
|
40
|
-
Guard is for VALIDATE phase and Final only.
|
|
41
|
-
|
|
42
|
-
This is your sign-in. The user sees it immediately.
|
|
43
|
-
No visible check-in = Session not started.
|
|
46
|
+
**Actions:** Read `.invar/context.md`, then show status. Do NOT run guard at Check-In.
|
|
44
47
|
|
|
45
48
|
---
|
|
46
49
|
|
|
@@ -79,6 +82,14 @@ src/{project}/
|
|
|
79
82
|
| Core | `@pre`/`@post` + doctests, pure (no I/O) |
|
|
80
83
|
| Shell | Returns `Result[T, E]` from `returns` library |
|
|
81
84
|
|
|
85
|
+
### Core vs Shell (Edge Cases)
|
|
86
|
+
|
|
87
|
+
- File/network/env vars → **Shell**
|
|
88
|
+
- `datetime.now()`, `random` → **Inject param** OR Shell
|
|
89
|
+
- Pure logic → **Core**
|
|
90
|
+
|
|
91
|
+
> Full decision tree: [INVAR.md#core-shell](./INVAR.md#decision-tree-core-vs-shell)
|
|
92
|
+
|
|
82
93
|
## Documentation Structure
|
|
83
94
|
|
|
84
95
|
| File | Owner | Edit? | Purpose |
|
|
@@ -89,6 +100,8 @@ src/{project}/
|
|
|
89
100
|
| .invar/project-additions.md | User | Yes | Project rules → injected into CLAUDE.md |
|
|
90
101
|
| .invar/examples/ | Invar | No | **Must read:** Core/Shell patterns, workflow |
|
|
91
102
|
|
|
103
|
+
> **Before writing code:** Check Task Router in `.invar/context.md`
|
|
104
|
+
|
|
92
105
|
## Visible Workflow (DX-30)
|
|
93
106
|
|
|
94
107
|
For complex tasks (3+ functions), show 3 checkpoints in TodoList:
|
|
@@ -159,18 +172,26 @@ Guard triggers `review_suggested` for: security-sensitive files, escape hatches
|
|
|
159
172
|
|
|
160
173
|
## Workflow Routing (MANDATORY)
|
|
161
174
|
|
|
162
|
-
When user message contains these triggers, you MUST invoke the
|
|
175
|
+
When user message contains these triggers, you MUST use the **Skill tool** to invoke the skill:
|
|
176
|
+
|
|
177
|
+
| Trigger Words | Skill Tool Call | Notes |
|
|
178
|
+
|---------------|-----------------|-------|
|
|
179
|
+
| "review", "review and fix" | `Skill(skill="review")` | Adversarial review with fix loop |
|
|
180
|
+
| "implement", "add", "fix", "update" | `Skill(skill="develop")` | Unless in review context |
|
|
181
|
+
| "why", "explain", "investigate" | `Skill(skill="investigate")` | Research mode, no code changes |
|
|
182
|
+
| "compare", "should we", "design" | `Skill(skill="propose")` | Decision facilitation |
|
|
183
|
+
|
|
184
|
+
**⚠️ CRITICAL: You must call the Skill tool, not just follow the workflow mentally.**
|
|
163
185
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
| "compare", "should we", "design" | `/propose` | Decision facilitation |
|
|
186
|
+
The Skill tool reads `.claude/skills/<skill>/SKILL.md` which contains:
|
|
187
|
+
- Detailed phase instructions (USBV breakdown)
|
|
188
|
+
- Error handling rules
|
|
189
|
+
- Timeout policies
|
|
190
|
+
- Incremental development patterns (DX-63)
|
|
170
191
|
|
|
171
192
|
**Violation check (before writing ANY code):**
|
|
172
|
-
- "
|
|
173
|
-
- "
|
|
193
|
+
- "Did I call `Skill(skill="...")`?"
|
|
194
|
+
- "Am I following the SKILL.md instructions?"
|
|
174
195
|
|
|
175
196
|
---
|
|
176
197
|
|
|
@@ -205,7 +226,7 @@ enters /review. Say "skip" to bypass.
|
|
|
205
226
|
<!--invar:project-->
|
|
206
227
|
<!-- ========================================================================
|
|
207
228
|
PROJECT REGION - INVAR PROJECT ONLY
|
|
208
|
-
This section is populated by .invar/project-additions.md via sync
|
|
229
|
+
This section is populated by .invar/project-additions.md via `invar dev sync`.
|
|
209
230
|
For other projects, this region remains empty.
|
|
210
231
|
======================================================================== -->
|
|
211
232
|
<!--/invar:project-->
|
|
@@ -214,7 +235,7 @@ enters /review. Say "skip" to bypass.
|
|
|
214
235
|
<!-- ========================================================================
|
|
215
236
|
USER REGION - EDITABLE
|
|
216
237
|
Add your team conventions and project-specific rules below.
|
|
217
|
-
This section is preserved across invar update and sync
|
|
238
|
+
This section is preserved across `invar update` and `invar dev sync`.
|
|
218
239
|
======================================================================== -->
|
|
219
240
|
<!--/invar:user-->
|
|
220
241
|
|
|
@@ -27,6 +27,20 @@
|
|
|
27
27
|
{% endif -%}
|
|
28
28
|
- Final must show: `✓ Final: guard PASS | ...`
|
|
29
29
|
|
|
30
|
+
## Task Router (DX-62)
|
|
31
|
+
|
|
32
|
+
<!-- Before writing code, check this table -->
|
|
33
|
+
|
|
34
|
+
| If you are about to... | STOP and read first |
|
|
35
|
+
|------------------------|---------------------|
|
|
36
|
+
| Write code in `core/` | `.invar/examples/contracts.py` |
|
|
37
|
+
| Write code in `shell/` | `.invar/examples/core_shell.py` |
|
|
38
|
+
| Add `@pre`/`@post` contracts | `.invar/examples/contracts.py` |
|
|
39
|
+
| Use functional patterns | `.invar/examples/functional.py` |
|
|
40
|
+
| Implement a feature | `.invar/examples/workflow.md` |
|
|
41
|
+
|
|
42
|
+
**Rule:** Match found above? Read the file BEFORE writing code.
|
|
43
|
+
|
|
30
44
|
## Self-Reminder
|
|
31
45
|
|
|
32
46
|
<!-- DX-54: AI should re-read this file periodically -->
|
|
@@ -267,6 +267,7 @@ invar guard # Full: static + doctests + CrossHair + Hypothesis
|
|
|
267
267
|
invar guard --static # Static only (quick debug, ~0.5s)
|
|
268
268
|
invar guard --changed # Modified files only
|
|
269
269
|
invar guard --coverage # Collect branch coverage
|
|
270
|
+
invar guard -c # Contract coverage only (DX-63)
|
|
270
271
|
invar sig <file> # Show contracts + signatures
|
|
271
272
|
invar map --top 10 # Most-referenced symbols
|
|
272
273
|
invar rules # List all rules with detection/hints (JSON)
|
|
@@ -17,7 +17,8 @@ _invar:
|
|
|
17
17
|
|
|
18
18
|
Before any workflow action:
|
|
19
19
|
1. Read `.invar/context.md` (especially Key Rules section)
|
|
20
|
-
2.
|
|
20
|
+
2. **Check Task Router** — read examples before coding in `core/` or `shell/`
|
|
21
|
+
3. Display routing announcement
|
|
21
22
|
|
|
22
23
|
### Routing Announcement
|
|
23
24
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: invar-tools
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.7.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
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
invar/__init__.py,sha256=
|
|
1
|
+
invar/__init__.py,sha256=HV5W2nywevBhAMgF7TIHdBoiFY4ETWVLBYAt_gZCPHU,1520
|
|
2
2
|
invar/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
3
|
invar/core/__init__.py,sha256=01TgQ2bqTFV4VFdksfqXYPa2WUqo-DpUWUkEcIUXFb4,218
|
|
4
4
|
invar/core/contracts.py,sha256=SOyF1KeJ6hrEwfQ09UzMt881OJKDXRbPTslKA6HzdKg,19085
|
|
5
|
-
invar/core/entry_points.py,sha256=
|
|
5
|
+
invar/core/entry_points.py,sha256=1p6GRGTp9kA9spNkGKidFLlzLPheh6JO2XFb68Cr0sE,12209
|
|
6
6
|
invar/core/extraction.py,sha256=mScqEMEEQdsd-Z0jx9g3scK6Z1vI9l-ESjggXPIWHZ4,6112
|
|
7
7
|
invar/core/format_specs.py,sha256=P299aRHFMXyow8STwsvaT6Bg2ALPs2wSy7SByiRZZ-A,5610
|
|
8
8
|
invar/core/format_strategies.py,sha256=LifL97JbsF8WEkVNmQpq2htyFUC3pW21myAjtRGpSxU,5774
|
|
9
|
-
invar/core/formatter.py,sha256=
|
|
9
|
+
invar/core/formatter.py,sha256=rCGZhMpl4dPLrztgKDkNtAvnv2vKfomyIHl_6fThuno,11293
|
|
10
10
|
invar/core/hypothesis_strategies.py,sha256=_MfjG7KxkmJvuPsczr_1JayR_YmiDzU2jJ8fQPoKGgs,16517
|
|
11
11
|
invar/core/inspect.py,sha256=l1knohwpLRHSNySPUjyeBHJusnU0vYiQGj4dMVgQZIo,4381
|
|
12
12
|
invar/core/lambda_helpers.py,sha256=Ap1y7N0wpgCgPHwrs2pd7zD9Qq4Ptfd2iTliprXIkME,6457
|
|
13
|
-
invar/core/models.py,sha256=
|
|
13
|
+
invar/core/models.py,sha256=1bbhLijXHSe-o5SXQhbJgq8_EqPOOgsGKIrnWRwwtYM,13200
|
|
14
14
|
invar/core/must_use.py,sha256=7HnnbT53lb4dOT-1mL64pz0JbQYytuw4eejNVe7iWKY,5496
|
|
15
15
|
invar/core/parser.py,sha256=ucVpGziVzUvbkXT1n_SgOrYdStDEcNBqLuRGqK3_M5g,9205
|
|
16
16
|
invar/core/postcondition_scope.py,sha256=ykjVNqZZ1zItBmI7ebgmLW5vFGE-vpaLRTvSgWaJMgM,5245
|
|
@@ -46,49 +46,48 @@ invar/mcp/__main__.py,sha256=ZcIT2U6xUyGOWucl4jq422BDE3lRLjqyxb9pFylRBdk,219
|
|
|
46
46
|
invar/mcp/server.py,sha256=ay-w2YfSa1kTmBFx3x3jEgmNRC3NFEW0EYuZRt7M39w,12244
|
|
47
47
|
invar/shell/__init__.py,sha256=FFw1mNbh_97PeKPcHIqQpQ7mw-JoIvyLM1yOdxLw5uk,204
|
|
48
48
|
invar/shell/claude_hooks.py,sha256=kxkdF2gwTWcGpglccDi6-8IN1zRwelDG6Lg1VPYQgyA,12912
|
|
49
|
-
invar/shell/config.py,sha256=
|
|
49
|
+
invar/shell/config.py,sha256=6-kbo6--SxfROXoyU-v7InSLR8f_U1Mar_xEOdCXFkY,17633
|
|
50
50
|
invar/shell/contract_coverage.py,sha256=2RiXC9RBV__cKLHu0KKOWRxEgYVQNNAPAdwBjYenNHQ,11780
|
|
51
51
|
invar/shell/coverage.py,sha256=m01o898IFIdBztEBQLwwL1Vt5PWrpUntO4lv4nWEkls,11344
|
|
52
52
|
invar/shell/fs.py,sha256=wVD7DPWsCIJXuTyY_pi-5_LS82mXRdn_grJCOLn9zpU,3699
|
|
53
53
|
invar/shell/git.py,sha256=s6RQxEDQuLrmK3mru88EoYP8__4hiFW8AozlcxmY47E,2784
|
|
54
54
|
invar/shell/guard_helpers.py,sha256=QeYgbW0lgUa9Z_RCjAMG7UJdiMzz5cW48Lb2u-qgQi8,15114
|
|
55
|
-
invar/shell/guard_output.py,sha256=
|
|
55
|
+
invar/shell/guard_output.py,sha256=v3gG5P-_47nIFo8eAMKwdA_hLf2KZ0cQ-45Z6JjKp4w,12520
|
|
56
56
|
invar/shell/mcp_config.py,sha256=-hC7Y5BGuVs285b6gBARk7ZyzVxHwPgXSyt_GoN0jfs,4580
|
|
57
57
|
invar/shell/mutation.py,sha256=Lfyk2b8j8-hxAq-iwAgQeOhr7Ci6c5tRF1TXe3CxQCs,8914
|
|
58
58
|
invar/shell/pattern_integration.py,sha256=pRcjfq3NvMW_tvQCnaXZnD1k5AVEWK8CYOE2jN6VTro,7842
|
|
59
59
|
invar/shell/property_tests.py,sha256=N9JreyH5PqR89oF5yLcX7ZAV-Koyg5BKo-J05-GUPsA,9109
|
|
60
60
|
invar/shell/subprocess_env.py,sha256=9oXl3eMEbzLsFEgMHqobEw6oW_wV0qMEP7pklwm58Pw,11453
|
|
61
61
|
invar/shell/template_engine.py,sha256=IzOiGsKVFo0lDUdtg27wMzIJJKToclv151RDZuDnHHo,11027
|
|
62
|
-
invar/shell/templates.py,sha256=
|
|
62
|
+
invar/shell/templates.py,sha256=wVG78wBoVB-SOugfqaKj6xklwSDpEyjeEOGE6EKcS0s,13387
|
|
63
63
|
invar/shell/testing.py,sha256=rTNBH0Okh2qtG9ohSXOz487baQ2gXrWT3s_WECW3HJs,11143
|
|
64
64
|
invar/shell/commands/__init__.py,sha256=MEkKwVyjI9DmkvBpJcuumXo2Pg_FFkfEr-Rr3nrAt7A,284
|
|
65
|
-
invar/shell/commands/guard.py,sha256=
|
|
65
|
+
invar/shell/commands/guard.py,sha256=vDBGOFb9mQ1D8eXrMvQB505GpjO1XLeCLrv2ig9-6dU,21718
|
|
66
66
|
invar/shell/commands/hooks.py,sha256=W-SOnT4VQyUvXwipozkJwgEYfiOJGz7wksrbcdWegUg,2356
|
|
67
|
-
invar/shell/commands/init.py,sha256=
|
|
67
|
+
invar/shell/commands/init.py,sha256=7PhXVjnhsY-1o2kBWRfoUPvSjopB0jRjazLe4P_FyZQ,16339
|
|
68
68
|
invar/shell/commands/merge.py,sha256=nuvKo8m32-OL-SCQlS4SLKmOZxQ3qj-1nGCx1Pgzifw,8183
|
|
69
69
|
invar/shell/commands/mutate.py,sha256=GwemiO6LlbGCBEQsBFnzZuKhF-wIMEl79GAMnKUWc8U,5765
|
|
70
70
|
invar/shell/commands/perception.py,sha256=TyH_HpqyKkmE3-zcU4YyBG8ghwJaSFeRC-OQMVBDTbQ,3837
|
|
71
71
|
invar/shell/commands/sync_self.py,sha256=nmqBry7V2_enKwy2zzHg8UoedZNicLe3yKDhjmBeZ68,3880
|
|
72
72
|
invar/shell/commands/template_sync.py,sha256=wVZ-UvJ1wpN2UBcWMfbei0n46XHYx-zRbMA2oX6FSi4,13723
|
|
73
73
|
invar/shell/commands/test.py,sha256=goMf-ovvzEyWQMheq4YlJ-mwK5-w3lDj0cq0IA_1-_c,4205
|
|
74
|
+
invar/shell/commands/uninstall.py,sha256=f8kGBwkdYycQ5eIdfveIefTw9ZSU6D4OyUuHt8ScUTY,12166
|
|
74
75
|
invar/shell/commands/update.py,sha256=0V5F8vxQ6PHPHPVYDmxdRD7xXeQEFypiJMYpY5ryiek,1349
|
|
75
76
|
invar/shell/prove/__init__.py,sha256=ZqlbmyMFJf6yAle8634jFuPRv8wNvHps8loMlOJyf8A,240
|
|
76
77
|
invar/shell/prove/accept.py,sha256=cnY_6jzU1EBnpLF8-zWUWcXiSXtCwxPsXEYXsSVPG38,3717
|
|
77
78
|
invar/shell/prove/cache.py,sha256=jbNdrvfLjvK7S0iqugErqeabb4YIbQuwIlcSRyCKbcg,4105
|
|
78
79
|
invar/shell/prove/crosshair.py,sha256=4Z_iIYBlkp-I6FqSYZa89wWB09V4Ouw2PduYhTn6rfw,16525
|
|
79
80
|
invar/shell/prove/hypothesis.py,sha256=QUclOOUg_VB6wbmHw8O2EPiL5qBOeBRqQeM04AVuLw0,9880
|
|
80
|
-
invar/templates/CLAUDE.md.template,sha256=
|
|
81
|
+
invar/templates/CLAUDE.md.template,sha256=eaGU3SyRO_NEifw5b26k3srgQH4jyeujjCJ-HbM36_w,4913
|
|
81
82
|
invar/templates/__init__.py,sha256=cb3ht8KPK5oBn5oG6HsTznujmo9WriJ_P--fVxJwycc,45
|
|
82
|
-
invar/templates/aider.conf.yml.template,sha256=4xzSs3BXzFJvwdhnWbmzSY0yCbfx5oxqnV8ZjehqHBg,853
|
|
83
83
|
invar/templates/context.md.template,sha256=FKyI1ghpqcf4wftyv9-auIFHor8Nm8lETN45Ja-L8Og,2386
|
|
84
|
-
invar/templates/cursorrules.template,sha256=N6AiEJRJHGkHm2tswh3PnZ_07ozeyQQI8iEOGK5Aqoc,1023
|
|
85
84
|
invar/templates/manifest.toml,sha256=cEe7yEOOeaLmOF-PrwZXxiPGjHhsSJYkWBKRHDmSbac,4268
|
|
86
|
-
invar/templates/pre-commit-config.yaml.template,sha256=
|
|
85
|
+
invar/templates/pre-commit-config.yaml.template,sha256=ZMqiStLCf9cC4uL2JoF59aYv_G4AV-roGdkj1tWHCBc,1763
|
|
87
86
|
invar/templates/proposal.md.template,sha256=UP7SpQ7gk8jVlHGLQCSQ5c-kCj1DBQEz8M-vEStK77I,1573
|
|
88
|
-
invar/templates/commands/audit.md,sha256=
|
|
89
|
-
invar/templates/commands/guard.md,sha256=
|
|
90
|
-
invar/templates/config/CLAUDE.md.jinja,sha256=
|
|
91
|
-
invar/templates/config/context.md.jinja,sha256=
|
|
87
|
+
invar/templates/commands/audit.md,sha256=OrotO8420zTKnlNyAyL1Eos0VIaihzEU4AHdfDv68Oc,4162
|
|
88
|
+
invar/templates/commands/guard.md,sha256=N_C_AXd9kI85W1B0aTEycjiDp_jdaP8eeq8O0FQ_WQ8,1227
|
|
89
|
+
invar/templates/config/CLAUDE.md.jinja,sha256=VbtDWxn3H8qiE9-DV1hlG3DJ-GcBQU4ZiUHbFh6Bxxk,7814
|
|
90
|
+
invar/templates/config/context.md.jinja,sha256=_kJ8erEQNJMLDCKrv4BXWkO6OaGzE-zW9biCf7144aY,3103
|
|
92
91
|
invar/templates/config/pre-commit.yaml.jinja,sha256=Qflmii8hngHciSgfa8mIlg3-E3D4b0xflm0-Q-cWcCc,1752
|
|
93
92
|
invar/templates/examples/README.md,sha256=xMcJZ1KEcfLJi5Ope_4FIbqDWKK3mRleAgllvgeNT6I,572
|
|
94
93
|
invar/templates/examples/conftest.py,sha256=uKA4NR7nyZWeSzY0URdZtw5zCcJpU32jNcaSKrI1Mxc,152
|
|
@@ -100,15 +99,15 @@ invar/templates/hooks/PreToolUse.sh.jinja,sha256=D39PaT1eFSjz_Av16xK1atoBZbhLI8t
|
|
|
100
99
|
invar/templates/hooks/Stop.sh.jinja,sha256=3S6lLeAGIu5aPQVRz4jjFS9AfjCD9DdS_jagmkw-x8Q,960
|
|
101
100
|
invar/templates/hooks/UserPromptSubmit.sh.jinja,sha256=eAQqQ-XdOCyhLpF5_1r1z7C-Ej9GQ5Isqbu_2LAtsno,2302
|
|
102
101
|
invar/templates/hooks/__init__.py,sha256=RnnMoQA-8eqbr8Y_1Vu9B8h5vAz4C-vmo8wgdcGYrz0,43
|
|
103
|
-
invar/templates/protocol/INVAR.md,sha256=
|
|
104
|
-
invar/templates/skills/develop/SKILL.md.jinja,sha256=
|
|
102
|
+
invar/templates/protocol/INVAR.md,sha256=ppQhb_-R5YaXAqW1WDMOcXptx-CrAQI_xYxld7YljK8,9998
|
|
103
|
+
invar/templates/skills/develop/SKILL.md.jinja,sha256=3coPSZGh1-YKN9Xc_xcEkfEP3S0XiFMMGF0hJZEaAx8,10562
|
|
105
104
|
invar/templates/skills/investigate/SKILL.md.jinja,sha256=bOLdLMH5WUVBYOo4NpsfyvI6xx7I1lCNr_X-8bMe_kg,2744
|
|
106
105
|
invar/templates/skills/propose/SKILL.md.jinja,sha256=_iDLYN6-cfzA8n0_8sv-Dnpm1xq9IIpcDyM10mU2WUA,2420
|
|
107
106
|
invar/templates/skills/review/SKILL.md.jinja,sha256=e7HULz1jjLOlk2LYejQMk2F-cu7dDIwvh6lWNjx3j-Q,14123
|
|
108
|
-
invar_tools-1.
|
|
109
|
-
invar_tools-1.
|
|
110
|
-
invar_tools-1.
|
|
111
|
-
invar_tools-1.
|
|
112
|
-
invar_tools-1.
|
|
113
|
-
invar_tools-1.
|
|
114
|
-
invar_tools-1.
|
|
107
|
+
invar_tools-1.7.0.dist-info/METADATA,sha256=JKBCWf7HkEIrD3m3VC7fHLA7REki-dlk1l0HxsgPFW4,16964
|
|
108
|
+
invar_tools-1.7.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
109
|
+
invar_tools-1.7.0.dist-info/entry_points.txt,sha256=RwH_EhqgtFPsnO6RcrwrAb70Zyfb8Mh6uUtztWnUxGk,102
|
|
110
|
+
invar_tools-1.7.0.dist-info/licenses/LICENSE,sha256=qeFksp4H4kfTgQxPCIu3OdagXyiZcgBlVfsQ6M5oFyk,10767
|
|
111
|
+
invar_tools-1.7.0.dist-info/licenses/LICENSE-GPL,sha256=IvZfC6ZbP7CLjytoHVzvpDZpD-Z3R_qa1GdMdWlWQ6Q,35157
|
|
112
|
+
invar_tools-1.7.0.dist-info/licenses/NOTICE,sha256=joEyMyFhFY8Vd8tTJ-a3SirI0m2Sd0WjzqYt3sdcglc,2561
|
|
113
|
+
invar_tools-1.7.0.dist-info/RECORD,,
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
# Invar Protocol Configuration for Aider
|
|
2
|
-
# Follow the Invar Protocol in INVAR.md
|
|
3
|
-
|
|
4
|
-
# Auto-read protocol files at session start
|
|
5
|
-
read:
|
|
6
|
-
- INVAR.md
|
|
7
|
-
- .invar/examples/contracts.py
|
|
8
|
-
- .invar/examples/core_shell.py
|
|
9
|
-
- .invar/context.md
|
|
10
|
-
|
|
11
|
-
# System prompt addition
|
|
12
|
-
system-prompt: |
|
|
13
|
-
Follow the Invar Protocol in INVAR.md.
|
|
14
|
-
|
|
15
|
-
## Check-In
|
|
16
|
-
Your first message MUST display:
|
|
17
|
-
✓ Check-In: [project] | [branch] | [clean/dirty]
|
|
18
|
-
|
|
19
|
-
Read .invar/context.md first. Do NOT run guard/map at Check-In.
|
|
20
|
-
This is your sign-in. No visible check-in = Session not started.
|
|
21
|
-
|
|
22
|
-
## Final
|
|
23
|
-
Your last message MUST display:
|
|
24
|
-
✓ Final: guard PASS | 0 errors, 2 warnings
|
|
25
|
-
|
|
26
|
-
Execute: invar guard
|
|
27
|
-
This is your sign-out. Completes the Check-In/Final pair.
|
|
28
|
-
|
|
29
|
-
## Workflow (USBV)
|
|
30
|
-
Understand → Specify → Build → Validate
|
|
31
|
-
Inspect before Contract. Depth varies naturally.
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
# Invar Protocol
|
|
2
|
-
|
|
3
|
-
Follow the Invar Protocol in INVAR.md — includes Check-In, USBV workflow, and Task Completion requirements.
|
|
4
|
-
|
|
5
|
-
## Check-In
|
|
6
|
-
|
|
7
|
-
Your first message MUST display:
|
|
8
|
-
|
|
9
|
-
```
|
|
10
|
-
✓ Check-In: [project] | [branch] | [clean/dirty]
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
Actions:
|
|
14
|
-
1. Read `.invar/context.md` (Key Rules + Current State + Lessons Learned)
|
|
15
|
-
2. Show one-line status
|
|
16
|
-
|
|
17
|
-
**Do NOT execute guard or map at Check-In.**
|
|
18
|
-
Guard is for VALIDATE phase and Final only.
|
|
19
|
-
|
|
20
|
-
This is your sign-in. The user sees it immediately.
|
|
21
|
-
No visible check-in = Session not started.
|
|
22
|
-
|
|
23
|
-
## Final
|
|
24
|
-
|
|
25
|
-
Your last message for an implementation task MUST display:
|
|
26
|
-
|
|
27
|
-
```
|
|
28
|
-
✓ Final: guard PASS | 0 errors, 2 warnings
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
Execute `invar guard` and show this one-line summary.
|
|
32
|
-
|
|
33
|
-
This is your sign-out. Completes the Check-In/Final pair.
|
|
34
|
-
|
|
35
|
-
## Quick Reference
|
|
36
|
-
|
|
37
|
-
- Core (`**/core/**`): @pre/@post contracts, doctests, pure (no I/O)
|
|
38
|
-
- Shell (`**/shell/**`): Result[T, E] return type
|
|
39
|
-
- Workflow: Understand → Specify → Build → Validate (USBV)
|
|
40
|
-
- Inspect before Contract. Depth varies naturally.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|