Shreshth Kapoor
9f4e8eef48
fix: bin writers drop data on Windows paths with an apostrophe
...
Two independent Windows git-bash bugs in the bin writers, both silent
because callers invoke these scripts with 2>/dev/null and do not check
the exit status — a hard failure was indistinguishable from success.
Bug 1 — apostrophe in the checkout path breaks the bun -e program.
gstack-learnings-log, gstack-question-log and gstack-telemetry-log build
a bun -e program as a double-quoted shell string and interpolate
SCRIPT_DIR into a single-quoted JS import specifier. A path such as
C:/Users/Someone's PC/... closes the JS string literal early and Bun
fails to parse ("Expected ; but found s"). Every learning write and every
plan-tune question event no-oped; telemetry error redaction fell to its
fail-closed null path. The #1950 cygpath -m guard did not cover this —
cygpath normalises the drive form but does not remove the apostrophe.
Fixed by not interpolating the path at all: cd into the module root and
use a relative import specifier, which is immune to apostrophes, spaces,
backslashes and MSYS paths alike. The one remaining interpolated data
path in gstack-developer-profile (readFileSync of PROFILE_FILE) is passed
via the environment instead, matching do_log_session in the same file.
Bug 2 — gstack-developer-profile --derive fails on an MSYS-form
GSTACK_HOME. GSTACK_HOME defaults to $HOME/.gstack, which under git-bash
is /c/Users/..., and Bun on Windows cannot open that form (ENOENT). This
script carried no cygpath guard at all. Fixed by normalising GSTACK_HOME
once, before PROFILE_FILE / LEGACY_FILE / the events path are derived
from it, so all three pick up the normalised value.
Adds test/hostile-path-writers.test.ts, which runs the bins from a
directory whose name contains an apostrophe and asserts that rows are
ACTUALLY WRITTEN (not merely that the exit code is 0 — exit-code-only
checks are what masked bug 1). The apostrophe repro is OS-independent:
SCRIPT_DIR derives from the script's own location, so a copied checkout
under a hostile directory name reproduces bug 1 on Linux/macOS CI too.
Wave-amended: all four writers unified on the env-var import pattern the PR already used in gstack-developer-profile (no CWD-dependent module resolution)
Wave-amended: all four writers unified on the env-var import pattern the PR already used in gstack-developer-profile (apostrophe-safe without CWD-dependent module resolution); import-shape pin updated
2026-08-31 21:01:51 +00:00
..
2026-08-31 20:58:35 +00:00
2026-08-31 20:36:12 +00:00
2026-08-15 22:20:30 -07:00
2026-08-29 10:10:35 -07:00
2026-03-18 23:57:59 -05:00
2026-08-15 22:20:30 -07:00
2026-08-29 10:10:35 -07:00
2026-08-16 19:34:41 -07:00
2026-08-31 08:55:30 -07:00
2026-08-27 09:50:31 -07:00
2026-08-31 08:55:30 -07:00
2026-08-27 09:50:31 -07:00
2026-08-29 10:10:35 -07:00
2026-08-29 09:06:54 -07:00
2026-04-19 17:50:31 +08:00
2026-08-31 08:55:30 -07:00
2026-06-21 07:15:19 -07:00
2026-08-31 08:55:30 -07:00
2026-08-19 11:42:55 -07:00
2026-08-19 11:42:55 -07:00
2026-05-29 08:35:00 -07:00
2026-08-19 11:42:55 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-16 19:34:41 -07:00
2026-05-20 07:35:01 -07:00
2026-08-31 08:55:30 -07:00
2026-08-29 09:06:54 -07:00
2026-05-29 08:35:00 -07:00
2026-06-07 19:13:24 -07:00
2026-06-07 19:13:24 -07:00
2026-08-29 09:06:54 -07:00
2026-06-07 19:13:24 -07:00
2026-08-14 09:28:56 -07:00
2026-08-29 09:06:54 -07:00
2026-08-16 19:34:41 -07:00
2026-08-15 22:20:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-29 09:06:54 -07:00
2026-08-15 11:42:19 -07:00
2026-08-29 09:06:54 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 20:52:20 +00:00
2026-08-16 19:34:41 -07:00
2026-08-31 08:55:30 -07:00
2026-08-16 19:34:41 -07:00
2026-08-31 08:55:30 -07:00
2026-05-16 12:32:33 -07:00
2026-08-31 08:55:30 -07:00
2026-08-27 09:50:31 -07:00
2026-08-08 09:28:45 -07:00
2026-06-07 19:13:24 -07:00
2026-08-15 09:37:04 -07:00
2026-05-28 18:21:09 -07:00
2026-08-31 20:49:20 +00:00
2026-08-31 08:55:30 -07:00
2026-06-09 22:29:23 -07:00
2026-08-31 08:55:30 -07:00
2026-08-16 19:34:41 -07:00
2026-05-30 12:09:10 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-05-21 21:21:07 -07:00
2026-06-07 19:13:24 -07:00
2026-08-29 09:06:54 -07:00
2026-08-31 08:55:30 -07:00
2026-08-28 11:43:13 -07:00
2026-08-16 19:34:41 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-29 09:06:54 -07:00
2026-08-15 22:20:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-15 22:20:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-29 09:06:54 -07:00
2026-08-14 22:02:07 -07:00
2026-08-29 09:06:54 -07:00
2026-05-20 07:35:01 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-28 11:43:13 -07:00
2026-08-31 08:55:30 -07:00
2026-08-15 11:42:19 -07:00
2026-06-08 06:20:58 -07:00
2026-08-31 08:55:30 -07:00
2026-06-21 07:15:19 -07:00
2026-08-29 09:06:54 -07:00
2026-08-16 19:34:41 -07:00
2026-08-31 08:55:30 -07:00
2026-06-08 06:20:58 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-05-21 21:21:07 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 20:56:32 +00:00
2026-08-16 19:34:41 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-05-17 08:26:36 -07:00
2026-08-31 08:55:30 -07:00
2026-05-30 14:57:07 -07:00
2026-08-08 09:28:45 -07:00
2026-08-16 19:34:41 -07:00
2026-08-15 22:20:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-29 09:06:54 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 20:50:27 +00:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-15 11:42:19 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 20:56:32 +00:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-06-08 06:20:58 -07:00
2026-06-08 06:20:58 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 20:50:08 +00:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 20:56:32 +00:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 21:01:51 +00:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-27 09:50:31 -07:00
2026-05-29 08:35:00 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-19 11:42:55 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-05-14 17:20:48 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-04-26 13:55:13 -07:00
2026-08-31 08:55:30 -07:00
2026-08-14 09:28:56 -07:00
2026-08-16 19:34:41 -07:00
2026-08-16 09:53:31 -07:00
2026-08-14 22:02:07 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 21:01:51 +00:00
2026-08-14 22:02:07 -07:00
2026-08-17 07:50:37 -07:00
2026-08-31 08:55:30 -07:00
2026-08-15 11:42:19 -07:00
2026-07-14 16:35:30 -07:00
2026-06-14 11:40:57 -07:00
2026-04-18 15:05:42 +08:00
2026-05-30 14:57:07 -07:00
2026-08-15 09:37:04 -07:00
2026-08-27 09:50:31 -07:00
2026-05-21 21:21:07 -07:00
2026-08-31 08:55:30 -07:00
2026-08-29 09:06:54 -07:00
2026-05-07 20:14:59 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-05-20 07:35:01 -07:00
2026-05-30 14:57:07 -07:00
2026-04-19 08:38:19 +08:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-14 22:02:07 -07:00
2026-08-27 09:50:31 -07:00
2026-04-25 11:52:48 -07:00
2026-08-14 22:02:07 -07:00
2026-08-14 22:02:07 -07:00
2026-08-14 22:02:07 -07:00
2026-08-31 08:55:30 -07:00
2026-08-14 22:02:07 -07:00
2026-08-27 09:50:31 -07:00
2026-08-08 09:28:45 -07:00
2026-04-17 00:45:13 -07:00
2026-08-31 20:49:05 +00:00
2026-08-31 08:55:30 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-31 08:55:30 -07:00
2026-08-14 22:02:07 -07:00
2026-05-26 16:50:03 -07:00
2026-05-30 12:09:10 -07:00
2026-08-15 09:37:04 -07:00
2026-08-29 09:06:54 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-05-06 19:37:53 -07:00
2026-08-31 08:55:30 -07:00
2026-06-07 22:04:18 -07:00
2026-08-30 20:45:19 -07:00
2026-08-31 08:55:30 -07:00
2026-08-14 09:28:56 -07:00
2026-08-16 19:34:41 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-16 19:34:41 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-15 09:37:04 -07:00
2026-08-31 20:52:28 +00:00
2026-05-30 08:54:46 -07:00
2026-08-31 20:52:29 +00:00
2026-08-16 19:34:41 -07:00
2026-05-30 08:54:46 -07:00
2026-08-31 20:55:56 +00:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-05-30 08:54:46 -07:00
2026-05-30 12:09:10 -07:00
2026-06-07 06:51:10 -07:00
2026-08-27 09:50:31 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 20:47:41 +00:00
2026-08-16 19:34:41 -07:00
2026-05-30 12:09:10 -07:00
2026-08-31 20:58:35 +00:00
2026-08-31 08:55:30 -07:00
2026-05-29 08:35:00 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-27 09:50:31 -07:00
2026-08-29 09:06:54 -07:00
2026-05-29 08:35:00 -07:00
2026-08-31 08:55:30 -07:00
2026-05-29 08:35:00 -07:00
2026-04-24 01:38:21 -07:00
2026-06-04 11:14:43 -07:00
2026-06-21 07:15:19 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-07-09 23:49:09 -07:00
2026-08-31 08:55:30 -07:00
2026-08-16 19:34:41 -07:00
2026-08-31 08:55:30 -07:00
2026-08-19 11:42:55 -07:00
2026-08-24 08:55:58 -07:00
2026-08-14 22:02:07 -07:00
2026-08-18 17:00:04 -07:00
2026-08-31 08:55:30 -07:00
2026-05-29 18:06:19 -07:00
2026-08-27 09:50:31 -07:00
2026-08-27 09:50:31 -07:00
2026-08-24 08:55:58 -07:00
2026-08-19 16:53:19 -07:00
2026-08-31 08:55:30 -07:00
2026-08-14 22:02:07 -07:00
2026-08-16 19:34:41 -07:00
2026-08-19 16:53:19 -07:00
2026-08-16 19:34:41 -07:00
2026-08-15 11:42:19 -07:00
2026-08-30 20:45:19 -07:00
2026-05-30 12:09:10 -07:00
2026-08-16 19:34:41 -07:00
2026-05-30 12:09:10 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-29 10:10:35 -07:00
2026-08-31 20:56:33 +00:00
2026-08-14 09:28:56 -07:00
2026-08-16 19:34:41 -07:00
2026-06-04 11:14:43 -07:00
2026-04-19 08:38:19 +08:00
2026-08-15 22:20:30 -07:00
2026-08-15 22:20:30 -07:00
2026-06-12 15:38:53 -07:00
2026-08-27 09:50:31 -07:00
2026-08-29 10:10:35 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-31 08:55:30 -07:00
2026-08-29 10:10:35 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-31 08:55:30 -07:00
2026-08-29 09:06:54 -07:00
2026-08-30 20:45:19 -07:00
2026-08-31 08:55:30 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-07-14 16:35:30 -07:00
2026-08-29 09:06:54 -07:00
2026-08-19 11:42:55 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-31 08:55:30 -07:00
2026-08-15 09:37:04 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-31 08:55:30 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-31 08:55:30 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 10:10:35 -07:00
2026-08-31 08:55:30 -07:00
2026-08-29 09:06:54 -07:00
2026-08-31 08:55:30 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-31 08:55:30 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-08-28 11:43:13 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-27 09:50:31 -07:00
2026-08-29 09:06:54 -07:00
2026-08-29 09:06:54 -07:00
2026-03-13 21:08:12 -07:00
2026-05-29 08:35:00 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-29 09:06:54 -07:00
2026-08-31 08:55:30 -07:00
2026-08-27 09:50:31 -07:00
2026-08-29 09:06:54 -07:00
2026-05-25 10:57:15 -07:00
2026-08-31 08:55:30 -07:00
2026-05-29 08:35:00 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-06-21 07:15:19 -07:00
2026-05-30 12:09:10 -07:00
2026-06-08 05:41:07 -07:00
2026-08-29 10:10:35 -07:00
2026-08-31 08:55:30 -07:00
2026-08-28 11:43:13 -07:00
2026-08-28 11:43:13 -07:00
2026-08-31 08:55:30 -07:00
2026-08-15 22:20:30 -07:00
2026-08-15 22:20:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-31 08:55:30 -07:00
2026-08-16 09:53:31 -07:00
2026-05-30 12:09:10 -07:00
2026-08-16 19:34:41 -07:00
2026-08-31 08:55:30 -07:00
2026-08-14 22:02:07 -07:00
2026-08-31 08:55:30 -07:00
2026-08-19 11:42:55 -07:00
2026-08-31 08:55:30 -07:00
2026-08-28 11:43:13 -07:00
2026-08-15 09:37:04 -07:00
2026-08-19 16:53:19 -07:00
2026-08-29 09:06:54 -07:00
2026-08-14 22:02:07 -07:00
2026-08-31 08:55:30 -07:00
2026-08-27 09:50:31 -07:00