Skip to content

hook::notice_once keys on agent, so skip notice re-fires per subagent #4612

Closed

Description

@kyle-sexton

This was generated by AI during attend-queue.

Problem: hook::notice_once (vendored hook-utils.sh across markdown-format, typos-format, bash-format, biome-format, go-format, actionlint, context-guard, autonomy, desktop-notification, powershell-format, and other consumers) keys the skip-notice dedup marker on session and agent. Every subagent in a multi-subagent run gets its own full first notice (2,098 bytes), instead of the notice firing once per session. The CHANGELOG (#3128) records this per-agent keying as intended, but the README text in the affected plugins (L93-96, L124) still says "once-per-session", so the docs and the behavior disagree.

Done when: either (a) the marker key drops the agent component so dedup is session-only and a skip notice fires once per session, not once per subagent, or (b) the README wording is corrected to describe the per-agent behavior if it is kept intentionally. Re-measure by counting full notice rows across a multi-subagent run against the #4260 baseline (14 notice rows, 2,098 bytes each).

Split from #4260.

Activity

  1. added
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Sep 27, 2026
  2. added a commit that references this issue on Sep 28, 2026
  3. kyle-sexton commented on Sep 29, 2026

    @kyle-sexton
    MemberAuthor

    Reopening: this issue was closed as completed by #4737, but that PR fixed READMEs only. The review comments on #4737 listed setup SKILL.md bodies that the merged diff never touched. This comes from the 2026-09-29 audit of the Cursor run.

    What landed

    README wording and actionlint 0.9.4.

    What did not land

    • Setup SKILL.md bodies still say "once-per-session".
    • Setup evals carry the same wording.
    • Hook script comments carry the same wording.
    • docs/conformance-dimensions.md:31 (dim-9 row) says "once-per-session".

    Where each is fixed

    Note on wording

    Prerequisite-class notices (biome-format, go-format, markdown-format, and actionlint once #5264 lands) are session-only, shared across agents. The other classes are once per session and agent. The wordings differ by class on purpose.

    Next

    This stays open until every sibling PR is merged. The owner closes it.

  4. 2 remaining items

  5. kyle-sexton commented on Oct 1, 2026

    @kyle-sexton
    MemberAuthor

    PR #5745 is merged (b1f3e08). It rewords the jq-class skip-notice cadence to "once per session and agent" in the setup skills, evals, hook tests, hook script comments and lib/hook-utils.sh (all 18 carriers resynced). Sibling PRs, all merged: #4737 #5250 #5251 #5264 #5245 #5246 #5271 #5275 #5468. Lines left as they were: missing-binary (prerequisite-class) notices, which latch on session alone; the frozen judge-calibration fixtures; and test-file comments for non-jq, non-binary notices. This issue stays open for the owner to decide on closing.

  6. kyle-sexton commented on Oct 4, 2026

    @kyle-sexton
    MemberAuthor

    This was generated by AI during triage.

    Triage: the work looks done. The 2026-10-01 comment leaves closing to the owner, so this is routed to the owner to confirm.

    Question: close #4612 as completed? Recommended: yes.

    Done-when option (b) is delivered. The skip-notice marker stays keyed on session and agent for the jq-class notices, on purpose, and every carrier now says so: "once per session and agent, renewed every eighth skip". Missing-binary (prerequisite-class) notices latch on the session alone and correctly say "once per session". A repository-wide search on current main finds no jq-class carrier still saying "once per session". The fixes landed in #4737, #5745, #5250, #5251, #5264, #5245, #5246, #5271, #5275 and #5468, all merged.

    Reopen-worthy evidence: a multi-subagent run showing a jq-class carrier that still says "once per session". Option (a), session-only dedup for every class, would be a new behavior change and its own item.

    Basis: verified, lib/hook-utils.sh (marker key and the prerequisite-class session override) and the hook-observability convention's skip-notice line on main; repository grep; linked PR states.

  7. added
    priority: lowNice-to-have, cosmetic, or speculative; opportunistic.
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    status: needs-decisionAwaiting a human or maintainer judgment call.
    work-class: mechanicalDeterministic, trivially reversible maintenance: dependency bumps, lint/format, sync.
    and removed
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Oct 4, 2026
  8. kyle-sexton commented on Oct 13, 2026

    @kyle-sexton
    MemberAuthor

    Decision recorded. The owner approved applying independently verified recommendations (high-risk set, reviewed) on 2026-10-13.

    Docs said skip notices fire once per session while the marker keyed on session and agent. Every carrier was reworded (#4737, #5745 and siblings), and #6267 changed hook::notice_once so the user notice fires once per session and the model notice once per session and agent.

    Verification notes:

    • Risk high only because the delivered change sits in lib/hook-utils.sh (hook surface); the close itself is reversible

    Verified by an independent fresh-context check (confirmed, risk high): gh issue view 4612 (OPEN; 2026-10-04 triage recommends close); gh pr view 6267 MERGED 2026-10-04; origin/main lib/hook-utils.sh:278-300 hook::notice_once (model marker per session+agent, user marker per session); git grep 'every eighth' origin/main: only CHANGELOGs and a stay-quiet test (lib/hook-utils.test.sh:1381); git grep 'once per session and agent' in setup SKILL.md/evals on origin/main

    Closing: Done-when option (b) shipped across all carriers; #6267 then made the user-channel notice once per session

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.priority: lowNice-to-have, cosmetic, or speculative; opportunistic.work-class: mechanicalDeterministic, trivially reversible maintenance: dependency bumps, lint/format, sync.

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions