Alexander Whitestone
5dcb90531b
Contributor Attribution Check / check-attribution (pull_request) Failing after 49s
Docker Build and Publish / build-and-push (pull_request) Has been skipped
Nix / nix (ubuntu-latest) (pull_request) Failing after 6s
Supply Chain Audit / Scan PR for supply chain risks (pull_request) Successful in 25s
Tests / e2e (pull_request) Successful in 4m26s
Tests / test (pull_request) Failing after 59m48s
Nix / nix (macos-latest) (pull_request) Has been cancelled
feat: Poka-yoke — prevent hardcoded home-directory paths (closes #921)
Three-layer defense against latent /Users/<name>/ and ~/ path defects:
1. Runtime guard (tools/path_guard.py):
- validate_path() catches /Users/<name>/, /home/<name>/ in tool args
- Allows current HOME prefix (expanduser output is safe)
- Wired into write_file_tool() and execute_code()
2. Pre-commit hook (hooks/pre-commit-path-guard.py):
- Scans staged .py files for hardcoded path patterns
- Blocks commit with actionable error message
- # noqa: hardcoded-path-ok escape hatch for legitimate cases
3. CI lint (scripts/lint_hardcoded_paths.py):
- Scans directory tree for violations
- --fix flag shows remediation suggestions
- Skips test dirs, __pycache__, venv
4. 21 tests (tests/test_path_guard.py):
- Runtime validation (valid/invalid paths, batch, edge cases)
- Static scanning (clean files, violations, noqa, comments)
- Directory scanning (tree traversal, skip rules)
Existing violations annotated with # noqa: hardcoded-path-ok where
legitimate (config defaults, display strings, test fixtures, skills).
2026-04-21 07:37:14 -04:00
..
2026-04-07 08:40:22 -04:00
2026-04-14 21:20:37 -07:00
2026-03-17 02:33:12 -07:00
2026-03-31 08:48:54 +09:00
2026-03-23 07:43:12 -07:00
2026-04-16 01:35:49 +00:00
2026-04-15 22:17:16 -04:00
2026-04-08 02:24:32 -07:00
2026-04-01 04:18:50 -07:00
2026-04-10 03:44:43 -07:00
2026-04-14 16:55:55 -07:00
2026-04-08 02:24:32 -07:00
2026-04-11 14:50:44 -07:00
2026-04-07 13:36:38 -07:00
2026-04-21 07:37:14 -04:00
2026-04-15 22:56:32 -04:00
2026-04-11 13:59:52 -07:00
2026-04-15 21:00:06 -04:00
2026-04-15 04:57:55 -07:00
2026-04-07 10:25:31 -07:00
2026-04-12 00:54:35 -07:00
2026-04-13 16:32:04 -07:00
2026-04-13 23:54:45 -07:00
2026-04-21 07:37:14 -04:00
2026-04-10 16:47:44 -07:00
2026-04-13 04:45:07 -07:00
2026-04-13 16:32:04 -07:00
2026-04-11 14:02:58 -07:00
2026-04-02 12:40:03 +11:00
2026-04-10 03:05:04 -07:00
2026-04-14 21:12:29 -07:00
2026-04-14 10:18:05 -07:00
2026-04-13 16:32:04 -07:00
2026-03-18 02:55:30 -07:00
2026-03-11 20:02:36 -07:00
2026-04-05 12:46:07 -07:00
2026-04-10 16:47:44 -07:00
2026-04-21 07:37:14 -04:00
2026-04-11 13:59:52 -07:00
2026-04-12 00:36:22 -07:00
2026-04-15 22:17:16 -04:00
2026-04-07 10:25:31 -07:00
2026-04-15 04:16:06 -07:00
2026-04-13 04:54:42 -07:00
2026-04-15 04:57:55 -07:00
2026-04-13 16:32:04 -07:00
2026-04-12 16:39:04 -07:00
2026-04-11 01:21:20 -07:00
2026-04-15 04:57:55 -07:00
2026-04-13 16:32:04 -07:00
2026-03-25 19:47:58 -07:00
2026-04-11 16:22:50 -07:00
2026-03-31 08:48:54 +09:00
2026-04-16 02:10:39 +00:00
2026-04-11 14:26:11 -07:00
2026-04-13 16:32:04 -07:00
2026-04-15 04:57:55 -07:00
2026-04-15 22:14:16 -04:00
2026-04-10 05:04:28 -07:00
2026-04-13 16:32:04 -07:00
2026-04-13 16:32:04 -07:00
2026-04-13 16:32:04 -07:00
2026-04-07 10:25:31 -07:00