invar-tools 1.12.0__py3-none-any.whl → 1.15.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/core/feedback.py +110 -0
- invar/shell/claude_hooks.py +49 -0
- invar/shell/commands/feedback.py +258 -0
- invar/shell/commands/guard.py +9 -1
- invar/shell/commands/init.py +118 -38
- invar/shell/pi_tools.py +120 -0
- invar/templates/claude-md/universal/tool-selection.md +110 -0
- invar/templates/config/CLAUDE.md.jinja +2 -0
- invar/templates/hooks/UserPromptSubmit.sh.jinja +31 -0
- invar/templates/hooks/pi/invar.ts.jinja +35 -1
- invar/templates/manifest.toml +8 -0
- invar/templates/pi-tools/invar/index.ts +207 -0
- invar/templates/protocol/python/tools.md +5 -2
- invar/templates/protocol/typescript/tools.md +5 -2
- invar/templates/skills/invar-reflect/CONFIG.md +480 -0
- invar/templates/skills/invar-reflect/SKILL.md +466 -0
- invar/templates/skills/invar-reflect/template.md +343 -0
- {invar_tools-1.12.0.dist-info → invar_tools-1.15.0.dist-info}/METADATA +6 -3
- {invar_tools-1.12.0.dist-info → invar_tools-1.15.0.dist-info}/RECORD +24 -16
- {invar_tools-1.12.0.dist-info → invar_tools-1.15.0.dist-info}/WHEEL +0 -0
- {invar_tools-1.12.0.dist-info → invar_tools-1.15.0.dist-info}/entry_points.txt +0 -0
- {invar_tools-1.12.0.dist-info → invar_tools-1.15.0.dist-info}/licenses/LICENSE +0 -0
- {invar_tools-1.12.0.dist-info → invar_tools-1.15.0.dist-info}/licenses/LICENSE-GPL +0 -0
- {invar_tools-1.12.0.dist-info → invar_tools-1.15.0.dist-info}/licenses/NOTICE +0 -0
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
# Invar Usage Feedback - 2026-01-03
|
|
2
|
+
|
|
3
|
+
**Sessions**: 3 sessions today
|
|
4
|
+
**Total Duration**: 7.5 hours
|
|
5
|
+
**Total Messages**: 107
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Session Timeline
|
|
10
|
+
|
|
11
|
+
### Session 1: 08:30-11:30 (Implement Authentication)
|
|
12
|
+
**Messages**: 40 | **Duration**: 3h
|
|
13
|
+
|
|
14
|
+
Implemented JWT authentication for API endpoints. Main challenge was understanding Core/Shell separation for token validation logic.
|
|
15
|
+
|
|
16
|
+
### Session 2: 13:00-15:30 (Add Tests)
|
|
17
|
+
**Messages**: 35 | **Duration**: 2.5h
|
|
18
|
+
|
|
19
|
+
Added comprehensive test suite with doctests and property tests. Guard verification took longer than expected due to CrossHair timeout issues.
|
|
20
|
+
|
|
21
|
+
### Session 3: 16:00-18:00 (Fix Bugs)
|
|
22
|
+
**Messages**: 32 | **Duration**: 2h
|
|
23
|
+
|
|
24
|
+
Fixed edge cases found in code review. Learning curve improved - fewer contract syntax errors.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## 📊 Tool Usage Statistics
|
|
29
|
+
|
|
30
|
+
| Tool | Calls | Success | Failure | Success Rate |
|
|
31
|
+
|------|-------|---------|---------|--------------|
|
|
32
|
+
| invar_guard | 12 | 10 | 2 | 83.3% |
|
|
33
|
+
| invar_sig | 18 | 18 | 0 | 100% |
|
|
34
|
+
| invar_map | 5 | 5 | 0 | 100% |
|
|
35
|
+
| invar_refs | 3 | 2 | 1 | 66.7% |
|
|
36
|
+
|
|
37
|
+
**Total**: 38 tool calls, 35 successful (92.1% success rate)
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## 😫 Aggregated Pain Points
|
|
42
|
+
|
|
43
|
+
### P1: [Critical] Guard Performance Issues
|
|
44
|
+
|
|
45
|
+
**First seen**: Session 1 (08:30)
|
|
46
|
+
**Last seen**: Session 3 (16:45)
|
|
47
|
+
**Total occurrences**: 12 times across 3 sessions
|
|
48
|
+
|
|
49
|
+
**Session breakdown**:
|
|
50
|
+
- Session 1: 4 times → "Takes 5 minutes to run"
|
|
51
|
+
- Session 2: 5 times → "Timeout on CrossHair verification"
|
|
52
|
+
- Session 3: 3 times → "Still slow even with --changed"
|
|
53
|
+
|
|
54
|
+
**Context**:
|
|
55
|
+
Project has 500+ Python files. Guard takes 3-5 minutes even with `--changed` flag. CrossHair verification frequently times out on complex contract conditions.
|
|
56
|
+
|
|
57
|
+
**Evolution**:
|
|
58
|
+
> Session 1: "5 minutes breaks my flow, totally blocking"
|
|
59
|
+
> Session 3: "Found workaround but still annoying"
|
|
60
|
+
|
|
61
|
+
**Current status**: Unresolved, workaround reduces impact
|
|
62
|
+
|
|
63
|
+
**Workaround**:
|
|
64
|
+
```bash
|
|
65
|
+
invar guard --changed --skip-crosshair # First pass
|
|
66
|
+
invar guard src/core/critical.py # Manual targeted check
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
**Suggested Improvement**:
|
|
70
|
+
- Add incremental verification mode (only changed functions + callers)
|
|
71
|
+
- Show progress bar with ETA during long runs
|
|
72
|
+
- Allow cancellation with partial results
|
|
73
|
+
- Consider caching CrossHair results for unchanged functions
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
### P2: [High] Contract Syntax Confusion
|
|
78
|
+
|
|
79
|
+
**First seen**: Session 1 (08:45)
|
|
80
|
+
**Last seen**: Session 2 (14:20)
|
|
81
|
+
**Total occurrences**: 7 times across 2 sessions
|
|
82
|
+
|
|
83
|
+
**Session breakdown**:
|
|
84
|
+
- Session 1: 5 errors → Learning phase
|
|
85
|
+
- Session 2: 2 errors → Improving
|
|
86
|
+
- Session 3: 0 errors → Learned! ✓
|
|
87
|
+
|
|
88
|
+
**Context**:
|
|
89
|
+
Confusion about lambda parameter requirements in `@pre`/`@post` decorators. Error messages didn't clearly explain that lambda must include ALL parameters including defaults.
|
|
90
|
+
|
|
91
|
+
**What I tried** (wrong):
|
|
92
|
+
```python
|
|
93
|
+
@pre(lambda x: x >= 0) # Missing y parameter!
|
|
94
|
+
def calc(x: int, y: int = 0):
|
|
95
|
+
...
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
**What worked**:
|
|
99
|
+
```python
|
|
100
|
+
@pre(lambda x, y=0: x >= 0) # Include defaults
|
|
101
|
+
def calc(x: int, y: int = 0):
|
|
102
|
+
...
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
**Evolution**: **RESOLVED** through practice and better error messages in latest Guard version
|
|
106
|
+
|
|
107
|
+
**Suggested Improvement**:
|
|
108
|
+
- Show example in error message: "Did you forget parameters? Try: @pre(lambda x, y=0: ...)"
|
|
109
|
+
- Add to INVAR.md Critical Rules with prominent placement
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
### P3: [Medium] Core/Shell Decision Unclear
|
|
114
|
+
|
|
115
|
+
**First seen**: Session 1 (09:15)
|
|
116
|
+
**Last seen**: Session 3 (17:00)
|
|
117
|
+
**Total occurrences**: 5 times across 3 sessions
|
|
118
|
+
|
|
119
|
+
**Session breakdown**:
|
|
120
|
+
- Session 1: 3 decisions, ~15 min each → Re-read docs multiple times
|
|
121
|
+
- Session 2: 1 decision, ~5 min → Pattern becoming clearer
|
|
122
|
+
- Session 3: 1 decision, ~2 min → Faster decisions
|
|
123
|
+
|
|
124
|
+
**Context**:
|
|
125
|
+
Edge cases not covered in documentation:
|
|
126
|
+
- Function accepting `Path` parameter but not reading it
|
|
127
|
+
- Functions using `datetime.now()` or `random`
|
|
128
|
+
- Logging/stderr output
|
|
129
|
+
|
|
130
|
+
**Decision Pattern**:
|
|
131
|
+
| Function | My Guess | Actual | Time Spent |
|
|
132
|
+
|----------|----------|--------|------------|
|
|
133
|
+
| validate_path(p: Path) | Core? | Core ✓ | 5 min |
|
|
134
|
+
| read_config(p: Path) | Shell | Shell ✓ | 2 min |
|
|
135
|
+
| log_error(msg: str) | ??? | Shell | 15 min (re-read docs) |
|
|
136
|
+
| format_timestamp(dt) | Core? | Core ✓ | 3 min |
|
|
137
|
+
|
|
138
|
+
**Current status**: Ongoing learning, improving with experience
|
|
139
|
+
|
|
140
|
+
**Suggested Improvement**:
|
|
141
|
+
- Decision flowchart in INVAR.md
|
|
142
|
+
- More edge case examples in `.invar/examples/core_shell.py`
|
|
143
|
+
- Guard could hint: "This looks like Shell (uses logging)"
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
147
|
+
## ✅ What Worked Well
|
|
148
|
+
|
|
149
|
+
### 1. `invar_sig` for quick contract lookup
|
|
150
|
+
|
|
151
|
+
**Usage**: 18 times (most used tool)
|
|
152
|
+
**Success**: 100%
|
|
153
|
+
|
|
154
|
+
**Why it worked**:
|
|
155
|
+
- Instant feedback - no need to read full file
|
|
156
|
+
- Clear output format - contracts highlighted
|
|
157
|
+
- Fast - <1s response time
|
|
158
|
+
|
|
159
|
+
**Typical workflow**:
|
|
160
|
+
```bash
|
|
161
|
+
invar sig src/core/parser.py # See all contracts
|
|
162
|
+
# Spot the function I need
|
|
163
|
+
# Copy contract pattern
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
**User experience**:
|
|
167
|
+
> "This is my go-to tool. Saves tons of time vs opening files. I now check contracts before writing any Core function."
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
### 2. Guard auto-fix suggestions
|
|
172
|
+
|
|
173
|
+
**Fixed automatically**: 5 issues
|
|
174
|
+
- 3x `missing_contract` → Guard suggested contracts based on type signatures
|
|
175
|
+
- 2x `redundant_type_contract` → Guard explained semantic constraint needed
|
|
176
|
+
|
|
177
|
+
**User experience**:
|
|
178
|
+
> "When Guard suggests fixes, I learn the pattern. By the 3rd similar error, I stopped making that mistake. The suggestions are educational, not just fixes."
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
### 3. Contract-first workflow (USBV)
|
|
183
|
+
|
|
184
|
+
**Followed**: Understand → Specify → Build → Validate
|
|
185
|
+
**Result**: 0 contract violations caught by CrossHair in Session 3
|
|
186
|
+
|
|
187
|
+
**User experience**:
|
|
188
|
+
> "Writing contracts before code felt slow at first (Session 1), but by Session 3, Guard caught zero violations. Saved debugging time. The upfront investment paid off."
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## 🤔 Confusion Points
|
|
193
|
+
|
|
194
|
+
### 1. @post cannot access parameters
|
|
195
|
+
|
|
196
|
+
**What I tried** (wrong):
|
|
197
|
+
```python
|
|
198
|
+
@pre(lambda x: x > 0)
|
|
199
|
+
@post(lambda result: result > x) # ERROR: 'x' not available!
|
|
200
|
+
def double(x: int) -> int:
|
|
201
|
+
return x * 2
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
**Error**:
|
|
205
|
+
```
|
|
206
|
+
NameError: name 'x' is not defined
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
**What worked**:
|
|
210
|
+
```python
|
|
211
|
+
@pre(lambda x: x > 0)
|
|
212
|
+
@post(lambda result: result >= 0) # Only access 'result'
|
|
213
|
+
def double(x: int) -> int:
|
|
214
|
+
return x * 2
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
**Gap**: CLAUDE.md "Contract Rules" section mentions this, but I skimmed it and missed the detail. Could be more prominent.
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
### 2. Deal vs invar_runtime contracts
|
|
222
|
+
|
|
223
|
+
**Confusion**: When to use `from deal import pre` vs `from invar_runtime import pre`?
|
|
224
|
+
|
|
225
|
+
**What I learned** (after trial and error):
|
|
226
|
+
- `deal.pre` → Lambda-based contracts: `@pre(lambda x: x > 0)`
|
|
227
|
+
- `invar_runtime.pre` → Pre-built contract objects: `@pre(NonEmpty())`
|
|
228
|
+
|
|
229
|
+
**Gap**: This distinction not explained in INVAR.md "Critical Rules" section. Found it in examples after searching.
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## 🔄 Workarounds Used
|
|
234
|
+
|
|
235
|
+
| Issue | Workaround | Frequency |
|
|
236
|
+
|-------|------------|-----------|
|
|
237
|
+
| Guard timeout | `--changed` + manual spot checks | 12 times |
|
|
238
|
+
| Core/Shell confusion | Copy from examples instead of thinking | 5 times |
|
|
239
|
+
| Contract syntax | Copy-paste from `.invar/examples/` | 7 times (Sessions 1-2) |
|
|
240
|
+
|
|
241
|
+
---
|
|
242
|
+
|
|
243
|
+
## 💡 Improvement Suggestions
|
|
244
|
+
|
|
245
|
+
### High Priority
|
|
246
|
+
|
|
247
|
+
1. **Incremental Guard mode**
|
|
248
|
+
- Problem: Full project scan too slow (3-5 minutes)
|
|
249
|
+
- Solution: Only verify changed functions + their callers
|
|
250
|
+
- Benefit: 10x speedup for iterative development
|
|
251
|
+
|
|
252
|
+
2. **Contextual error messages**
|
|
253
|
+
- Problem: Errors say WHAT but not HOW
|
|
254
|
+
- Solution: Include example link + fix hint in error
|
|
255
|
+
- Benefit: Reduce "search for examples" friction
|
|
256
|
+
|
|
257
|
+
3. **Core/Shell decision tree**
|
|
258
|
+
- Problem: Edge cases unclear
|
|
259
|
+
- Solution: Flowchart in INVAR.md + more examples
|
|
260
|
+
- Benefit: Faster decisions, less re-reading
|
|
261
|
+
|
|
262
|
+
### Medium Priority
|
|
263
|
+
|
|
264
|
+
4. **Interactive tutorial for first-time users**
|
|
265
|
+
- Problem: Learning curve steep (Session 1 had 5 contract errors)
|
|
266
|
+
- Solution: `invar tutorial` command with guided examples
|
|
267
|
+
- Benefit: Faster onboarding
|
|
268
|
+
|
|
269
|
+
5. **Guard progress indicator**
|
|
270
|
+
- Problem: No feedback during long runs (anxiety-inducing)
|
|
271
|
+
- Solution: Show "Checking file 45/120..." with ETA
|
|
272
|
+
- Benefit: Less anxiety, can estimate wait time
|
|
273
|
+
|
|
274
|
+
6. **Contract snippet library**
|
|
275
|
+
- Problem: Repetitive contract patterns (e.g., "non-empty string")
|
|
276
|
+
- Solution: `invar snippet list` with common patterns
|
|
277
|
+
- Benefit: Copy-paste correct patterns quickly
|
|
278
|
+
|
|
279
|
+
### Low Priority
|
|
280
|
+
|
|
281
|
+
7. **Guard performance dashboard**
|
|
282
|
+
- Problem: Can't see what's slow
|
|
283
|
+
- Solution: `--profile` flag showing time per rule/file
|
|
284
|
+
- Benefit: Optimize workflow, identify bottlenecks
|
|
285
|
+
|
|
286
|
+
---
|
|
287
|
+
|
|
288
|
+
## 📈 Daily Summary
|
|
289
|
+
|
|
290
|
+
### High-Frequency Issues (Top 3)
|
|
291
|
+
1. **Guard performance** - 12 occurrences, still blocking
|
|
292
|
+
2. **Contract syntax** - 7 occurrences, now resolved ✓
|
|
293
|
+
3. **Core/Shell decision** - 5 occurrences, ongoing learning
|
|
294
|
+
|
|
295
|
+
### Learning Progress
|
|
296
|
+
| Issue | Session 1 | Session 2 | Session 3 | Trend |
|
|
297
|
+
|-------|-----------|-----------|-----------|-------|
|
|
298
|
+
| Contract syntax | 5 errors | 2 errors | 0 errors | ✅ Learned |
|
|
299
|
+
| Core/Shell | Confused (15 min) | Still unsure (5 min) | Clearer (2 min) | 📈 Improving |
|
|
300
|
+
| Guard usage | Blocked | Found workaround | Using workaround | ⚠️ Not fixed |
|
|
301
|
+
|
|
302
|
+
### Sentiment Evolution
|
|
303
|
+
- **Morning (Session 1)**: Frustrated (Guard blocks progress, contract errors)
|
|
304
|
+
- **Afternoon (Session 2)**: Adapting (workarounds found, fewer errors)
|
|
305
|
+
- **Evening (Session 3)**: Productive (main friction remains but manageable)
|
|
306
|
+
|
|
307
|
+
---
|
|
308
|
+
|
|
309
|
+
## 🎯 Session Success Metrics
|
|
310
|
+
|
|
311
|
+
| Metric | Value | Assessment |
|
|
312
|
+
|--------|-------|------------|
|
|
313
|
+
| Task completed | ✅ Yes | Success |
|
|
314
|
+
| Guard final pass | ✅ 0 errors | Success |
|
|
315
|
+
| Time to first Guard pass | 2.5 hours | Could be faster |
|
|
316
|
+
| Stuck on Invar issues | ~45 min total | Acceptable |
|
|
317
|
+
| Would recommend Invar | ✅ Yes | Positive overall |
|
|
318
|
+
|
|
319
|
+
---
|
|
320
|
+
|
|
321
|
+
## 📝 Additional Notes
|
|
322
|
+
|
|
323
|
+
- First time using `invar refs` - worked great for finding TypeScript symbol usage
|
|
324
|
+
- Didn't use `invar map` much this session - not sure when it's better than `invar sig`
|
|
325
|
+
- Skill system (`/develop`, `/review`) works smoothly - no issues
|
|
326
|
+
- USBV workflow feels natural by Session 3 - initial friction worth it
|
|
327
|
+
|
|
328
|
+
---
|
|
329
|
+
|
|
330
|
+
## 🔒 Privacy Notice
|
|
331
|
+
|
|
332
|
+
This feedback document is stored locally in `.invar/feedback/`.
|
|
333
|
+
You control what (if anything) to share with Invar maintainers.
|
|
334
|
+
|
|
335
|
+
**To share feedback**:
|
|
336
|
+
1. Review this document
|
|
337
|
+
2. Remove any sensitive project details
|
|
338
|
+
3. Submit via GitHub issue or email to invar-maintainers@example.com
|
|
339
|
+
|
|
340
|
+
---
|
|
341
|
+
|
|
342
|
+
*Generated by `/invar-reflect` v1.0*
|
|
343
|
+
*Last updated: 2026-01-03 18:15*
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: invar-tools
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.15.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
|
|
@@ -190,8 +190,9 @@ cd your-project
|
|
|
190
190
|
uvx invar-tools init
|
|
191
191
|
|
|
192
192
|
# Or quick setup (skip prompts)
|
|
193
|
-
uvx invar-tools init --claude # Claude Code
|
|
194
|
-
uvx invar-tools init --pi # Pi
|
|
193
|
+
uvx invar-tools init --claude # Claude Code only
|
|
194
|
+
uvx invar-tools init --pi # Pi only
|
|
195
|
+
uvx invar-tools init --claude --pi # Both agents (DX-81)
|
|
195
196
|
uvx invar-tools init --mcp-only # MCP tools only (legacy projects)
|
|
196
197
|
|
|
197
198
|
# Add runtime contracts to your project
|
|
@@ -492,6 +493,7 @@ AlphaCodium · Parsel · Reflexion · Clover
|
|
|
492
493
|
|-------|--------|-------|
|
|
493
494
|
| **Claude Code** | ✅ Full | `invar init --claude` |
|
|
494
495
|
| **[Pi](https://shittycodingagent.ai/)** | ✅ Full | `invar init --pi` |
|
|
496
|
+
| **Multi-Agent** | ✅ Full | `invar init --claude --pi` (DX-81) |
|
|
495
497
|
| **Cursor** | ✅ MCP | `invar init` → select Other, add MCP config |
|
|
496
498
|
| **Other** | 📝 Manual | `invar init` → select Other, include `AGENT.md` in prompt |
|
|
497
499
|
|
|
@@ -821,6 +823,7 @@ rules = ["missing_contract", "shell_result"]
|
|
|
821
823
|
| `invar init` | Initialize or update project (interactive) |
|
|
822
824
|
| `invar init --claude` | Quick setup for Claude Code |
|
|
823
825
|
| `invar init --pi` | Quick setup for Pi agent |
|
|
826
|
+
| `invar init --claude --pi` | Setup for both agents (DX-81) |
|
|
824
827
|
| `invar init --mcp-only` | MCP tools only (no framework files) |
|
|
825
828
|
| `invar uninstall` | Remove Invar from project (preserves user content) |
|
|
826
829
|
| `invar sig <file>` | Show signatures and contracts |
|
|
@@ -6,6 +6,7 @@ invar/core/doc_edit.py,sha256=kLBkSQMFiXKdZMlQYAy-pzld1f1p2UFKGpKVVJo8Nes,6690
|
|
|
6
6
|
invar/core/doc_parser.py,sha256=yzZKzgr9myUiiRGtRidT2tubrs4-omtGlTwbUkSKhoM,18197
|
|
7
7
|
invar/core/entry_points.py,sha256=1p6GRGTp9kA9spNkGKidFLlzLPheh6JO2XFb68Cr0sE,12209
|
|
8
8
|
invar/core/extraction.py,sha256=mScqEMEEQdsd-Z0jx9g3scK6Z1vI9l-ESjggXPIWHZ4,6112
|
|
9
|
+
invar/core/feedback.py,sha256=JhQf32y_Qutza8D2b5qX2U4fM--vtR3sBdV22KrVNY0,3246
|
|
9
10
|
invar/core/format_specs.py,sha256=P299aRHFMXyow8STwsvaT6Bg2ALPs2wSy7SByiRZZ-A,5610
|
|
10
11
|
invar/core/format_strategies.py,sha256=LifL97JbsF8WEkVNmQpq2htyFUC3pW21myAjtRGpSxU,5774
|
|
11
12
|
invar/core/formatter.py,sha256=rCGZhMpl4dPLrztgKDkNtAvnv2vKfomyIHl_6fThuno,11293
|
|
@@ -58,7 +59,7 @@ invar/node_tools/fc-runner/cli.js,sha256=72_gIhvnx2peKITdzdnFWI5fzGaNTS3BcEqyS62
|
|
|
58
59
|
invar/node_tools/quick-check/cli.js,sha256=dwV3hdJleFQga2cKUn3PPfQDvvujhzKdjQcIvWsKgM0,66196
|
|
59
60
|
invar/node_tools/ts-analyzer/cli.js,sha256=SvZ6HyjmobpP8NAZqXFiy8BwH_t5Hb17Ytar_18udaQ,4092887
|
|
60
61
|
invar/shell/__init__.py,sha256=FFw1mNbh_97PeKPcHIqQpQ7mw-JoIvyLM1yOdxLw5uk,204
|
|
61
|
-
invar/shell/claude_hooks.py,sha256=
|
|
62
|
+
invar/shell/claude_hooks.py,sha256=hV4DfG3cVng32f0Rxoo070tliVlYFC5v9slIWEbAD7E,18899
|
|
62
63
|
invar/shell/config.py,sha256=6-kbo6--SxfROXoyU-v7InSLR8f_U1Mar_xEOdCXFkY,17633
|
|
63
64
|
invar/shell/contract_coverage.py,sha256=81OQkQqUVYUKytG5aiJyRK62gwh9UzbSG926vkvFTc8,12088
|
|
64
65
|
invar/shell/coverage.py,sha256=m01o898IFIdBztEBQLwwL1Vt5PWrpUntO4lv4nWEkls,11344
|
|
@@ -71,6 +72,7 @@ invar/shell/mcp_config.py,sha256=-hC7Y5BGuVs285b6gBARk7ZyzVxHwPgXSyt_GoN0jfs,458
|
|
|
71
72
|
invar/shell/mutation.py,sha256=Lfyk2b8j8-hxAq-iwAgQeOhr7Ci6c5tRF1TXe3CxQCs,8914
|
|
72
73
|
invar/shell/pattern_integration.py,sha256=pRcjfq3NvMW_tvQCnaXZnD1k5AVEWK8CYOE2jN6VTro,7842
|
|
73
74
|
invar/shell/pi_hooks.py,sha256=ulZc1sP8mTRJTBsjwFHQzUgg-h8ajRIMp7iF1Y4UUtw,6885
|
|
75
|
+
invar/shell/pi_tools.py,sha256=_xTxE3zeEWSUm3IuuMziglkB_nL8NIco7kQ2nZkCMLU,3668
|
|
74
76
|
invar/shell/property_tests.py,sha256=N9JreyH5PqR89oF5yLcX7ZAV-Koyg5BKo-J05-GUPsA,9109
|
|
75
77
|
invar/shell/py_refs.py,sha256=Vjz50lmt9prDBcBv4nkkODdiJ7_DKu5zO4UPZBjAfmM,4638
|
|
76
78
|
invar/shell/skill_manager.py,sha256=Mr7Mh9rxPSKSAOTJCAM5ZHiG5nfUf6KQVCuD4LBNHSI,12440
|
|
@@ -81,9 +83,10 @@ invar/shell/testing.py,sha256=rTNBH0Okh2qtG9ohSXOz487baQ2gXrWT3s_WECW3HJs,11143
|
|
|
81
83
|
invar/shell/ts_compiler.py,sha256=nA8brnOhThj9J_J3vAEGjDsM4NjbWQ_eX8Yf4pHPOgk,6672
|
|
82
84
|
invar/shell/commands/__init__.py,sha256=MEkKwVyjI9DmkvBpJcuumXo2Pg_FFkfEr-Rr3nrAt7A,284
|
|
83
85
|
invar/shell/commands/doc.py,sha256=SOLDoCXXGxx_JU0PKXlAIGEF36PzconHmmAtL-rM6D4,13819
|
|
84
|
-
invar/shell/commands/
|
|
86
|
+
invar/shell/commands/feedback.py,sha256=lLxEeWW_71US_vlmorFrGXS8IARB9nbV6D0zruLs660,7640
|
|
87
|
+
invar/shell/commands/guard.py,sha256=xTQ8cPp-x1xMCtufKxmMNUSpIpH31uUjziAB8ifCnC0,24837
|
|
85
88
|
invar/shell/commands/hooks.py,sha256=W-SOnT4VQyUvXwipozkJwgEYfiOJGz7wksrbcdWegUg,2356
|
|
86
|
-
invar/shell/commands/init.py,sha256
|
|
89
|
+
invar/shell/commands/init.py,sha256=vaPo0p7xBm3Nfgu9ytcvAjgk4dQBKvyEhrz_Cg1URMQ,23557
|
|
87
90
|
invar/shell/commands/merge.py,sha256=nuvKo8m32-OL-SCQlS4SLKmOZxQ3qj-1nGCx1Pgzifw,8183
|
|
88
91
|
invar/shell/commands/mutate.py,sha256=GwemiO6LlbGCBEQsBFnzZuKhF-wIMEl79GAMnKUWc8U,5765
|
|
89
92
|
invar/shell/commands/perception.py,sha256=HewSv6Kv8Gw2UQqkGY2rP5YKlnwyC3LBrQ2hFVXXw30,19304
|
|
@@ -102,7 +105,7 @@ invar/shell/prove/hypothesis.py,sha256=QUclOOUg_VB6wbmHw8O2EPiL5qBOeBRqQeM04AVuL
|
|
|
102
105
|
invar/templates/CLAUDE.md.template,sha256=eaGU3SyRO_NEifw5b26k3srgQH4jyeujjCJ-HbM36_w,4913
|
|
103
106
|
invar/templates/__init__.py,sha256=cb3ht8KPK5oBn5oG6HsTznujmo9WriJ_P--fVxJwycc,45
|
|
104
107
|
invar/templates/context.md.template,sha256=FKyI1ghpqcf4wftyv9-auIFHor8Nm8lETN45Ja-L8Og,2386
|
|
105
|
-
invar/templates/manifest.toml,sha256=
|
|
108
|
+
invar/templates/manifest.toml,sha256=2S_pmyH4bcsJEeSbrIJVfkso4mPu5wHDHgy48uTzyK0,4981
|
|
106
109
|
invar/templates/proposal.md.template,sha256=UP7SpQ7gk8jVlHGLQCSQ5c-kCj1DBQEz8M-vEStK77I,1573
|
|
107
110
|
invar/templates/claude-md/python/critical-rules.md,sha256=Pkw6ZXFtAN2WGOeTD0CwkB_T73fd66NGzdOFM0wn-80,895
|
|
108
111
|
invar/templates/claude-md/python/quick-reference.md,sha256=ttd0TwgyIY0qt6qbeaCn4GO0e2OKedFLQE3yG32SlrA,672
|
|
@@ -110,11 +113,12 @@ invar/templates/claude-md/typescript/critical-rules.md,sha256=wC8EsPMR6R5sEAi6a3
|
|
|
110
113
|
invar/templates/claude-md/typescript/quick-reference.md,sha256=JtuUOrExY3TURZwc8vZA0t83etYL6ci1d7AqjUkUM3U,695
|
|
111
114
|
invar/templates/claude-md/universal/check-in.md,sha256=EUlpig5Cp0MRctlx7U49Ia7lEHkZriFXWj4-qHkDmTU,616
|
|
112
115
|
invar/templates/claude-md/universal/skills.md,sha256=O0JgCQNzUTEGAsGYTZg0HoBTffn-pRxQV6iso4MTUuc,2584
|
|
116
|
+
invar/templates/claude-md/universal/tool-selection.md,sha256=QJcxDmXE6atiRU3d-Autm3q5gOedBumG_foikcIiG8o,3707
|
|
113
117
|
invar/templates/claude-md/universal/workflow.md,sha256=MatlbihubRg9zAjjuR331PSJ9xwMCusUVfbc86YEVoE,1966
|
|
114
118
|
invar/templates/commands/audit.md.jinja,sha256=Gwh3LNNcNWHzsOC7chYYg5ym8BxWTjySain3qPOs8pM,4817
|
|
115
119
|
invar/templates/commands/guard.md,sha256=N_C_AXd9kI85W1B0aTEycjiDp_jdaP8eeq8O0FQ_WQ8,1227
|
|
116
120
|
invar/templates/config/AGENT.md.jinja,sha256=tBIK5kZ7hjWgABU96Yq5_w3gNw_F31gQ19h4u1MLY4o,7037
|
|
117
|
-
invar/templates/config/CLAUDE.md.jinja,sha256
|
|
121
|
+
invar/templates/config/CLAUDE.md.jinja,sha256=Mr3Q6B5ojczLlHmxLO8xnoHNDS2oqWoswdMi69X_oHc,1792
|
|
118
122
|
invar/templates/config/context.md.jinja,sha256=BZnqBg_CXz3QFiCc8rfG8Kav_BGaGmSqxATKMliMA7k,3911
|
|
119
123
|
invar/templates/config/pre-commit.yaml.jinja,sha256=nUPxLxkTHAgZwhFAuOMDbZ8v0NQV9FlQPbr2MDEOsoA,1778
|
|
120
124
|
invar/templates/examples/python/README.md,sha256=mBsWKgQOF_PMQ_rf91TTjAEHpwfnb8Bb3x80D82bNZE,703
|
|
@@ -132,23 +136,24 @@ invar/templates/examples/typescript/workflow.md,sha256=5byADjA3WgOgiDbkEtVRKKGvl
|
|
|
132
136
|
invar/templates/hooks/PostToolUse.sh.jinja,sha256=JHJGMdF3xp2qEqkPC9GaLp0NCa5gdRzqAmgRy4IldBg,3428
|
|
133
137
|
invar/templates/hooks/PreToolUse.sh.jinja,sha256=tZb-FGFxOBtTprUfeChau7rZOMPII69_5HSF-i_WD4Q,3558
|
|
134
138
|
invar/templates/hooks/Stop.sh.jinja,sha256=SD0PhBPeun7DTvn8Erbz11PBGAwGby4tMTd97yOJuTQ,981
|
|
135
|
-
invar/templates/hooks/UserPromptSubmit.sh.jinja,sha256=
|
|
139
|
+
invar/templates/hooks/UserPromptSubmit.sh.jinja,sha256=5xs-ASw8s_tHLvtA30nm5J7PhbpIML-8Hhv-QTTuhKY,3981
|
|
136
140
|
invar/templates/hooks/__init__.py,sha256=RnnMoQA-8eqbr8Y_1Vu9B8h5vAz4C-vmo8wgdcGYrz0,43
|
|
137
|
-
invar/templates/hooks/pi/invar.ts.jinja,sha256=
|
|
141
|
+
invar/templates/hooks/pi/invar.ts.jinja,sha256=WLEYwO8tvdu9RakxFtcVRuBmaE3HgRAUFf9T5OmgP0s,4027
|
|
138
142
|
invar/templates/onboard/assessment.md.jinja,sha256=EzqF0VUcxJZG2bVJLxTOyQlAERRbh9v9hXKVt6vcbxY,5850
|
|
139
143
|
invar/templates/onboard/roadmap.md.jinja,sha256=gmvZk4Hdwe0l3qSFV15QGcsr-OPMhsc6-1K9F2SFSIQ,3939
|
|
140
144
|
invar/templates/onboard/patterns/python.md,sha256=3wwucAcQz0DlggtpqYo-ZCnmrXgBQ0aBgUHN_EZ1VW0,8681
|
|
141
145
|
invar/templates/onboard/patterns/typescript.md,sha256=yOVfHtdAdjKkWNh66_dR7z2xEA4sggbIcCKthW-fqac,11983
|
|
146
|
+
invar/templates/pi-tools/invar/index.ts,sha256=fhE3aGKk5VYcUdbeVMv-x3tqWHA0eVU641pytY06Bvg,6694
|
|
142
147
|
invar/templates/protocol/INVAR.md.jinja,sha256=t2ZIQZJvzDTJMrRw_ijUo6ScZmeNK0-nV-H7ztTIyQQ,1464
|
|
143
148
|
invar/templates/protocol/python/architecture-examples.md,sha256=O96LH9WFpk7G9MrhSbifLS5pyibTIDG-_EGFF7g3V4M,1175
|
|
144
149
|
invar/templates/protocol/python/contracts-syntax.md,sha256=Q6supTQ3tChVrlN7xhcdb3Q8VGIESxQLA-mQvrNIZmo,1162
|
|
145
150
|
invar/templates/protocol/python/markers.md,sha256=fzltCKbdPVz_vCuJFiQ9pbRPztvpMJpSf_4aFHcXFLM,1223
|
|
146
|
-
invar/templates/protocol/python/tools.md,sha256=
|
|
151
|
+
invar/templates/protocol/python/tools.md,sha256=RULbZhisRxNI1oTxYzhWI3NTVyKNukrkQbwR5XWQt2Y,1043
|
|
147
152
|
invar/templates/protocol/python/troubleshooting.md,sha256=-JHLUOxvfQeSrLpqKrxUXQ5UrkW44AHFr3LGHwxnw7w,1081
|
|
148
153
|
invar/templates/protocol/typescript/architecture-examples.md,sha256=Dej-DI6OqRVsbzjukjOqdO8WEz0aT-1iwYqrah2B_xk,1454
|
|
149
154
|
invar/templates/protocol/typescript/contracts-syntax.md,sha256=yKyM6WhyF5p-bt-RqD5SI4ZZudE7bLLFTAMzVSa74QE,1610
|
|
150
155
|
invar/templates/protocol/typescript/markers.md,sha256=8mHzYfBlQ2baeQSV2e7uY2p6_EW1rwKVjToTLiQwUrQ,1536
|
|
151
|
-
invar/templates/protocol/typescript/tools.md,sha256=
|
|
156
|
+
invar/templates/protocol/typescript/tools.md,sha256=c0xu0n15iFcNAET8wOqKdcgG2n_OC0hP4xE7rZaFDI0,1691
|
|
152
157
|
invar/templates/protocol/typescript/troubleshooting.md,sha256=kHx4Ykfgv6S1OXMmLZ3jMft6aqy60c9ODEhfs5kcybo,2588
|
|
153
158
|
invar/templates/protocol/universal/architecture.md,sha256=WT6wL0VDPD4n8yXBQEOXXnzh2IkK18oOt76lZelN3As,1379
|
|
154
159
|
invar/templates/protocol/universal/completion.md,sha256=bFo8-Npa7vb1efQLgOdGDSWnho45f0BBxvaD8awFLus,425
|
|
@@ -170,13 +175,16 @@ invar/templates/skills/extensions/security/SKILL.md,sha256=5mLwf4JP82Wq1vKkDIJwi
|
|
|
170
175
|
invar/templates/skills/extensions/security/patterns/_common.yaml,sha256=75BvSABWUtO1VXFvdsMgqi86J1759T4ROhYYcizSygQ,3680
|
|
171
176
|
invar/templates/skills/extensions/security/patterns/python.yaml,sha256=osyR8mWiyjW6tWjZA7QZfBIiim7XqgBYnrE45ktDx50,4658
|
|
172
177
|
invar/templates/skills/extensions/security/patterns/typescript.yaml,sha256=qDEg-sxSE63Bis2IZG1y4L8m8g2ZYkC29o6t-J_LmUo,5508
|
|
178
|
+
invar/templates/skills/invar-reflect/CONFIG.md,sha256=G8KVNROQIm7CvjrB7cwzOANQOfJg3-1_0zRVZR1sX44,12852
|
|
179
|
+
invar/templates/skills/invar-reflect/SKILL.md,sha256=z0Nyh9JasZr70XhE9Es7IslxL3C8wH2lf8RewQi4Lbs,11285
|
|
180
|
+
invar/templates/skills/invar-reflect/template.md,sha256=Rr5hvbllvmd8jSLf_0ZjyKt6KOod0RlNdCtZJ3lYjiM,10470
|
|
173
181
|
invar/templates/skills/investigate/SKILL.md.jinja,sha256=cp6TBEixBYh1rLeeHOR1yqEnFqv1NZYePORMnavLkQI,3231
|
|
174
182
|
invar/templates/skills/propose/SKILL.md.jinja,sha256=6BuKiCqO1AEu3VtzMHy1QWGqr_xqG9eJlhbsKT4jev4,3463
|
|
175
183
|
invar/templates/skills/review/SKILL.md.jinja,sha256=ET5mbdSe_eKgJbi2LbgFC-z1aviKcHOBw7J5Q28fr4U,14105
|
|
176
|
-
invar_tools-1.
|
|
177
|
-
invar_tools-1.
|
|
178
|
-
invar_tools-1.
|
|
179
|
-
invar_tools-1.
|
|
180
|
-
invar_tools-1.
|
|
181
|
-
invar_tools-1.
|
|
182
|
-
invar_tools-1.
|
|
184
|
+
invar_tools-1.15.0.dist-info/METADATA,sha256=Xm0Suh3a3jfCfDBqzsuYpuVRwT4dWxRF5-PnZDMgYas,28595
|
|
185
|
+
invar_tools-1.15.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
186
|
+
invar_tools-1.15.0.dist-info/entry_points.txt,sha256=RwH_EhqgtFPsnO6RcrwrAb70Zyfb8Mh6uUtztWnUxGk,102
|
|
187
|
+
invar_tools-1.15.0.dist-info/licenses/LICENSE,sha256=qeFksp4H4kfTgQxPCIu3OdagXyiZcgBlVfsQ6M5oFyk,10767
|
|
188
|
+
invar_tools-1.15.0.dist-info/licenses/LICENSE-GPL,sha256=IvZfC6ZbP7CLjytoHVzvpDZpD-Z3R_qa1GdMdWlWQ6Q,35157
|
|
189
|
+
invar_tools-1.15.0.dist-info/licenses/NOTICE,sha256=joEyMyFhFY8Vd8tTJ-a3SirI0m2Sd0WjzqYt3sdcglc,2561
|
|
190
|
+
invar_tools-1.15.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|