--- id: "bug-1628" status: "fixed" status_updated: "2026-09-24" status_note: "" component: "unknown" severity: "unknown" timestamp: "2026-08-23T08:03:59" last_seen: "2026-09-19T09:00:00Z" occurrences: 1 files: [".claude/skills/weekly_report/SKILL.md"] tags: ["date", "busybox", "coreutils", "portability", "sandbox", "bash", "git-log", "weekly_report", "silent-failure"] related: ["bug-1606", "bug-1617"] legacy: true --- # bug-1628: date: invalid date '-6 days' / date: invalid date '2026-06-29 +5 days' -- relative date arithmetic… ## Description date: invalid date '-6 days' / date: invalid date '2026-06-29 +5 days' -- relative date arithmetic silently yields EMPTY shell variables, and the empty values then flow into `git log --since="" --until=""`, which git treats as NO time filter (unbounded history) instead of erroring. ## Environment _Not recorded (migrated from buglog.json)._ ## Reproduction _Not recorded (migrated from buglog.json)._ ## Root cause `date` first on PATH in this harness is BusyBox v1.36.1 (/nix/store/...busybox-1.36.1/bin/busybox), NOT GNU coreutils, even though /bin/date IS coreutils 9.8 -- the nix profile bin dir precedes /bin. BusyBox date supports absolute parsing (`date -d 2026-06-29 +%A` works, which is what masked the problem during initial probing) but has no GNU relative-expression support ('-7 days', 'last monday', '+5 days'). Because command substitution captures only stdout and BusyBox writes 'invalid date' to stderr, $START/$END come back as empty strings and the failure is invisible to a non -e script. Same BusyBox-shadows-GNU family as bug-1606 (grep -P) and bug-1617 (mktemp template). ## Fix Do all date arithmetic in python3 (/bin/python3, always present) instead of `date -d`: compute week start via `today - timedelta(days=today.weekday()) - timedelta(weeks=offset)` and emit `START=/END=/SLUG=` lines consumed by `eval "$(python3 - ... <<'PY' ... PY )"`. General rule: never use `date -d` with a relative expression in this environment; use python3 datetime, or call /bin/date by absolute path if GNU date is genuinely required. Also validate that computed date vars are non-empty before feeding them to `git log --since/--until`, since git silently ignores empty range args rather than failing. ## Verification _Not recorded (migrated from buglog.json)._ ## References - Related: bug-1606, bug-1617