Skip to content

fix(rust): resolve Windows absolute path-table names - #1192

Open
thekevinbot wants to merge 5 commits into
claude/1175-windows-cifrom
claude/1185-win-abs-table-names
Open

thekevinbot wants to merge 5 commits into
claude/1175-windows-cifrom
claude/1185-win-abs-table-names

Conversation

@thekevinbot

@thekevinbot thekevinbot commented Sep 28, 2026 •

Copy link
Copy Markdown
Collaborator

Fixes #1185

Path-table names are now parsed with typed-path instead of std::path plus a /-prefix check. The syntax is a type parameter, so the Windows rules run as unit tests on Linux.

On Windows these now resolve:

  • drive letter, with \ or / (C:\logs\*.log, C:/logs/*.log)
  • UNC (\\server\share\*.md)
  • ~\ as well as ~/
  • rooted, no drive (/var/log), as before

Absolute path-tables report path_prefix with / separators (C:/logs), so absolute tables match the /-separated relative paths from #1184. Verbatim (\\?\) paths keep \, because / is not a separator there. root (the directory walked) stays native.

Two smaller fixes:

  • A prefix component such as \\?\C: is no longer read as a glob because it contains ?.
  • normalize no longer pops a .. it kept on a relative path (../../a stayed ../a before).

Test changes. path_table_globs.rs and path_table_cli_e2e.rs built their expected path with format!("{dir}/docs/a.md") or join(..).display(). On Windows that yields mixed separators like C:\...\tmp/docs/a.md and C:\...\tmp\notes/n.md. Those strings only hold where the temp dir contains no \. No single reporting rule can satisfy all of them, so the tests now expect the /-separated form. On Linux nothing changes.

Stacked on #1178 (claude/1175-windows-ci) so the Windows tests job runs here. CI red: #1178's Windows run 35995035941.

Windows failure count: 99 before, 94 after (run 36437093101). The five path_table::tests unit failures are fixed. Every absolute, ../ and ~/ path-table now resolves on Windows. The path_table_globs.rs and path_table_cli_e2e.rs failures that remain have the right C:/... prefix, then a \ before the relative part (C:/.../docs\a.md). That comes from the vtab path join and relative paths, which #1184 owns.

E2E Verification

  • Ran e2e suites locally for every affected SDK
  • Python SDK e2e: pass (38 passed)
  • TypeScript SDK e2e: pass (18 passed)
  • Rust core e2e: pass (cargo test --workspace --features cli)
  • packages/python/e2e-attestations/claude-1185-win-abs-table-names.json receipt written (just e2e-attest-python)
  • packages/ts/e2e-attestations/claude-1185-win-abs-table-names.json receipt written (just e2e-attest-ts)
  • Command(s) run: just e2e-attest-python, just e2e-attest-ts, cargo test --workspace --features cli, just preflight
  • Result summary: all green on Linux. Manual: dirsql query "SELECT path FROM '/tmp/claude/1185-demo/sub/*.md'" returned /tmp/claude/1185-demo/sub/a.md, and '~/work/dotfiles/domains.md' returned the absolute home path.

Changelog / Migrations

  • Changelog fragment added under packages/rust/changelog.d/
  • Migration fragment added under packages/rust/migrations.d/. The changelog gate requires one, and absolute path values on Windows change from \ to /.

This branch has not been deployed

No deployments
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.

1 participant