Skip to content

test(framework): a real session per tool, on Windows and on Linux #707

Description

@blafourcade

Every probe behind this layer was run on macOS. Most of that is no longer true, and this
ticket was rewritten on 2026-09-03 to say what is left rather than what was once unknown.

Settled since it was opened

Was unknown Answer, and where
Figures land in .config on Windows, where nothing expects them %APPDATA%\aidd when the variable is set, .config kept when a machine already journalled there — cli/src/infrastructure/home-dir.ts:41, cli/src/infrastructure/adapters/telemetry-sink-adapter.ts:57
skills/01-cost/scripts/lib/sink.js resolves the path that file no longer exists; the read path moved into the CLI
"Nothing about Linux has been measured" one job of twenty-two runs on windows-latest; every other runs on ubuntu-latest, so the whole suite is Linux evidence
Every hook path, the git calls, the journal's privacy the cli / Windows job runs the chain end to end — allow measurement with nothing installed, journal a captured payload, the journal stays private while git add -A still works, the plugin suite, a globally installed CLI, diagnose through the command each skill names, then unit, integration and e2e

Windows went green for the first time on 2026-09-03 (#749), and it earned its place
immediately: it found two real defects that macOS could not. A mode assertion that measured
the platform rather than the repair, and check reporting "its script is not executable, so
git will not run it"
about a hook git runs — an unknown printed as a fault on every Windows
run.

Two e2e files stay excluded there, each for a stated platform reason, not a workaround:
persona.e2e.test.ts needs /usr/bin/expect, and telemetry-multi-tool.e2e.test.ts puts an
extensionless #!/bin/sh stand-in on PATH, which Windows resolves by PATHEXT and never by
a shebang.

POSIX modes carry no information on Windows. Measured, not read from documentation:
statSync().mode & 0o777 reports 0o666 for every writable file whatever it was chmod'ed
to, and 0o444 when read-only. So 0700/0600 on the journal is not a privacy guarantee
there — it is a no-op, and any claim resting on it must say so.

What is actually left

  • One real session per tool, on Windows and on Linux, that journals and reports. With the
    tool's own binary, not a stand-in. CI proves the chain against captured payloads; it does
    not prove that a real Claude Code, Codex, Copilot, Cursor or OpenCode session on those
    platforms writes what the reader expects.
  • What replaces the mode bits on Windows, if anything does. Either the journal's privacy
    rests on the directory ACL and that is stated, or it is stated that it rests on nothing.

Done when

  • The figures are written where each platform expects them, and where they are written is stated per platform.
  • The journal's privacy on Windows is established by observation, and if POSIX modes mean nothing there, that is written down rather than implied.
  • One real session per tool that runs on the platform, on Windows and on Linux, journals and reports.

That last box overlaps #694, which proves the same chain under load. Whichever runs first
should carry both.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Fields

    Priority

    None yet

    Projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions