Skip to content

Fix Pulse→PULSE directory casing across PULSE module#1259

Merged
danielmiessler merged 1 commit into
danielmiessler:mainfrom
atabisz:fix/pulse-case-sensitivity
May 20, 2026
Merged

Fix Pulse→PULSE directory casing across PULSE module#1259
danielmiessler merged 1 commit into
danielmiessler:mainfrom
atabisz:fix/pulse-case-sensitivity

Conversation

@atabisz

@atabisz atabisz commented May 14, 2026

Copy link
Copy Markdown
Contributor

Summary

Fixes a directory-casing mismatch in the PULSE module. Source code referenced ~/.claude/PAI/Pulse/... (mixed-case) but the directory on disk is PULSE (uppercase).

Why this matters

  • macOS APFS (case-insensitive default): worked, both spellings resolved to the same path
  • Linux ext4 / case-sensitive APFS: broken — config and state lookups silently missed (no error, no log, just undefined reads or fresh state every run)

Changes

11 files / 14 occurrences, all pure string changes inside path.join(...) calls:

  • PULSE/{run-job,lib,setup,pulse-unified}.ts
  • PULSE/modules/{imessage,user-index}.ts
  • PULSE/Performance/cost-aggregator.ts
  • PULSE/checks/{notification-governor,poller-meta-monitor,github-work}.ts
  • PULSE/Observability/observability.ts

Plus PLATFORM.md entry 6a logging the fix in the inventory.

Testing

  • ✅ Linux (Ubuntu, runtime-verified — these files have been running in ~/.claude/PAI/PULSE/ and producing working output)
  • ⚠️ macOS not re-verified, but behavior is identical on case-insensitive filesystems by definition (Pulse and PULSE resolve to the same path)
  • No automated tests added — this is a constant-string change with no logic; a test would just re-assert the source code

Risk

Low. No platform regressions possible: case-insensitive filesystems treated both names identically, case-sensitive filesystems were already broken.

Source referenced ~/.claude/PAI/Pulse/... but the directory on disk is
PULSE (uppercase). Worked on macOS APFS (case-insensitive default) but
broke on Linux ext4 and case-sensitive APFS — config and state lookups
silently missed.

11 files / 14 occurrences:
- run-job.ts, lib.ts, setup.ts, pulse-unified.ts
- modules/{imessage,user-index}.ts
- Performance/cost-aggregator.ts
- checks/{notification-governor,poller-meta-monitor,github-work}.ts
- Observability/observability.ts

Tested on Linux (Ubuntu, runtime-verified). Behavior unchanged on
case-insensitive filesystems (macOS default, NTFS).

Logged in PLATFORM.md as fix 6a.
@danielmiessler danielmiessler merged commit 2fde1bb into danielmiessler:main May 20, 2026
larsboes added a commit to larsboes/PAI that referenced this pull request Jun 10, 2026
…, PULSE casing

Selective integration of upstream danielmiessler/PAI (9fb9c862fde1bb):
- security: port execSync→execFileSync in tab-setter.ts (danielmiessler#1046), incl. the
  fork's extra cmux call sites + the kitten|jq pipe → execFileSync+JSON.parse,
  and replace `command -v` with `which`. Adds KITTY_LISTEN_ON socket validation.
- security: remove Midjourney/Discord integration from Art/Media skills (6 files)
  + strip stale "Midjourney" trigger keyword from Media SKILL.md descriptions.
- fix(PULSE): "Pulse"→"PULSE" directory casing across PULSE module — real bug on
  Linux/WSL2 case-sensitive FS (live dir is PULSE; refs were "Pulse") (danielmiessler#1259/danielmiessler#1175).
- bump .pai-fork/last-synced.ref → 2fde1bb.

Skipped (verified N/A to fork): plansDirectory danielmiessler#672 (no such key), case-colliding
danielmiessler#621 (no pai-observability-server), wiki Algorithm danielmiessler#1273 (fork casing consistent),
PAI-Install danielmiessler#1267 (fork doesn't deploy PAI-Install).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants