Skip to content

test(windows): a native install runs every Claude Code hook through Git Bash - #1774

Merged
apackeer merged 2 commits into
mainfrom
test/windows-hooks-through-git-bash
Oct 4, 2026
Merged

apackeer merged 2 commits into
mainfrom
test/windows-hooks-through-git-bash

Conversation

@apackeer

@apackeer apackeer commented Oct 4, 2026 •

Copy link
Copy Markdown
Contributor

Summary

On a native Windows install, Claude Code once ran none of AI-DLC's hooks: every hook printed /usr/bin/bash: line 1: aidlc: command not found, so the workflow ran with no guards, no audit and no stage rules. #1543 fixed it, but nothing in the merge queue ran the path a person's machine takes, and the launcher test meant to cover it on Windows never ran there. This adds a test that installs the release the way a person does and runs every hook through the shell Claude Code uses, and makes the launcher cases really run on Windows.

Changes

  • tests/unit/t-native-install-hooks.test.ts (new): installs this checkout's release into throwaway folders through the real lifecycle (with this checkout's compiled engine in place of the fixture binary), runs aidlc config for Claude Code through the installed aidlc, starts a workflow, then runs every hook command and the status line from the project's settings.json through the shell Claude Code uses (Git Bash on Windows, sh elsewhere). Each hook must exit 0 and show in the hook phase trace that it ran to completion. Doctor then answers through the same shell with no failing hook row, and on Windows the "Windows launcher (Git Bash)" row passes. It also configures Kiro CLI and sends /aidlc --doctor through Kiro CLI's prompt hook, which must answer with the doctor report.
  • tests/harness/git-bash.ts (new): finds Git Bash's bash.exe and sh.exe where Git for Windows installs them.
  • tests/unit/t-windows-gitbash-launcher.test.ts: three cases returned early when existsSync("/bin/sh") was false. Bun on Windows reads /bin/sh as C:\bin\sh, which does not exist, so since fix: install extensionless bin/aidlc forwarder for Windows Git Bash #1543 they have passed on Windows without running: in merge group 37171086161 (Windows unit-9) they took 0.12, 0.05 and 0.06 ms. They now use Git Bash's sh on Windows. Two of them then failed there for test-harness reasons, not product ones: the stub aidlc.cmd was a shell script, which Git Bash hands to cmd.exe on Windows, and a multi-line sh -c argument was requoted by the Windows command line. On aidlc-dev-2 the real forwarder with a batch-file stub passed exit code 7 and the arguments hello, two words and an empty one intact, and the normalisation loop run from a file gave C:/Users/me/bin/aidlc. The cases now use a batch-file stub and a script file on Windows.

User experience

No product change. What it guards, in what a person sees:

  • Before: a release that broke the Git Bash launcher would pass the merge queue, and a person on a native Windows install would get "aidlc: command not found" from every hook, with AI-DLC silently not running its hooks.
  • After: the merge queue's Windows leg installs the release, runs every Claude Code hook through Git Bash, and fails on that error. A broken Kiro CLI /aidlc --doctor on a native install fails it too.

Checklist

If an item does not apply, leave it unchecked.

  • I have reviewed the contributing guidelines
  • I have performed a self-review of this change
  • Changes have been tested
  • Changes are documented
  • If this change adds an input to any fingerprint, epoch, or receipt identity, the description names the human-visible change it detects

Test plan

On aidlc-dev-2 (Windows Server 2025, Git for Windows, Bun 1.3.14), bash tests/run-tests.sh --unit --filter "t-native-install-hooks|t-windows-gitbash-launcher":

On Linux the same filter passes (13 cases). deterministic-tests.yml dispatches with the same filter: on the first head, windows-latest run 37179312105 and macos-15 run 37179313562; on this head (after the AIDA fixes), windows-latest run 37181110675, 5 of 5 new cases and 10 of 10 launcher cases pass (none skipped), and macos-15 run 37182856237, 5 of 5 new cases and 8 launcher cases pass, with the 2 Windows-only cases skipped.

After AIDA: the test checks that the shell resolves aidlc to the launcher it installed (a developer's own install later on PATH could otherwise hide a missing one), and a local Windows run without Git for Windows skips the Git Bash cases, which always run in GitHub Actions.

Readiness: this PR adds a unit test and a test harness helper and changes one unit test; nothing the local integration tier runs imports them, so its evidence is PR CI, the merge queue on all three OSes, and the two dispatches above (no local integration tier). PR CI runs the new test on Linux; the merge queue runs it on Linux, macOS and Windows. It takes 66 s on aidlc-dev-2 and 124 s on a loaded Linux box, mostly the install, one engine compile (as t-native-hook-project-root already does) and 19 hook runs; it has no entry in tests/unit-shard-weights.json yet, so its shard uses the default weight until the weights are next refreshed.

Acknowledgment

By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of the project license.

…it Bash

On a native Windows install Claude Code ran none of AI-DLC's hooks: Git
Bash, where Claude Code runs hook commands, could not find a bare `aidlc`,
and every hook printed "aidlc: command not found". The extensionless
launcher fixed that, but nothing in the merge queue ran the path a person's
machine takes.

t-native-install-hooks installs this checkout's release into throwaway
folders, configures a project through the installed `aidlc`, starts a
workflow, runs every hook command and the status line from the project's
settings.json through the shell Claude Code uses (Git Bash on Windows, sh
elsewhere), checks each one ran to completion in the hook phase trace, and
asks doctor through the same shell.

The launcher test's three cases that run the forwarder under a POSIX shell
returned early on Windows: Bun cannot see Git Bash's /bin, so
existsSync("/bin/sh") was false and they passed without running. They now
use Git Bash's sh there, found by the new tests/harness/git-bash.ts.
@github-actions

github-actions Bot commented Oct 4, 2026 •

Copy link
Copy Markdown
Contributor

AIDA findings ledger

ID Sev Status Title Decided by
F1 P1 🟡 accepted Regenerate the coverage registry for the new test @apackeer · 2026-10-04 · Not the case here: since the per-unit coverage registry change the file holds unit entries only, and this test covers units other tests already cover, so regenerating changes nothing. bun tests/gen-coverage-registry.ts --check passes on this head, and every PR CI unit shard, which runs the registry ratchet, passed.
F2 P1 ✅ resolved Default Windows tests now require Git Bash AIDA · 699e478
F3 P2 ✅ resolved An existing aidlc can mask a missing test launcher AIDA · 699e478
F4 P3 ⚪ rejected Expose the Git Bash skip reason @apackeer · 2026-10-04 · Diagnostic polish only: the skip happens only for a contributor on Windows without Git for Windows, Bun already lists those cases as skipped, and in GitHub Actions they never skip. Not worth another review round on a test-only change.

Open blocking findings (P0/P1): 0. Accepted and rejected findings never count toward the next action.

Maintainer commands (repository write access) — put them on the first lines of a comment, one per line, several ids per line allowed:
/aida accept F# [F#…] <reason> · /aida reject F# [F#…] <reason> · /aida reopen F# [F#…] · /aida status · /aida full (next review covers the whole head)
P0 and P1 findings can be accepted (visible, risk owned by the maintainer) but not rejected. A comment is applied all-or-nothing.
Do not edit this comment: AIDA verifies its digest and refuses to run on an edited ledger. To start over, delete it.

ledger.json
{
  "version": 4,
  "pullRequest": 1774,
  "nextId": 5,
  "findings": [
    {
      "id": "F1",
      "priority": "P1",
      "category": "contracts",
      "title": "Regenerate the coverage registry for the new test",
      "anchors": [
        {
          "kind": "line",
          "path": "tests/unit/t-native-install-hooks.test.ts",
          "side": "RIGHT",
          "sha256": "93e89f009afefa9ed0d40204bbef95ddfad80f95eefc20a12c2b86962890f68f"
        }
      ],
      "status": "accepted",
      "firstSeen": {
        "head": "bef1c839766b0fa2c4bf98763d67768f41d53ffb",
        "at": "2026-10-04T05:30:37.719Z"
      },
      "lastSeen": {
        "head": "bef1c839766b0fa2c4bf98763d67768f41d53ffb",
        "at": "2026-10-04T05:30:37.719Z"
      },
      "decision": {
        "by": "apackeer",
        "at": "2026-10-04T05:52:04.380Z",
        "reason": "Not the case here: since the per-unit coverage registry change the file holds unit entries only, and this test covers units other tests already cover, so regenerating changes nothing. bun tests/gen-coverage-registry.ts --check passes on this head, and every PR CI unit shard, which runs the registry ratchet, passed.",
        "commentId": 5977078353
      }
    },
    {
      "id": "F2",
      "priority": "P1",
      "category": "contracts",
      "title": "Default Windows tests now require Git Bash",
      "anchors": [
        {
          "kind": "line",
          "path": "tests/harness/git-bash.ts",
          "side": "RIGHT",
          "sha256": "c077c62107d72f659e056e3967d56c0c1a7d367bd5f0103e082684871af2c49a"
        },
        {
          "kind": "line",
          "path": "tests/unit/t-native-install-hooks.test.ts",
          "side": "RIGHT",
          "sha256": "514cdfe9ec94b62ea9ad277586768791c62bb2f41d1a6189f4430f1b5bf1cbb8"
        },
        {
          "kind": "line",
          "path": "tests/unit/t-windows-gitbash-launcher.test.ts",
          "side": "RIGHT",
          "sha256": "596dda0635a9a235d4fb036f542e30bf076751be5b104560a85a6baafa7ab4ff"
        }
      ],
      "status": "resolved",
      "firstSeen": {
        "head": "bef1c839766b0fa2c4bf98763d67768f41d53ffb",
        "at": "2026-10-04T05:30:37.719Z"
      },
      "lastSeen": {
        "head": "699e4785048143772d209b0365dd81ffbc915ebe",
        "at": "2026-10-04T06:11:02.660Z"
      }
    },
    {
      "id": "F3",
      "priority": "P2",
      "category": "correctness",
      "title": "An existing aidlc can mask a missing test launcher",
      "anchors": [
        {
          "kind": "line",
          "path": "tests/unit/t-native-install-hooks.test.ts",
          "side": "RIGHT",
          "sha256": "0cbc7db3adceaaffe4782b3a8a56a438c9b52fe33a834d5dbe8b6e2129c819df"
        },
        {
          "kind": "line",
          "path": "tests/unit/t-native-install-hooks.test.ts",
          "side": "RIGHT",
          "sha256": "db207c19718c9f0d50944a326757077d3e138303e729e5ada6ed5c1f1457e497"
        }
      ],
      "status": "resolved",
      "firstSeen": {
        "head": "bef1c839766b0fa2c4bf98763d67768f41d53ffb",
        "at": "2026-10-04T05:30:37.719Z"
      },
      "lastSeen": {
        "head": "699e4785048143772d209b0365dd81ffbc915ebe",
        "at": "2026-10-04T06:11:02.660Z"
      }
    },
    {
      "id": "F4",
      "priority": "P3",
      "category": "user-experience",
      "title": "Expose the Git Bash skip reason",
      "anchors": [
        {
          "kind": "line",
          "path": "tests/harness/git-bash.ts",
          "side": "RIGHT",
          "sha256": "8f57c486d5264c5dbae734cd82f73e732ac22efc9e6ec1fa45e59d0876e04337"
        },
        {
          "kind": "line",
          "path": "tests/unit/t-native-install-hooks.test.ts",
          "side": "RIGHT",
          "sha256": "146854e26f263c3810f02dbe6b3162c512aedcb80ddc453d6e64d0f588d94ac1"
        },
        {
          "kind": "line",
          "path": "tests/unit/t-windows-gitbash-launcher.test.ts",
          "side": "RIGHT",
          "sha256": "02b448ec9ad12197235c19fb527bd54dba23c8526e87971e636d62e6bcf3f566"
        }
      ],
      "status": "rejected",
      "firstSeen": {
        "head": "699e4785048143772d209b0365dd81ffbc915ebe",
        "at": "2026-10-04T06:11:02.660Z"
      },
      "lastSeen": {
        "head": "699e4785048143772d209b0365dd81ffbc915ebe",
        "at": "2026-10-04T06:11:02.660Z"
      },
      "decision": {
        "by": "apackeer",
        "at": "2026-10-04T06:27:39.170Z",
        "reason": "Diagnostic polish only: the skip happens only for a contributor on Windows without Git for Windows, Bun already lists those cases as skipped, and in GitHub Actions they never skip. Not worth another review round on a test-only change.",
        "commentId": 5977307819
      }
    }
  ],
  "events": [
    {
      "at": "2026-10-04T05:30:37.719Z",
      "kind": "opened",
      "by": "aida",
      "id": "F1",
      "head": "bef1c839766b0fa2c4bf98763d67768f41d53ffb"
    },
    {
      "at": "2026-10-04T05:30:37.719Z",
      "kind": "opened",
      "by": "aida",
      "id": "F2",
      "head": "bef1c839766b0fa2c4bf98763d67768f41d53ffb"
    },
    {
      "at": "2026-10-04T05:30:37.719Z",
      "kind": "opened",
      "by": "aida",
      "id": "F3",
      "head": "bef1c839766b0fa2c4bf98763d67768f41d53ffb"
    },
    {
      "at": "2026-10-04T05:52:04.380Z",
      "kind": "accepted",
      "by": "apackeer",
      "id": "F1",
      "reason": "Not the case here: since the per-unit coverage registry change the file holds unit entries only, and this test covers units other tests already cover, so regenerating changes nothing. bun tests/gen-coverage-registry.ts --check passes on this head, and every PR CI unit shard, which runs the registry ratchet, passed.",
      "commentId": 5977078353
    },
    {
      "at": "2026-10-04T06:11:02.660Z",
      "kind": "resolved",
      "by": "aida",
      "id": "F2",
      "head": "699e4785048143772d209b0365dd81ffbc915ebe",
      "reason": "declared corrected by the judge; a cited line is gone"
    },
    {
      "at": "2026-10-04T06:11:02.660Z",
      "kind": "resolved",
      "by": "aida",
      "id": "F3",
      "head": "699e4785048143772d209b0365dd81ffbc915ebe",
      "reason": "declared corrected by the judge; cited files changed since the last review"
    },
    {
      "at": "2026-10-04T06:11:02.660Z",
      "kind": "opened",
      "by": "aida",
      "id": "F4",
      "head": "699e4785048143772d209b0365dd81ffbc915ebe"
    },
    {
      "at": "2026-10-04T06:27:39.170Z",
      "kind": "rejected",
      "by": "apackeer",
      "id": "F4",
      "reason": "Diagnostic polish only: the skip happens only for a contributor on Windows without Git for Windows, Bun already lists those cases as skipped, and in GitHub Actions they never skip. Not worth another review round on a test-only change.",
      "commentId": 5977307819
    }
  ],
  "review": {
    "head": "699e4785048143772d209b0365dd81ffbc915ebe",
    "readiness": 4,
    "risk": 2,
    "decision": "merge"
  }
}

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed bef1c839766b0fa2c4bf98763d67768f41d53ffb against f735746aea8c80b21de358c1aa286779a29f68d6 and current repository behavior.

Inspection: 3 changed files. Scope: full head (first review of this pull request).

Final Assessment

Human decision aid only: Readiness 5/5 is best; Risk 1/5 is best. These scores inform the maintainer; the next action below follows finding severity (any open P0/P1 → author/change) and does not approve or merge the PR.

Readiness: 2/5 — The new test deterministically leaves the committed coverage registry stale, so the unit gate will fail. The Windows suite also violates its documented Bun-only prerequisite.

Risk: 3/5 — The change is test-only and reversible, but it affects the default cross-platform suite and can provide false confidence about the launcher regression.

Decision required: Author — make changes before this PR proceeds. The guaranteed stale-registry gate failure and Windows test-substrate compatibility regression require correction.

Validation performed:

  • Inspected all three changed files, complete diff, and head snapshots.
  • Inspected repository instructions, test contracts, coverage-registry generator, runner, lifecycle implementation, and Windows CI workflows.
  • Verified the immutable base and head SHAs and found no ledger entries or maintainer decisions.
  • Performed read-only static validation; repository code was not executed.

Findings: 2 blocking, 1 advisory.

Ledger: 3 open, 0 retained blocking, 0 accepted, 0 suppressed as rejected by a maintainer. Maintainers act on findings with /aida commands in the ledger comment.

Contracts & Compatibility

P1 [F1]: Regenerate the coverage registry for the new test

Evidence: tests/unit/t-native-install-hooks.test.ts:1.

Problem: The coverage generator enumerates every `t*.test.ts` and records its `covers:` claims, but the committed `tests/.coverage-registry.json` does not include this new test. The live registry-ratchet unit invokes the generator with `--check`, which will report a freshness diff and fail.

Impact: A Linux unit shard in every PR runs this ratchet, so the proposed head cannot pass the required test gate.

Required correction: Regenerate and commit `tests/.coverage-registry.json`, then verify `bun tests/gen-coverage-registry.ts --check` succeeds.

P1 [F2]: Default Windows tests now require Git Bash

Evidence: tests/harness/git-bash.ts:31, tests/unit/t-native-install-hooks.test.ts:103, tests/unit/t-windows-gitbash-launcher.test.ts:129.

Problem: On Windows, the new native-install setup and three formerly guarded launcher cases resolve Git Bash unconditionally; the helper throws when it is absent. This contradicts the documented deterministic-suite contract that native tests require only Bun and that the native runner itself does not require Bash.

Impact: A supported default Windows test run fails before testing product behavior on machines without Git for Windows, making the documented contributor workflow invalid.

Required correction: Keep missing Git Bash skippable for ordinary local runs while making its presence and execution mandatory in the Windows merge-queue lane, with deterministic coverage evidence there.

Correctness & Reliability

P2 [F3]: An existing aidlc can mask a missing test launcher

Evidence: tests/unit/t-native-install-hooks.test.ts:132, tests/unit/t-native-install-hooks.test.ts:152.

Problem: The temporary bin directory is prepended to the inherited PATH, but the test never verifies which `aidlc` Git Bash resolves. If the tested installation omits its extensionless launcher and the developer already has another `aidlc` later on PATH, configuration, hooks, and doctor can run that unrelated installation and pass.

Impact: The regression test can report success under the exact missing-launcher condition it is intended to detect, weakening protection on common developer machines.

Required correction: Before configuration, resolve the bare `aidlc` through the selected shell and assert that it is the temporary installation's extensionless launcher, or otherwise isolate command lookup without removing required system tools.

User Experience

User experience change: Windows contributors now exercise previously skipped Git Bash launcher behavior, but the default native test run fails when Git Bash is unavailable.

Before: The launcher cases silently returned without running on Windows, while the documented native deterministic suite required only Bun.

After: The cases and new native-install test run through Git Bash unconditionally, throwing when Git for Windows is absent.

Example: Running `bun tests/run-tests.ts` on Windows without Git Bash now fails with the helper's missing-installation error.

Assessment: The added coverage is valuable, but imposing an undocumented prerequisite worsens the supported contributor workflow.

Residual risk: Windows shell execution was not run under the read-only review contract; quoting and path conversion were assessed statically.

Reviewed by AIDA (AI-DLC Developer Agent).

[AI-PR-REVIEWED] bef1c83

@github-actions github-actions Bot added action:change AIDA indicates changes are required before the PR proceeds aida:reviewed AIDA successfully reviewed the latest PR state next:author AIDA indicates the PR author needs to act next labels Oct 4, 2026
…Git Bash

The native-install test now checks that the shell resolves `aidlc` to the
launcher it just installed: a developer's own AI-DLC install later on PATH
would otherwise run in its place and hide a missing launcher.

Git for Windows is a prerequisite of the full suite on Windows, not of the
native runner, so a local run without it skips the cases that run Git Bash.
In GitHub Actions they always run, and fail if Git Bash is missing.
@apackeer

apackeer commented Oct 4, 2026

Copy link
Copy Markdown
Contributor Author

/aida accept F1 Not the case here: since the per-unit coverage registry change the file holds unit entries only, and this test covers units other tests already cover, so regenerating changes nothing. bun tests/gen-coverage-registry.ts --check passes on this head, and every PR CI unit shard, which runs the registry ratchet, passed.

@apackeer
apackeer deployed to ai-pr-review October 4, 2026 05:51 — with GitHub Actions Active
@github-actions github-actions Bot removed aida:reviewed AIDA successfully reviewed the latest PR state next:author AIDA indicates the PR author needs to act next action:change AIDA indicates changes are required before the PR proceeds labels Oct 4, 2026

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed 699e4785048143772d209b0365dd81ffbc915ebe against f735746aea8c80b21de358c1aa286779a29f68d6 and current repository behavior.

Inspection: 3 changed files. Scope: incremental — 3 files with lines changed since the review at bef1c839; the security lenses reviewed the full head. Findings on lines unchanged since that review are deferred, not decisive.

Final Assessment

Human decision aid only: Readiness 5/5 is best; Risk 1/5 is best. These scores inform the maintainer; the next action below follows finding severity (any open P0/P1 → author/change) and does not approve or merge the PR.

Readiness: 4/5 — Both previously open blocking defects are corrected. Only a low-impact diagnostic gap remains in local Windows skip reporting.

Risk: 2/5 — The change is confined to tests and CI coverage, with narrow and reversible impact. Windows shell execution could only be assessed statically.

Decision required: Maintainer — decide whether to merge this PR. The two open ledger defects are resolved, and the sole remaining P3 concerns non-blocking skip diagnostics.

Validation performed:

  • Inspected the complete diff, all three changed-file snapshots, incremental review scope, PR metadata and discussion, specialist outputs, and findings ledger.
  • Inspected related test-runner skip handling, Windows prerequisites documentation, release fixtures, guard profiles, timeout helpers, sharding contracts, and Windows CI/full-suite workflows.
  • Verified the current head makes Git Bash mandatory in GitHub Actions but skips dependent cases on local Windows machines without it.
  • Verified the current head asserts that the selected shell resolves aidlc to the temporary installation before exercising hooks.
  • Performed read-only static validation; repository code was not executed.

Findings: 0 blocking, 1 advisory.

Ledger: 1 open, 0 retained blocking, 1 accepted, 0 suppressed as rejected by a maintainer, resolved F2, F3 (F2, F3 declared corrected by the judge). Maintainers act on findings with /aida commands in the ledger comment.

User Experience

User experience change: Windows contributors running the test suite now execute the Git Bash launcher and native-install hook coverage when Git Bash is available; local machines without it skip those cases, while CI treats its absence as a failure.

Before: Three launcher cases returned early on Windows and appeared to pass without exercising their assertions; the native-install hook test did not exist.

After: Eight Git-Bash-dependent cases execute when the prerequisite is available and use explicit skip semantics locally when it is absent.

Example: A Windows merge-queue run now installs the release and exercises every Claude Code hook through Git Bash instead of silently bypassing the launcher path.

Assessment: This materially improves regression coverage, though local skips do not expose the computed prerequisite reason or recovery step.

P3 [F4]: Expose the Git Bash skip reason

Evidence: tests/harness/git-bash.ts:48, tests/unit/t-native-install-hooks.test.ts:190, tests/unit/t-windows-gitbash-launcher.test.ts:37.

Problem: On local Windows machines without Git for Windows, the helper computes a specific reason, but both callers reduce it to a boolean skip condition. The native-install file is therefore reported with the runner's generic all-skipped message, while the launcher file can pass with three skipped cases, providing neither the cause nor the recovery step.

Impact: Contributors can miss that eight Windows-specific cases were omitted or mistake the omission for exercised coverage. Impact is low because the prerequisite is documented and CI still requires execution.

Required correction: Include SKIP_REASON in the skipped suite/test names or emit another visible diagnostic that names Git for Windows as the prerequisite and recovery step.

Accepted risks

P1 [F1]: Regenerate the coverage registry for the new test — accepted by @apackeer on 2026-10-04: Not the case here: since the per-unit coverage registry change the file holds unit entries only, and this test covers units other tests already cover, so regenerating changes nothing. bun tests/gen-coverage-registry.ts --check passes on this head, and every PR CI unit shard, which runs the registry ratchet, passed.

Residual risk: Windows-specific shell lookup, quoting, and launcher behavior were not executed under the read-only review contract.

Reviewed by AIDA (AI-DLC Developer Agent).

[AI-PR-REVIEWED] 699e478

@github-actions
github-actions Bot dismissed their stale review October 4, 2026 06:11

Superseded by AI review of 699e478

@github-actions github-actions Bot added action:merge AIDA considers the PR ready for a maintainer merge decision aida:reviewed AIDA successfully reviewed the latest PR state next:maintainer AIDA indicates a maintainer needs to act next labels Oct 4, 2026
@apackeer

apackeer commented Oct 4, 2026

Copy link
Copy Markdown
Contributor Author

/aida reject F4 Diagnostic polish only: the skip happens only for a contributor on Windows without Git for Windows, Bun already lists those cases as skipped, and in GitHub Actions they never skip. Not worth another review round on a test-only change.

@apackeer
apackeer added this pull request to the merge queue Oct 4, 2026
@apackeer
apackeer deployed to ai-pr-review October 4, 2026 06:30 — with GitHub Actions Active
@github-actions github-actions Bot removed aida:reviewed AIDA successfully reviewed the latest PR state next:maintainer AIDA indicates a maintainer needs to act next action:merge AIDA considers the PR ready for a maintainer merge decision labels Oct 4, 2026

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed 699e4785048143772d209b0365dd81ffbc915ebe against f735746aea8c80b21de358c1aa286779a29f68d6 and current repository behavior.

Inspection: 3 changed files. Scope: full head (this head was already reviewed).

Final Assessment

Human decision aid only: Readiness 5/5 is best; Risk 1/5 is best. These scores inform the maintainer; the next action below follows finding severity (any open P0/P1 → author/change) and does not approve or merge the PR.

Readiness: 4/5 — The test coverage is coherent, exercises the intended native installation and shell paths, and no surviving defect was identified. Platform-specific execution remains externally validated rather than reproduced during this read-only review.

Risk: 2/5 — The change affects tests and CI coverage rather than shipped behavior. Its impact is narrow and reversible, with residual uncertainty limited to Windows Git Bash lookup, quoting, and execution behavior.

Decision required: Maintainer — decide whether to merge this PR. No surviving P0 or P1 finding was identified in the reviewed head.

Validation performed:

  • Inspected the complete diff and head snapshots for all three changed files.
  • Inspected repository instructions, test-runner contracts, Windows CI workflows, release fixtures, hook registrations, dispatcher tracing, and launcher implementation.
  • Reviewed PR metadata, discussion, specialist outputs, prior AI reviews, review scope, and findings ledger.
  • Confirmed the change remains test-only and both previously identified implementation defects are corrected.
  • Performed read-only static checks, including diff validation; repository code was not executed.

Findings: 0 blocking, 0 advisory.

Ledger: 0 open, 0 retained blocking, 1 accepted, 0 suppressed as rejected by a maintainer. Maintainers act on findings with /aida commands in the ledger comment.

No findings.

User Experience

User experience change: Windows contributors and maintainers now receive real execution coverage for native-install hooks and Git Bash launcher behavior instead of apparent passes from unexecuted tests.

Before: Three launcher cases returned without assertions on Windows, and no test installed a release and exercised every Claude Code hook through Git Bash.

After: The launcher cases and native-install journey execute when Git Bash is available; hosted CI fails if it is unavailable, while ordinary local Windows runs skip the dependent cases.

Example: A Windows merge-queue run now installs AI-DLC, resolves the installed launcher, and executes every configured Claude Code hook through Git Bash.

Assessment: This improves regression detection without changing the shipped user workflow or imposing Git Bash on ordinary local native-runner use.

Accepted risks

P1 [F1]: Regenerate the coverage registry for the new test — accepted by @apackeer on 2026-10-04: Not the case here: since the per-unit coverage registry change the file holds unit entries only, and this test covers units other tests already cover, so regenerating changes nothing. bun tests/gen-coverage-registry.ts --check passes on this head, and every PR CI unit shard, which runs the registry ratchet, passed.

Residual risk: Windows-specific shell lookup, quoting, and launcher execution were assessed statically and not run under the read-only review contract.

Reviewed by AIDA (AI-DLC Developer Agent).

[AI-PR-REVIEWED] 699e478

@github-actions github-actions Bot added action:merge AIDA considers the PR ready for a maintainer merge decision aida:reviewed AIDA successfully reviewed the latest PR state next:maintainer AIDA indicates a maintainer needs to act next labels Oct 4, 2026
Merged via the queue into main with commit 7bb30f7 Oct 4, 2026
43 checks passed
@apackeer
apackeer deleted the test/windows-hooks-through-git-bash branch October 4, 2026 07:00
apackeer added a commit that referenced this pull request Oct 4, 2026
…er-reaches-the-person

* origin/main:
  test(windows): a native install runs every Claude Code hook through Git Bash (#1774)
  fix(config): a settings change is done while work is open, with its undo (#1719)
  fix(routing): answer the no-selection routing question's options as the person meant them (#1755)
  fix(workspace): existing code brings back the Reverse Engineering a composed plan left out (#1756)
  fix(reverse-engineering): the scan record lists build output as left out, not skimmed (#1762)
  fix(release): an install of 2.10.0 can update to this release again (#1765)
  fix(learnings): the ritual's commands name the stage, and their refusals say how to run them (#1748)
  fix(plugin): let a composed plugin that owns no stage or scope be selected (#1675)
  fix(kiro): /aidlc --doctor, --version, and --help work on a native Kiro CLI install (#1751)
  test(runner): a process group that only holds exiting members is still retiring (#1749)
apackeer added a commit that referenced this pull request Oct 4, 2026
…el-step

* origin/main:
  fix(doctor): a stop the person asked for is not reported as a hook failure (#1769)
  fix(routing): settings typed with new work over an open question reach the work it becomes (#1761)
  docs(kiro-ide): what the window title at the end of a Windows command card is, and the setting that stops it (#1780)
  fix(scope): a scope change at a waiting gate says one line and waits for the next /aidlc (#1763)
  fix(claude): what session start and each message tell the agent reaches it (#1775)
  fix(kiro-ide): personas run bun --version without an approval card (#1781)
  fix(construction): the last Code Generation gate does not ask about a built plan again (#1771)
  fix(construction): a jump ahead moves only the unit in flight on (#1773)
  fix(skill): stages the person names are skipped or added at once, on every harness (#1768)
  fix(codex): no "Under-development features enabled" warning at every Codex start (#1760)
  fix(status): say what kind of work this is, and only what the person can act on (#1772)
  fix(checkpoint): a Unit's checkpoint question finds its own session (#1745)
  fix(install): a copy keeps the team's .gitignore and AGENTS.md (#1757)
  fix(opencode): the end-of-turn nudge and the /aidlc command text stay out of the person's chat (#1743)
  fix(lifecycle): a rollback goes to the version the person typed (#1767)
  test(windows): a native install runs every Claude Code hook through Git Bash (#1774)
  fix(config): a settings change is done while work is open, with its undo (#1719)
  fix(routing): answer the no-selection routing question's options as the person meant them (#1755)
  fix(workspace): existing code brings back the Reverse Engineering a composed plan left out (#1756)
  fix(reverse-engineering): the scan record lists build output as left out, not skimmed (#1762)

# Conflicts:
#	core/tools/aidlc-init.ts

This branch was successfully deployed

1 active deployment
ai-pr-review — 699e4785 Deployed Oct 4, 2026 by apackeer via Review pull request #2352
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

action:merge AIDA considers the PR ready for a maintainer merge decision aida:reviewed AIDA successfully reviewed the latest PR state next:maintainer AIDA indicates a maintainer needs to act next

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant