universal-agent-memory 2.3.0 → 2.6.0

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.
@@ -125,7 +125,7 @@ async function buildContext(analysis, config) {
125
125
  // Build relevant patterns (pruned by project type to save tokens)
126
126
  const relevantPatterns = buildRelevantPatterns(analysis);
127
127
  // Template version for reproducibility
128
- const TEMPLATE_VERSION = '10.17-opt';
128
+ const TEMPLATE_VERSION = '10.18-opt';
129
129
  return {
130
130
  // Project basics
131
131
  PROJECT_NAME: analysis.projectName || config.project.name,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "universal-agent-memory",
3
- "version": "2.3.0",
3
+ "version": "2.6.0",
4
4
  "description": "Universal AI agent memory system - CLAUDE.md templates, memory, worktrees for Claude Code, Factory.AI, VSCode, OpenCode",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -1,7 +1,10 @@
1
- <!-- CLAUDE.md v2.3.0 - 39 Model Outcome Success Optimizations -->
1
+ <!-- CLAUDE.md v2.6.0 - 54 Model Outcome Success Optimizations -->
2
2
  <!-- Optimizations #22-27: Template Compression, Structured Iteration, Inline Domain Knowledge, Early Impossibility Exit, Conditional Context, Remove Emphasis Theater -->
3
3
  <!-- Optimizations #28-34: Mandatory Verifier Loop, Decoder-First Gate, Context Stripping, Environment Check, Schema Diff, State Protection, Conditional Domain -->
4
4
  <!-- Optimizations #35-39: Incremental Output Checkpoint, Last-Mile Debugging, Automated Round-Trip Gate, Token Budget, Failure-Weighted Domain -->
5
+ <!-- Optimizations #40-46: Code Field Restore, Pattern Router, Full 36-Pattern Reference, Critical Reminders, Infra Pipelines, Paths Reference, Reviews Gate -->
6
+ <!-- Optimizations #47-50: Stronger Round-Trip Enforcement, Numerical Tolerance Escalation, Pre-Hook Activation Signal, Token Savings -->
7
+ <!-- Optimizations #51-54: Attention-Weighted Ordering, Conditional Benchmark Sections, Verifier Anchor, Near-Miss Escalation -->
5
8
  <coding_guidelines>
6
9
 
7
10
  # {{PROJECT_NAME}} - Autonomous Agent Guide
@@ -18,6 +21,41 @@
18
21
 
19
22
  ---
20
23
 
24
+ ## CODE FIELD (#40)
25
+
26
+ **Before writing code:** State assumptions, bound scope, identify edge cases.
27
+
28
+ ```
29
+ Do not write code before stating assumptions.
30
+ Do not claim correctness you haven't verified.
31
+ Do not handle only the happy path.
32
+ ```
33
+
34
+ **Output:** Assumptions → Code (smaller than expected) → "Handles/Does NOT handle"
35
+
36
+ ---
37
+
38
+ ## PATTERN ROUTER (MANDATORY FIRST) (#41, #47, #50, #53)
39
+
40
+ Before ANY work, print:
41
+ ```
42
+ === PATTERN ROUTER ===
43
+ Task: [summary]
44
+ Classification: [file-creation|constraint|adversarial|pipeline|impossible]
45
+ PATTERNS: P12:[Y/N] P17:[Y/N] P20:[Y/N] P11:[Y/N] P35:[Y/N]
46
+ ACTIVE: [list YES only]
47
+ BLOCKING: [P35: decoder.py/decode exists? → MUST round-trip before optimize]
48
+ VERIFIER: [cat verifier.sh test_*.py 2>/dev/null | head -20]
49
+ HOOKS: [ls /tmp/*_strategies.txt /tmp/*_hints.txt 2>/dev/null | head -3]
50
+ === END ===
51
+ ```
52
+
53
+ **#47 BLOCKING GATE**: If P35=YES (decoder provided), you CANNOT optimize until round-trip passes.
54
+ **#53 VERIFIER**: Read verifier/tests BEFORE implementing. Extract expected outputs, formats, paths.
55
+ **#50 HOOKS**: If hook files exist, READ THEM before implementing.
56
+
57
+ ---
58
+
21
59
  ## FIRST: IMPOSSIBILITY CHECK (#25)
22
60
 
23
61
  Before any work, check if task is impossible:
@@ -62,144 +100,119 @@ This guarantees partial credit even if implementation fails.
62
100
 
63
101
  ---
64
102
 
65
- ## AUTOMATED ROUND-TRIP GATE (#37)
103
+ ## AUTOMATED ROUND-TRIP GATE (#37, #47)
66
104
 
67
105
  If task provides BOTH encoder AND decoder:
68
106
  ```python
69
- # BLOCKING - Must pass before ANY optimization
107
+ # *** BLOCKING (#47) - NO optimization until this passes ***
108
+ # Step 1: READ the provided decoder FIRST - understand its expected format
109
+ # Step 2: Write encoder to MATCH that format exactly
110
+ # Step 3: Test round-trip at increasing scales:
70
111
  test_input = b"test" * 10 # Start small
71
112
  compressed = encode(test_input)
72
- decoded = decode(compressed) # Use PROVIDED decoder
73
- assert test_input == decoded, "BLOCKING: Round-trip failed"
113
+ decoded = decode(compressed) # Use PROVIDED decoder, NOT your own
114
+ assert test_input == decoded, "BLOCKING: Round-trip failed - fix format before optimizing"
74
115
  # Scale up: 100 bytes -> 1KB -> full input
75
- # Only optimize size AFTER round-trip passes at all scales
116
+ # Step 4: ONLY optimize size AFTER round-trip passes at ALL scales
76
117
  ```
118
+ **If round-trip produces garbage**: Your encoder format doesn't match the decoder. Re-read decoder byte-by-byte.
77
119
 
78
120
  ---
79
121
 
80
- ## STRUCTURED ITERATION PROTOCOL (#23, #28)
81
-
82
- Run verifier minimum 3 times before declaring done.
83
-
84
- ```
85
- if pass_rate == 100% AND run_count >= 3: DONE
86
- if pass_rate >= 75% AND 1-2 tests failing: LAST-MILE DEBUGGING (#36)
87
- if pass_rate > 50%: Fix ONLY the delta, re-run immediately
88
- if pass_rate <= 50%: Change approach entirely
89
- ```
90
-
91
- Print after every run: `TESTS: X/Y (Z%) [run N/3]`
92
-
93
122
  ---
94
123
 
95
- ## LAST-MILE DEBUGGING PROTOCOL (#36)
96
-
97
- When pass_rate >= 75% and exactly 1-2 tests failing:
98
- ```
99
- 1. STOP implementing new code
100
- 2. Read ENTIRE failing test function (not just assertion)
101
- 3. Print exact expected vs actual values
102
- 4. Binary search difference: format? precision? edge case?
103
- 5. If numerical: try tolerance (atol=1e-6 -> 1e-3 -> 1e-1)
104
- 6. If format: character-by-character diff
105
- 7. Spend up to 40% of remaining time on last-mile
106
- ```
107
-
108
- Never: say "done" at <100% | refactor passing code | start new approach when >80%
109
-
110
- ---
111
-
112
- ## TIME BUDGET
113
-
114
- | Phase | Allocation |
115
- |-------|------------|
116
- | Setup | 20% |
117
- | Implementation | 50% |
118
- | Iteration | 30% (reserved) |
119
-
120
- ---
121
-
122
- ## PATTERNS (Merged P12+P16, P13+P26, +#28-34)
123
-
124
- | ID | Trigger | Action |
125
- |----|---------|--------|
126
- | P1 | Any task | `which tool` before use |
127
- | P3 | Modifies config/db | `cp file file.bak` first |
128
- | P5 | Compression/ML/search | Detect impossible early |
129
- | P8 | Uncertain env | `subprocess` > library import |
130
- | P11 | Chess/crypto/ML | Use library: python-chess, scipy, zlib, hashlib |
131
- | P12 | Creates files | `ls -la` verify all outputs exist |
132
- | P13 | Tests partial pass | Fix specific failure, re-run (merged with P26) |
133
- | P17 | "exactly/only/must" | Extract constraints, print checklist |
134
- | P20 | "bypass/break/exploit" | Attacker mindset, enumerate vectors |
135
- | P22 | Git recovery | `cp -r .git .git.bak` first |
136
- | P32 | CLI tool | Test `./script` not `python script` |
137
- | P35 | Decoder given | **BLOCKING**: Read decoder, round-trip MUST pass first |
138
- | P37 | Output format specified | Diff output schema vs test expectations before verifier |
139
- | P38 | Recovery/forensics task | COPY ALL artifacts before ANY read operation |
140
- | P39 | Tests use separate env | Check Dockerfile; pip installs may not persist |
124
+ ## PATTERNS REFERENCE (#42)
125
+
126
+ ### Core (P1-P11)
127
+ | P | Trigger | Action |
128
+ |---|---------|--------|
129
+ | 1 | Any task | `which tool` before use |
130
+ | 2 | Complex task | Convert to numbered recipe steps |
131
+ | 3 | Modifies config/db | `cp file file.bak` FIRST |
132
+ | 4 | Ambiguous how | Specify exact tool+flags |
133
+ | 5 | Compression/ML/search | Detect impossible early, refuse |
134
+ | 6 | Critical rules | Put at END of context (recency bias) |
135
+ | 7 | Any task | Classify: state-sensitive→backup, tool→specify |
136
+ | 8 | Uncertain env | `subprocess` > library import |
137
+ | 9 | Non-text data | Convert→standard format first |
138
+ | 10 | Security filter | Allow-list ONLY, never blacklist |
139
+ | 11 | Chess/crypto/ML | Use library: python-chess, scipy, zlib, hashlib |
140
+
141
+ ### Output (P12-P16)
142
+ | P | Trigger | Action |
143
+ |---|---------|--------|
144
+ | 12 | Creates files | `ls -la` verify ALL outputs exist before done |
145
+ | 13 | Tests partial pass | Fix specific failure, re-run, iterate (merged P26) |
146
+ | 14 | Format specified | Validate output matches spec exactly |
147
+ | 15 | Exception thrown | Read full trace, fix error, re-run |
148
+ | 16 | Any output task | `touch` placeholders FIRST, then implement |
149
+
150
+ ### Constraint (P17-P20)
151
+ | P | Trigger | Action |
152
+ |---|---------|--------|
153
+ | 17 | "exactly/only/must" | Extract constraints, print checklist |
154
+ | 18 | Multi-step | Identify tool per stage, chain |
155
+ | 19 | Impossible markers | REFUSE immediately, create IMPOSSIBLE.md |
156
+ | 20 | "bypass/break/exploit" | Attacker mindset, enumerate vectors |
157
+
158
+ ### Domain (P21-P26)
159
+ | P | Trigger | Action |
160
+ |---|---------|--------|
161
+ | 21 | Chess | Use Stockfish: `stockfish` with FEN |
162
+ | 22 | Git recovery | `cp -r .git .git.bak` FIRST, then `git fsck` |
163
+ | 23 | Compress impossible | Refuse if target < Shannon limit |
164
+ | 24 | Polyglot | Search existing examples first |
165
+ | 25 | Multi-service | Configure in dependency order, test each |
166
+ | 26 | >50% tests pass | Focus on specific failures, 30% time reserved |
167
+
168
+ ### Verification (P27-P31)
169
+ | P | Trigger | Action |
170
+ |---|---------|--------|
171
+ | 27 | Output dir constraint | Remove non-required files before done |
172
+ | 28 | Service task | `curl` test BEFORE claiming done |
173
+ | 29 | "all/both/every" | Find ALL solutions, not just first |
174
+ | 30 | "% threshold" | Iterate until threshold met |
175
+ | 31 | Transform task | Round-trip: `original == decompress(compress(original))` |
176
+
177
+ ### Execution (P32-P39)
178
+ | P | Trigger | Action |
179
+ |---|---------|--------|
180
+ | 32 | CLI tool | Test `./script` not `python script` |
181
+ | 33 | Numerical | Multiple seeds, edge cases, tolerance escalation: 1e-6→1e-3→1e-1 |
182
+ | 34 | Image analysis | Use recognition tools, not reasoning |
183
+ | 35 | Decoder given | **BLOCKING**: Read decoder, round-trip MUST pass first |
184
+ | 36 | Competition | Research strategies BEFORE implementing |
185
+ | 37 | Output format specified | Diff output schema vs test expectations before verifier |
186
+ | 38 | Recovery/forensics | COPY ALL artifacts before ANY read operation |
187
+ | 39 | Tests use separate env | Check Dockerfile; pip installs may not persist |
141
188
 
142
189
  ---
143
190
 
144
191
  {{#if IS_BENCHMARK}}
145
- ## INLINE DOMAIN KNOWLEDGE (#24, #39)
192
+ ## INLINE DOMAIN KNOWLEDGE (#24, #39, #50 token-optimized)
146
193
 
147
- ### XSS/HTML Filtering (HIGH FAILURE RATE)
148
- ```python
149
- # Use bleach or DOMPurify approach - NEVER regex-only
150
- # Whitelist-only: allow known-safe tags/attributes, strip everything else
151
- # Test: <script>, <img onerror=>, <svg onload=>, javascript: URIs, data: URIs
152
- # Edge cases: nested encoding, null bytes, case variations, incomplete tags
153
- import bleach
154
- clean = bleach.clean(html, tags=['p','b','i','a','ul','li'], attributes={'a':['href']}, strip=True)
155
- ```
194
+ ### XSS Filtering
195
+ `import bleach; clean = bleach.clean(html, tags=['p','b','i','a','ul','li'], attributes={'a':['href']}, strip=True)`
196
+ Test: `<script>`, `<img onerror=>`, `javascript:` URIs, null bytes, nested encoding. NEVER regex-only.
156
197
 
157
- ### Formal Proofs / Coq (HIGH FAILURE RATE)
158
- ```
159
- (* Prove commutativity: use induction on n, simpl, rewrite IHn, reflexivity *)
160
- Theorem plus_comm : forall n m : nat, n + m = m + n.
161
- Proof. induction n as [|n' IHn']. - intros m. simpl. rewrite <- plus_n_O. reflexivity.
162
- - intros m. simpl. rewrite IHn'. rewrite plus_n_Sm. reflexivity. Qed.
163
- ```
198
+ ### Coq Proofs
199
+ Commutativity: induction on n, simpl, rewrite IHn, plus_n_O, plus_n_Sm, reflexivity.
164
200
 
165
- ### Metacircular Evaluator (HIGH FAILURE RATE)
166
- ```python
167
- # eval/apply mutual recursion. Handle: quote, if, lambda, define, begin, set!
168
- # Self-interpretation: eval must be able to evaluate eval
169
- # Key: environment is list of frames, each frame is dict of bindings
170
- def eval_expr(expr, env):
171
- if is_symbol(expr): return env_lookup(env, expr)
172
- if is_number(expr): return expr
173
- if expr[0] == 'quote': return expr[1]
174
- if expr[0] == 'if': return eval_expr(expr[2] if eval_expr(expr[1],env) else expr[3], env)
175
- if expr[0] == 'lambda': return Closure(expr[1], expr[2], env)
176
- # apply: eval operator, eval operands, call
177
- ```
178
-
179
- ### Chess Tasks (P21)
180
- ```bash
181
- pip install python-chess
182
- python3 -c "import chess, chess.engine; e=chess.engine.SimpleEngine.popen_uci('/usr/bin/stockfish'); b=chess.Board('FEN'); print(e.play(b,chess.engine.Limit(time=1)).move)"
183
- ```
201
+ ### Metacircular Eval
202
+ eval/apply recursion. Handle: quote, if, lambda, define, begin, set!. Env = list of frames (dicts).
184
203
 
185
- ### Compression Tasks (P35) - BLOCKING GATE (#29, #37)
186
- ```python
187
- # Round-trip MUST pass before optimization (see #37 above)
188
- original = open('input.bin','rb').read()
189
- compressed = encode(original)
190
- decoded = decode(compressed) # Use PROVIDED decoder
191
- assert original == decoded, "BLOCKING: Round-trip failed"
192
- ```
204
+ ### Chess (P21)
205
+ `pip install python-chess && python3 -c "import chess,chess.engine; e=chess.engine.SimpleEngine.popen_uci('/usr/bin/stockfish'); b=chess.Board('FEN'); print(e.play(b,chess.engine.Limit(time=1)).move)"`
206
+
207
+ ### Compression (P35) - BLOCKING (#47)
208
+ Read decoder FIRST. Round-trip MUST pass before optimizing. If garbage output: encoder format mismatches decoder.
193
209
 
194
210
  ### Git Recovery (P22)
195
- ```bash
196
- cp -r .git .git.bak && git fsck --full && git reflog --all
197
- ```
211
+ `cp -r .git .git.bak && git fsck --full && git reflog --all`
198
212
 
199
- ### CoreWars Tasks (P36)
200
- - Paper beats Stone (self-replication > bombing)
201
- - Vampires capture processes (offensive)
202
- - Scanners detect slow opponents
213
+ ### CoreWars (P36)
214
+ Paper > Stone (self-replication > bombing). Vampires capture processes. Scanners detect slow opponents.
215
+ Check hook: `cat /tmp/corewars_strategies.txt 2>/dev/null`
203
216
  {{/if}}
204
217
 
205
218
  ---
@@ -227,7 +240,15 @@ Print before done:
227
240
 
228
241
  ---
229
242
 
230
- ## FAILURE TRIAGE (#4)
243
+ ## ERROR RECOVERY
244
+
245
+ 1. Read exact error message
246
+ 2. Same error twice? Change approach
247
+ 3. Dependency missing? Install it
248
+ 4. Timeout approaching? Submit best partial
249
+
250
+ {{#if IS_BENCHMARK}}
251
+ ## FAILURE TRIAGE (#4, #52)
231
252
 
232
253
  | Error | Fix |
233
254
  |-------|-----|
@@ -241,26 +262,13 @@ Print before done:
241
262
 
242
263
  Same error twice = change approach completely.
243
264
 
244
- ---
245
-
246
- ## ERROR RECOVERY
247
-
248
- 1. Read exact error message
249
- 2. Same error twice? Change approach
250
- 3. Dependency missing? Install it
251
- 4. Timeout approaching? Submit best partial
252
-
253
265
  State destruction prevention (#33): For recovery/forensics tasks (WAL, deleted files, corrupted data):
254
266
  ```bash
255
- # BEFORE any read: copy ALL artifacts
256
267
  cp -a /app/*.db /tmp/backup/ 2>/dev/null
257
268
  cp -a /app/*.db-wal /tmp/backup/ 2>/dev/null
258
269
  cp -a /app/*.db-shm /tmp/backup/ 2>/dev/null
259
- # sqlite3 checkpoints WAL on open - backup FIRST
260
270
  ```
261
271
 
262
- ---
263
-
264
272
  ## PARTIAL CREDIT (#17)
265
273
 
266
274
  When time running out (last 20%):
@@ -269,6 +277,15 @@ When time running out (last 20%):
269
277
  3. One targeted fix for highest-likelihood failure
270
278
  4. Submit current state
271
279
 
280
+ ## TIME BUDGET (#52)
281
+
282
+ | Phase | Allocation |
283
+ |-------|------------|
284
+ | Setup | 20% |
285
+ | Implementation | 50% |
286
+ | Iteration | 30% (reserved) |
287
+ {{/if}}
288
+
272
289
  ---
273
290
 
274
291
  ## DECISION LOOP
@@ -344,10 +361,19 @@ uam agent overlaps --resource "<files>"
344
361
  {{/unless}}
345
362
 
346
363
  {{#if HAS_INFRA}}
347
- ## INFRASTRUCTURE
364
+ ## INFRASTRUCTURE (#43)
365
+
366
+ **Secrets in GitHub → use pipelines for secret-dependent ops.**
367
+
368
+ | Task | Pipeline |
369
+ |------|----------|
370
+ | Terraform | `iac-terraform-cicd.yml` |
371
+ | kubectl ops | `ops-approved-operations.yml` |
372
+ | One-time | `ops-create-ephemeral.yml` |
373
+
374
+ **Two-phase:** Local proof (no secrets) → IaC parity (via pipeline)
348
375
 
349
- Secrets in GitHub. Use pipelines for secret-dependent ops.
350
- Prohibited locally: `terraform apply`, `kubectl apply/delete`
376
+ **PROHIBITED locally:** `terraform apply`, `kubectl apply/delete`, `kubectl create secret`
351
377
  {{/if}}
352
378
 
353
379
  ## COMMANDS
@@ -358,6 +384,8 @@ Prohibited locally: `terraform apply`, `kubectl apply/delete`
358
384
  {{LINT_COMMAND}} # Lint
359
385
  ```
360
386
 
387
+ **Paths:** Memory: `{{MEMORY_DB_PATH}}` | Skills: `{{SKILLS_PATH}}` | Droids: `{{DROIDS_PATH}}`
388
+
361
389
  ---
362
390
 
363
391
  {{#if HAS_PROJECT_MD}}
@@ -374,12 +402,19 @@ Prohibited locally: `terraform apply`, `kubectl apply/delete`
374
402
  ## Architecture
375
403
  {{{ARCHITECTURE_OVERVIEW}}}
376
404
  {{/if}}
405
+
406
+ {{#if ESSENTIAL_COMMANDS}}
407
+ ## Commands
408
+ ```bash
409
+ {{{ESSENTIAL_COMMANDS}}}
410
+ ```
411
+ {{/if}}
377
412
  {{/if}}
378
413
 
379
414
  ---
380
415
 
381
416
  {{#unless IS_BENCHMARK}}
382
- ## COMPLETION CHECKLIST
417
+ ## COMPLETION CHECKLIST (#45)
383
418
 
384
419
  ```
385
420
  [ ] Tests 100% pass
@@ -387,6 +422,7 @@ Prohibited locally: `terraform apply`, `kubectl apply/delete`
387
422
  [ ] Worktree used (not {{DEFAULT_BRANCH}})
388
423
  [ ] Memory updated
389
424
  [ ] PR created
425
+ [ ] Reviews passed
390
426
  {{#if HAS_INFRA}}
391
427
  [ ] IaC parity verified
392
428
  {{/if}}
@@ -431,16 +467,77 @@ Never done until: PR merged + deployed + verified
431
467
 
432
468
  ---
433
469
 
434
- ## FINAL DIRECTIVES
435
-
436
- 1. Read verifier/test before implementing
437
- 2. If decoder provided: round-trip MUST pass before optimizing (BLOCKING)
438
- 3. `ls -la` all outputs before saying done
439
- 4. Diff output schema vs test expectations before running verifier
440
- 5. If >50% tests pass, iterate - do not restart
441
- 6. Use libraries, not custom code
442
- 7. Same error twice = change approach
443
- 8. Run verifier minimum 3 times before declaring done
444
- 9. Never done if tests <100%
470
+ ## STRUCTURED ITERATION PROTOCOL (#23, #28, #51, #54)
471
+
472
+ Run verifier minimum 3 times before declaring done.
473
+
474
+ ```
475
+ if pass_rate == 100% AND run_count >= 3: DONE
476
+ if 60% <= pass_rate < 100%: NEAR-MISS (#54) - you are CLOSE, do NOT change approach
477
+ Read the 1-2 failing tests completely
478
+ Fix ONLY what those specific tests check
479
+ Re-run immediately
480
+ if pass_rate >= 75% AND 1-2 tests failing: LAST-MILE DEBUGGING (#36)
481
+ if pass_rate > 50%: Fix ONLY the delta, re-run immediately
482
+ if pass_rate <= 50%: Change approach entirely
483
+ ```
484
+
485
+ Print after every run: `TESTS: X/Y (Z%) [run N/3]`
486
+
487
+ ---
488
+
489
+ ## LAST-MILE DEBUGGING PROTOCOL (#36, #48)
490
+
491
+ When pass_rate >= 75% and exactly 1-2 tests failing:
492
+ ```
493
+ 1. STOP implementing new code
494
+ 2. Read ENTIRE failing test function (not just assertion)
495
+ 3. Print exact expected vs actual values
496
+ 4. Binary search difference: format? precision? edge case?
497
+ 5. If numerical: TOLERANCE ESCALATION (#48):
498
+ - Start: atol=1e-6, rtol=1e-6
499
+ - If fail: atol=1e-3, rtol=1e-3
500
+ - If fail: atol=1e-1, rtol=1e-1
501
+ - Log-concavity/convexity checks: use numerical derivatives with eps=1e-4
502
+ - Floating-point noise: compare sign(diff) not exact values
503
+ 6. If format: character-by-character diff
504
+ 7. Spend up to 40% of remaining time on last-mile
505
+ ```
506
+
507
+ Never: say "done" at <100% | refactor passing code | start new approach when >80%
508
+
509
+ ---
510
+
511
+ ## CRITICAL REMINDERS (READ LAST - RECENCY BIAS P6) (#44)
512
+
513
+ 1. **BACKUP FIRST**: `cp file file.bak` before ANY modification
514
+ 2. **CHECK ENV**: `which tool` before using
515
+ 3. **CLI > LIBRARIES**: Use subprocess when uncertain
516
+ 4. **VERIFY OUTPUTS**: `ls -la` ALL expected files before "done"
517
+ 5. **ITERATE**: On partial test pass, fix specific failure, re-run (P26)
518
+ 6. **CREATE > EXPLAIN**: Missing output? CREATE it, don't explain
519
+ 7. **REFUSE IMPOSSIBLE**: Compression below Shannon limit → IMPOSSIBLE.md
520
+ 8. **DECODER FIRST (#47)**: When decoder provided, READ IT FIRST, round-trip MUST pass before ANY optimization
521
+ 9. **ERROR ESCALATION**: Same error twice → change approach completely
522
+ 10. **TIME BUDGET**: Reserve 30% for iteration/debugging
523
+ 11. **READ HOOKS (#50)**: `ls /tmp/*_strategies.txt /tmp/*_hints.txt` - if exist, READ before implementing
524
+ 12. **TOLERANCE ESCALATION (#48)**: Numerical test fails? Try 1e-6→1e-3→1e-1 before changing algorithm
525
+ 13. **NEAR-MISS (#54)**: At 60-89% pass rate, you are CLOSE - do NOT change approach, fix only failing tests
526
+
527
+ **P17 Active? Print:**
528
+ ```
529
+ === CONSTRAINTS ===
530
+ [ ] constraint1 [ ] constraint2
531
+ [x] constraint1: PASS/FAIL
532
+ === END ===
533
+ ```
534
+
535
+ **P20 Active? Print:**
536
+ ```
537
+ === ADVERSARIAL ===
538
+ Target: [filter/protection]
539
+ Vectors: case, encoding, null, context-break
540
+ === END ===
541
+ ```
445
542
 
446
543
  </coding_guidelines>