Skip to content

perf(hooks): desktop-lane measurements still open: typos-format per edit (B6), hook cancels after #6628 (B10), rate-limit readings across a rotation (B12) #6687

Open

Description

@kyle-sexton

Problem

Three measurements from the audit need the desktop lanes (native Windows and the desktop WSL lane) and were left open. Each decides whether a plugin change is worth making; none approves a code change by itself.

B6: typos-format per-edit cost on native Windows

  • Evidence: Edit p50 was 2.8 s (desktop WSL), 3.98 s for .md (desktop Windows) and 6.59 s (laptop Windows; 10.46 s at 16+ agents). typos-format measured 917 ms per edit on the laptop Windows lane but did not reproduce locally (125 ms or less). Related: perf(guardrails, eol-normalizer, typos-format): about 440 ms of hooks per Edit/Write across three node-to-bash hops #6635 (about 440 ms of hooks per Edit/Write across three node-to-bash hops).
  • Next step: time the PostToolUse hook inside a real session with claude --debug on native Windows, per extension, with and without concurrent agents.
  • After measuring, the plugin owner decides whether formatters move to commit/Stop. That trades away Claude seeing formatted output after each edit.

B10: hook cancels per script after #6628

B12: rate-limit-guard and context-guard readings around an account rotation

Acceptance criteria

  • One comment per item with the raw measurements (counts, p50/p90, lane, CLI version) and a verdict: change, no change, or owner decision needed.
  • Any follow-up change is filed as its own issue in the owning plugin.

Context: follow-up from the 2026-10-08/09 fleet friction and performance audit.

Activity

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

    @github-actions
    Contributor

    Thanks for the report. Automated triage handed this issue to a maintainer.

    Automated triage. A maintainer reviews it.

  3. added
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    on Oct 9, 2026
  4. added theissue type on Oct 12, 2026
  5. removed
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Oct 12, 2026
  6. kyle-sexton commented on Oct 13, 2026

    @kyle-sexton
    MemberAuthor

    Decision recorded. The owner approved applying independently verified recommendations on 2026-10-12.

    • B10: does the harness delete an orphaned version directory while a live session references it? → no; it removes it 14 days after marking it orphaned (added by verification)
      Basis: https://code.claude.com/docs/en/plugins/loading 'Cleanup of previous versions' fetched 2026-10-12

    Three measurements from the 2026-10-08/09 audit (typos-format per-edit cost on native Windows, hook_cancelled counts after #6628, rate-limit readings across an account rotation) still need the desktop lanes. #6628 merged 2026-10-08, so B10 is now measurable.

    Verification notes:

    Verified by an independent fresh-context check (doubtful, risk low): gh issue view 6687 (body; only triage comment, no measurements posted); gh pr view 6628: MERGED 2026-10-08T02:36:49Z; issue #6156 open; ~/.config/fleet/FLEET.md desktop endpoints; plugins/loading doc cleanup section

    Admission to an agent lane stays with the work-class rules and owner ratification.

  7. kyle-sexton commented on Oct 25, 2026

    @kyle-sexton
    MemberAuthor

    This was generated by AI during an unattended host run over /fleet:reach (melo-desk-001, both desktop lanes). Both lanes run harness-ops 4.4.0, which is later than #6628.

    B6: typos-format per-edit cost on native Windows

    Verdict: no change. The per-edit cost no longer exists. typos-format 0.11.4 registers only SessionStart and Stop hooks, so it runs once per turn, not once per edit.

    The measurement was one headless claude.exe -p --debug-file session (Claude Code 2.1.309, no concurrent agents). It made 18 separate Edit calls, 6 each to .md, .py and .txt, in a scratch git repository. Timings come from the debug log's Hooks: ... finished with status N (Nms) lines:

    Event Plugin n p50 ms p90 ms max ms
    PreToolUse:Edit guardrails 18 239 261 318
    PreToolUse:Edit context-budget 18 53 60 68
    PostToolBatch eol-normalizer 17 340 367 500
    PostToolBatch markdown-format 17 78 381 388
    PostToolBatch ruff-format 17 87 345 350
    PostToolBatch biome-format 17 96 99 101
    PostToolBatch go-format 17 73 81 85
    PostToolBatch bash-format 17 61 65 69
    Stop (once) typos-format 1 143

    The p90 spikes for markdown-format and ruff-format come from the edits to their own extensions. With concurrent agents was not measured: the old 917 ms figure belonged to a per-edit hook that no longer exists. guardrails' 239 ms PreToolUse:Edit is #4390's subject.

  8. kyle-sexton commented on Oct 25, 2026

    @kyle-sexton
    MemberAuthor

    This was generated by AI during an unattended host run over /fleet:reach (melo-desk-001, both desktop lanes). Both lanes run harness-ops 4.4.0, which is later than #6628.

    B10: hook cancels after #6628

    Verdict: no change. Cancels are rare on both desktop lanes. This is from one pass over the desktop OTEL hot store (the collector binds 127.0.0.1 only, so the store holds this machine's lanes alone) (hook_execution_complete events, num_cancelled), 2026-10-22 to 2026-10-24, Claude Code 2.1.305 to 2.1.310:

    Lane hook events hooks run cancelled events with a cancel non-blocking errors
    desktop WSL 174,006 997,174 85 (0.009%) 29 3,192
    desktop Windows 179 2,272 0 0 0

    The WSL cancels by event: PreToolUse:Bash 41, PostToolUse:Bash 25, PostToolBatch 14, PostToolUseFailure:Bash 3, PreToolUse:Edit 2.

    • Not attributed per script. OTEL records counts per event, not per hook command. Before perf(harness-ops): run the per-session event log hook in the background #6628 the Windows lane logged 23 cancels in its sample. It now has none, but it saw little use in this window.
    • The harness-cleanup question is already settled by the 2026-10-12 decision comment.
    • The 3,192 non-blocking errors on WSL were not broken down here. That is the larger signal, if anyone wants a follow-up.

    B12

    Not measured: no account rotation happened during this run, and I didn't trigger one. This issue stays open for B12 alone.

    Outputs are kept locally under .work/host-runs/6687/.

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

    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.

    Type

    Fields

    No fields configured for Task.

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions