You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix: report real counts, and mark every page that is not the whole story
From the Hermes plugin's closed PRs. Of the five I had not already
reviewed, one applied directly, two were already handled, and two do not
exist here.
hookdeck_recent_deliveries returned a capped page of open Issues with no
total and no marker. Asked "what needs attention?", a model sees twenty
and has nothing to tell it there are four hundred — so it reports what it
can see, which for a tool whose job is saying what is true is the worst
way to be wrong. It now returns `openIssuesTotal` from the count
endpoint, plus `openIssuesTruncated` when the page is short of it, and
`localTruncated` for the local records.
hookdeck_status.deadLetters is the local log's true size, but the log
evicts oldest-first at its cap, so a full log reports a floor rather than
a total. `deadLettersIsAtLeast: true` now says so. hookdeck_status's
issue count and hookdeck_issues' total were already counted rather than
measured.
Not applicable: the CI gate reading the legacy commit-status API (we
gate on the workflow itself, and have no release gate to get wrong) and
the dashboard bundle tests (there is no dashboard here). The tunnel
escalation from #7 is the same change already made.
Also borrowed the practice rather than a fix: every safety-critical guard
was mutation-checked by breaking it and confirming the suite fails. All
eight are covered — the pause ceiling, the allowMutations gate, the
read-only refusal, the attempt-count ceiling, the pre-verification
dead-letter gate, the backoff reset rule, the retry-rule coverage check
and the new project-mismatch check — each caught by between one and four
tests.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: docs/agent-tools.md
+8Lines changed: 8 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -85,3 +85,11 @@ Payload text from a webhook is third-party input, and the tools treat it that wa
85
85
- The delivered body is **opt-in** (`includeBody`), truncated at 4,000 characters, and labelled as data rather than presented as something addressed to the reader.
86
86
- The `hookdeck listen` child's output is scrubbed of the API key as it is captured, not as it is read — that output is surfaced by `hookdeck_status` and we do not write it, so a future CLI version echoing a key into a banner would otherwise land it in a model's context with nothing here having changed.
87
87
- A test asserts that no configured secret appears in *any* tool's result, so the next tool added inherits the check.
88
+
89
+
## Counts are counted
90
+
91
+
A status tool that returns a page and lets the reader infer a total is worse than one that says nothing: a model asked "what needs attention?" will report what it can see as though it were everything.
92
+
93
+
-`hookdeck_status.openIssues` and `hookdeck_issues`' `total` come from Hookdeck's count endpoint, not from the length of a page.
94
+
-`hookdeck_recent_deliveries` returns `openIssuesTotal` beside the page it shows, and an `openIssuesTruncated` note whenever the two differ. The local records get the same treatment via `localTruncated`.
95
+
-`hookdeck_status.deadLetters` is the local log's true size, but the log evicts oldest-first at its cap — so once it is full, `deadLettersIsAtLeast: true` says the number is a floor. A floor reported as a floor beats a ceiling reported as a total.
0 commit comments