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.
@@ -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.12.0
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 Coding Agent
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=I_2VEepwS0kW55lW7U--FPwpuJq5hAXECcyYCd9D-jM,17360
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/guard.py,sha256=p0kI63RUzC1OTh_YviviY6dz2bq_SoBksGOp2NyocQM,24512
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=-FZTYTwJr_NRoluAM4YwcseNju56GSxtnKVkqsXREPg,20461
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=UzLXcLPrRq9-99wdEMEGAHo_YWMordyDLjLhgkJPeZE,4500
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=-cnl2yU3n4xP3nACEvmk2DK7ptniymQrS3eBUnGAj34,1737
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=sUsqBiXzIEM3C8NdN4s4C7KqPlamyVhk5_-3zd5TC9Y,2621
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=0V7kBxPfXx18wGbZRT4F1CcuaK09oHh2IJll62N4XVM,2620
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=LBFh-6vW-MMbyxU3qYr9m7edqKELUKsfPcICZ5S76yU,896
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=S_LG-o2X8fAudAcWYV41doIMYoFXUKyFvcff0keF_CI,1537
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.12.0.dist-info/METADATA,sha256=jpbC0FFokpDTexuAf5nodUMsRM46nU5-ZC0SmVVN5cQ,28409
177
- invar_tools-1.12.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
178
- invar_tools-1.12.0.dist-info/entry_points.txt,sha256=RwH_EhqgtFPsnO6RcrwrAb70Zyfb8Mh6uUtztWnUxGk,102
179
- invar_tools-1.12.0.dist-info/licenses/LICENSE,sha256=qeFksp4H4kfTgQxPCIu3OdagXyiZcgBlVfsQ6M5oFyk,10767
180
- invar_tools-1.12.0.dist-info/licenses/LICENSE-GPL,sha256=IvZfC6ZbP7CLjytoHVzvpDZpD-Z3R_qa1GdMdWlWQ6Q,35157
181
- invar_tools-1.12.0.dist-info/licenses/NOTICE,sha256=joEyMyFhFY8Vd8tTJ-a3SirI0m2Sd0WjzqYt3sdcglc,2561
182
- invar_tools-1.12.0.dist-info/RECORD,,
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,,