Skip to content

v1.0.6 — Gauntlet Hardening

Choose a tag to compare

@tcconnally tcconnally released this 29 May 19:36
1d45cad

Perseus v1.0.6 — Gauntlet Hardening

This release fixes 5 bugs discovered during a full code review and gauntlet certification run of Perseus v1.0.5.

Fixes

task-92 — macOS ENOTEMPTY crash in Phase 0 cache clear
shutil.rmtree() raised OSError(66, 'Directory not empty') on macOS when cache files had extended attributes (@). Fixed with per-child deletion fallback.

task-93 — Four adversarial scenario bugs (A2/A3/A7/A10)

  • A2/A3: renders: None on skip → changed to renders: {} to prevent AttributeError in post-processor
  • A7: ValueError from proc.communicate() after proc.stdin.close() — now caught alongside BrokenPipeError
  • A10: context.md was created in cleanup (after render loop) — moved to before render loop

Note: max_bytes NameError fix (task-91) landed independently on main the same day via a parallel commit.

Gauntlet Results

  • Smoke (10 devs/node): 90.0/100 — PASS (13/13 gates)
  • CI: ✅ Python 3.10 / 3.11 / 3.12 — 750 tests passed

Open Issues (tracked for v1.0.7)

  • #61@env deny-list for credential protection
  • #62 — Cache directory mode=0o700
  • #63@include symlink inode tracking
  • #64 — Property-based fuzz tests
  • #65 — Agora fcntl.flock for concurrent writes