Skip to content

perf(test): cut audit-fleet.test.sh's Windows wall clock (511 s against 34 s on Linux) #13232

Description

@kyle-sexton

Parent: #3716 (criteria 3 and 4). Measured in #10241, docs/test-wall-clock-baseline.md.

Problem

plugins/repo-fleet-hygiene/skills/audit/scripts/audit-fleet.test.sh took 511 s on the Windows Git Bash host in #10241's corpus run, against 34 s on Linux CI: 15 times slower, the largest ratio of the suites measured. It also exited nonzero there; that failure is the Windows-only-failures slice's, and this slice is its run time.

Fix

Profile the suite and audit-fleet with scripts/run-plugin-tests.sh's timing option (#10200) and a spawn count. Cut the spawns the way #3716 step 3 lists: builtins over subprocesses, one batched git call over many, hoisted walks, shared fixture repositories over one per case. The suites must pass unchanged, so behavior is preserved.

Done when

  • Linux wall clock for the suite, before and after, is in the PR body
  • The Windows time, re-measured on a Windows Git Bash host, is in the PR body and in the suite's row in docs/test-wall-clock-baseline.md
  • The suite's assertions are unchanged (any test edit is a fixture or harness change, named in the PR body)
  • ci-status is green on the PR head

Split by the backlog HITL session from #10241's result. This was generated by AI.

Activity

  1. added
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Nov 4, 2026
  2. github-actions commented on Nov 4, 2026

    @github-actions
    Contributor

    Proposed work class: work-class: scoped
    Basis: automated intake triage; the lanes App applied this class.

    Size: Small
    Complexity: Medium
    Uncertainty: Knowable
    Flags: none
    Blocked by: none

    Understood: cut process spawns in audit-fleet.sh and audit-fleet.test.sh so the suite runs faster, which matters most on Windows Git Bash (511 s against 34 s on Linux). The suite's assertions must stay unchanged. The PR body should carry the Linux before and after times. The Windows re-measurement is a host check for a person, and the earlier refinement already split it out. The suite's Windows-only failure belongs to #13228. Related: #3716, #13229, #13231. No duplicate found.

    Automated triage, applied by the lanes App.

  3. added
    priority: mediumReal value, no hard deadline; normal backlog flow.
    and removed
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Nov 4, 2026
  4. added
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.
    on Nov 4, 2026
  5. added
    status: needs-decisionAwaiting a human or maintainer judgment call.
    and removed
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    on Nov 4, 2026
  6. melodic-automation-lanes commented on Nov 4, 2026

    @melodic-automation-lanes
    Contributor

    Not admitted to the issue lane: its done-when asks for what an unattended lane run cannot perform: item 2 (measure-over-time: "The Windows time, re-measured on a Windows Git Bash host, is in the PR body a..."); recommended split: keep the other items here as the admissible issue and move these to a child issue for the host queue (host-run). Admission takes the issue once each of those is met, when intake triages it again (.github/actions/resolve-config/admission-rules.json).

  7. melodic-automation-lanes commented on Nov 4, 2026

    @melodic-automation-lanes
    Contributor

    The latest triage verdict holds nothing: the issue is at status: ready.

  8. 8 remaining items

  9. removed
    admission-deferredAdmitted but waiting for WIP room; the hourly work-unblock sweep labels it agent-ready.
    on Nov 4, 2026
  10. added
    host-runNeeds an unattended run on a host; the host runner takes it, not a person or the issue lane.
    on Nov 4, 2026
  11. github-actions commented on Nov 4, 2026

    @github-actions
    Contributor
    No description provided.
  12. kyle-sexton commented on Nov 4, 2026

    @kyle-sexton
    MemberAuthor

    Decision recorded. Route this issue to the host queue whole, for a laptop lane with a Windows Git Bash host.
    Agent choice, not an owner answer.

    Admission refused it for the lane because Done-when item 2 needs a Windows Git Bash host, and a child issue for that one step would raise the open count, so the issue goes host-run instead. The spawn cuts and the Linux before/after can be built and measured on Linux; only the Windows re-measure needs the Windows host, so one host session does the whole change in one PR. The body's Done-when stands unchanged.

    • On a fleet host with Windows Git Bash, re-measure the suite before and after the change and record both times in the PR body and in the suite's row in docs/test-wall-clock-baseline.md.
  13. github-actions commented on Nov 4, 2026

    @github-actions
    Contributor
    No description provided.
  14. removed
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Nov 4, 2026
  15. melodic-automation-lanes commented on Nov 4, 2026

    @melodic-automation-lanes
    Contributor

    The work-resolve-issue lane stopped on this issue (host-only): the run reports the work needs a host run the lane cannot make.
    It added host-run and removed agent-ready: an agent run on a host builds it, and it waits on no decision from a person.

    In the run's words:

    host-only: the issue's fix starts by profiling audit-fleet.test.sh and audit-fleet.sh with scripts/run-plugin-tests.sh --timings and a spawn count, and its done-when needs the suite's Linux wall clock measured before and after the change. This lane cannot run the suite, the profiler or any test (its Bash runs only the named check and verify wrappers), so it can neither find which spawns cost the time nor measure the result. Changing the code without a profile would be a guess. The issue is labeled host-run; a host session with a shell should take it.

    What the run says it did not do:

    • Profiling audit-fleet.test.sh with scripts/run-plugin-tests.sh --timings and a spawn count: this lane cannot run scripts or tests
    • Linux wall clock for the suite before and after the change, for the PR body: cannot run the suite here
    • Windows Git Bash re-measurement and the baseline doc row update: listed in person_checks, left to a person

    Run: https://github.com/melodic-software/claude-code-plugins/actions/runs/41838904070

    To hand it back to the lane, remove host-run and add agent-ready again.

  16. self-assigned this
    on Nov 4, 2026
  17. kyle-sexton commented on Nov 4, 2026

    @kyle-sexton
    MemberAuthor
    No description provided.
  18. removed
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    host-runNeeds an unattended run on a host; the host runner takes it, not a person or the issue lane.
    on Nov 4, 2026
  19. kyle-sexton commented on Nov 4, 2026

    @kyle-sexton
    MemberAuthor

    Shipped in #13374 (merged 324f98e). Windows Git Bash on melo-lap-001, run-plugin-tests.sh --timings, --jobs 1, native C: clone, two pairs alternated with nothing else of this lane running:

    Before (main 59519e4) After
    Windows (s) 544, 403 (one earlier single run: 554) 269, 266
    Linux suite, three alternated pairs (s) 42.4, 55.9, 29.2 31.5, 24.8, 22.5
    Execs per suite run, strace -f (Linux) 11,832 7,391

    All cases pass on both sides with identical result lines, and the production --detail report and plan are identical. The cut removed the tr pipe from every Git probe, tr from lower(), and basename from the suite's git mock: the top three fork sites in a per-pid trace. docs/test-wall-clock-baseline.md now lists 268 s for this suite. It is still about 8 times the Linux time, so #3716's budget work goes on there.

    Posted by host-run Lane 5. This was generated by AI.

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

Metadata

Metadata

Assignees

Labels

priority: mediumReal value, no hard deadline; normal backlog flow.work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.

Type

Fields

Work status

agent-ready

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions