fix(actionlint): align emitted telemetry hook id with schema (#959) - #1044
Conversation
The hook emitted "actionlint" on all three telemetry paths (skipped / findings / clean), but the envelope `hook` value is the hook-script basename, discovered at `data/<hook>.schema.json`. Emit "actionlint-check" to match `data/actionlint-check.schema.json` and the README Implementers table. Producer-conformance fix; the published envelope/data contract is unchanged. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
Claude finished @kyle-sexton's task in 1m 35s —— View job Code Review
Verdict: Approve — correct, minimal, well-documented producer-conformance fix. What the PR doesAll three Changes reviewed
One minor test coverage gap (non-blocking)The "actionlint-absent" telemetry block (L262–L265) asserts SummaryThe root cause, the fix scope, the version bump, and the CHANGELOG entry are all correct. The change is precisely scoped — only the producer is touched; the schema and convention docs are already canonical and untouched. No security, correctness, or architecture concerns. |
|
Claude finished @kyle-sexton's task in 1m 23s —— View job Security Review
No security issues found in this PR. The diff is narrow and low-risk:
No new code paths, no new external inputs consumed, no trust-boundary changes, no permission widening, no supply-chain modifications. |
|
Claude finished @kyle-sexton's task in 1m 0s —— View job Code Review
Verdict: Approve — correct, minimal, well-documented producer-conformance fix. What the PR doesAll three Changes reviewed
One minor test coverage gap (non-blocking)The clean-file telemetry block (L221–L226) and the actionlint-absent block (L262–L265) each assert SummaryRoot cause, fix scope, version bump, and CHANGELOG entry are all correct. The schema, convention docs, and README are already canonical and are correctly left untouched. No security, correctness, or architecture concerns. |
|
Claude finished @kyle-sexton's task in 1m 11s —— View job Security Review
No security issues found in this PR. The diff is extremely narrow — all substantive changes are swapping one hardcoded string literal for another. Analysis by file
Areas specifically checked
|
Resolve actionlint CHANGELOG/version collision with the shared-lib cascade that landed on main (#903): main's 0.5.1 is the hook-utils.sh sync; this branch's telemetry hook-id fix becomes 0.5.2 on top.
|
Claude finished @kyle-sexton's task in 1m 56s —— View job Code Review
Verdict: Approve — correct producer-conformance fix, and the version bump is cleanly resolved after the main merge. What changed since the last review passThe previous two review passes reviewed the original commit ( Changes reviewed
One note: PR body is now slightly stale (non-blocking)The PR description says "version is bumped Persistent test coverage gap (non-blocking, previously noted)The clean-file telemetry block (L221–L226) and actionlint-absent block (L262–L265) each assert SummaryRoot cause, fix scope, and version resolution are all correct. The merge from main was handled cleanly — |
|
Claude finished @kyle-sexton's task in 1m 8s —— View job Security Review
No security issues found in this PR. The diff is the narrowest possible: swapping one hardcoded string literal for another at three call sites plus one test assertion. Analysis by file:
|
| Area | Verdict |
|---|---|
| Command / template injection | Not applicable — changed value is a hardcoded literal with no shell-special characters |
| Untrusted input reaching new code paths | No new code paths introduced |
| Secret / credential handling | No secrets touched |
| Permission widening | No permissions fields modified |
GitHub Actions patterns (pull_request_target, script injection via github context) |
No workflow files changed |
| Supply-chain / dependency pin changes | No pins modified; version bump is in plugin.json only |
| Trust-boundary changes | None |
Summary
The
actionlint-checkhook emitted a telemetry envelope whosehookid was"actionlint", but the published schema and discovery convention key on the hook-script basename,actionlint-check. A consumer sink resolvingdata/<hook>.schema.jsonfrom the envelope'shookvalue would look updata/actionlint.schema.json(which does not exist) instead of the realdata/actionlint-check.schema.json. This is a producer-conformance bug: three authoritative artifacts (the schema file, the README Implementers table, and the schema's owntitle/description) already agree onactionlint-check; only the producer and its own test diverged.Fix
Producer-side only — 4 lines across 2 files:
plugins/actionlint/hooks/actionlint-check.sh—"actionlint"→"actionlint-check"at all threeemit_telsites (skipped / findings / clean paths).plugins/actionlint/hooks/actionlint-check.test.sh— flipped the.hookassertion and its success-message string to expect"actionlint-check".No change to
docs/conventions/hook-telemetry/schema or README — they are already canonical. Noschema_versionbump (the published envelope/data contract is unchanged). The plugin's own version is bumped0.5.0→0.5.1(patch, producer-conformance bugfix) with a matching CHANGELOG entry.Verification
Acceptance grep (expect empty):
Test suite (
actionlintwas on PATH, so it ran fully — not skipped):Closes #959
Related
Implementation follows the triage-lane planning comment on #959 (posted 2026-07-22T07:00:13Z), "Implementation plan — #959: align actionlint telemetry
hookid", which resolved the canonical-direction fork from evidence (envelopehookid is the hook-script basename, proven by theguardrailsplugin shipping many hooks each emitting its own basename).Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com