Summary
js and js-integration-live-api jobs now fail because the new frontmatter hash regression tests expect the JavaScript implementation to match the Go hash for .github/workflows/audit-workflows.md after the runtime deduplication change.
Failure Details
- Run: 21783296217
- Commit:
c895fa5f428d42b5c0f9bd95b8187c40158cf7a7
- Trigger: push to
main
Root Cause Analysis
The Go implementation of ComputeFrontmatterHash now produces ff56a35b191afe28f76a09217de1597695a225e8f41502cc815a0a9e0eb2f96e for audit-workflows.md (after the recent runtime deduplication work), but the pure JavaScript implementation in actions/setup/js/frontmatter_hash_pure.cjs still builds a much simpler canonical representation (only frontmatter-text, imports, imported frontmatters, and template expressions). The new regression test asserts jsHash === goHash and now fails because the JS algorithm never incorporated the merged runtime/tool deduplication strings that the Go canonical JSON now includes.
Failed Jobs and Errors
js → npm test -- frontmatter_hash_github_api.test.cjs
- Fails in
frontmatter_hash_github_api.test.cjs > frontmatter_hash with GitHub API > cross-language validation > should compute same hash as Go implementation when using file system
- Assertion: expected JavaScript hash
bb5cbd9... to be Go hash ff56a35...
js-integration-live-api → same npm test executed with live API flag and identical assertion failure (same expected/received hashes).
Investigation Findings
actions/setup/js/frontmatter_hash_pure.cjs exported helper computeFrontmatterHash that still canonicalizes only the text-based frontmatter, imports, and template expressions; it never replays Go’s field merging or merged runtimes/tools strings that were touched by the runtime deduplication change.
- As a result the canonical JSON hash from JS remains
bb5cbd9552401591e9476ae803f1736a88dca3f654f725dadffa5a7dbc31d639 while Go now outputs ff56a35b191afe28f76a09217de1597695a225e8f41502cc815a0a9e0eb2f96e.
- Both failing jobs run
npm test -- frontmatter_hash_github_api.test.cjs (the second adds a live GitHub API run) and reproduce the diff reliably.
Recommended Actions
- Update
actions/setup/js/frontmatter_hash_pure.cjs (and any wrappers used by frontmatter_hash.cjs) so the canonical JSON matches Go’s buildCanonicalFrontmatter output (including merged runtimes, services, tools, etc.). The cross-language test should no longer fail once Go and JS canonical representations align.
- Recompute the JavaScript hash after the change (e.g.,
cd actions/setup/js && npm test -- frontmatter_hash_github_api.test.cjs) and ensure both jobs pass before rerunning CI.
- Consider calling the Go binary directly from JavaScript if implementing the full canonicalization in JS becomes too costly; the regression test would then pass because Go’s output is used as the source of truth.
Prevention Strategies
- Keep the JavaScript canonicalization logic in sync with
pkg/parser/frontmatter_hash.go, especially after future runtime or imports deduplication changes.
- Add a regression guard that recomputes the hash for a small subset of real workflows whenever the canonical fields change.
- Document the frontmatter hash spec in
FRONTMATTER_HASH_SUMMARY.md so JS engineers can replicate Go’s field merging behavior.
AI Team Self-Improvement
When runtime deduplication or merged field logic changes are introduced in Go, remind yourself to re-run the JavaScript regression tests (npm test -- frontmatter_hash_github_api.test.cjs) and align frontmatter_hash_pure.cjs with whatever canonical JSON pkg/parser/frontmatter_hash.go now emits.
Historical Context
The frontmatter hash cross-language mismatch has been known (see FRONTMATTER_HASH_SUMMARY.md), but this is the first time a regression test validates audit-workflows.md directly against Go’s output; the new runtime deduplication work changed Go’s hash, so the previously simplified JS implementation is now too far out of sync.
AI generated by CI Failure Doctor
To add this workflow in your repository, run gh aw add githubnext/agentics/workflows/ci-doctor.md@ea350161ad5dcc9624cf510f134c6a9e39a6f94d. See usage guide.
Summary
jsandjs-integration-live-apijobs now fail because the new frontmatter hash regression tests expect the JavaScript implementation to match the Go hash for.github/workflows/audit-workflows.mdafter the runtime deduplication change.Failure Details
c895fa5f428d42b5c0f9bd95b8187c40158cf7a7mainRoot Cause Analysis
The Go implementation of
ComputeFrontmatterHashnow producesff56a35b191afe28f76a09217de1597695a225e8f41502cc815a0a9e0eb2f96eforaudit-workflows.md(after the recent runtime deduplication work), but the pure JavaScript implementation inactions/setup/js/frontmatter_hash_pure.cjsstill builds a much simpler canonical representation (onlyfrontmatter-text, imports, imported frontmatters, and template expressions). The new regression test assertsjsHash === goHashand now fails because the JS algorithm never incorporated the merged runtime/tool deduplication strings that the Go canonical JSON now includes.Failed Jobs and Errors
js→npm test -- frontmatter_hash_github_api.test.cjsfrontmatter_hash_github_api.test.cjs > frontmatter_hash with GitHub API > cross-language validation > should compute same hash as Go implementation when using file systembb5cbd9...to be Go hashff56a35...js-integration-live-api→ same npm test executed with live API flag and identical assertion failure (same expected/received hashes).Investigation Findings
actions/setup/js/frontmatter_hash_pure.cjsexported helpercomputeFrontmatterHashthat still canonicalizes only the text-based frontmatter, imports, and template expressions; it never replays Go’s field merging or mergedruntimes/toolsstrings that were touched by the runtime deduplication change.bb5cbd9552401591e9476ae803f1736a88dca3f654f725dadffa5a7dbc31d639while Go now outputsff56a35b191afe28f76a09217de1597695a225e8f41502cc815a0a9e0eb2f96e.npm test -- frontmatter_hash_github_api.test.cjs(the second adds a live GitHub API run) and reproduce the diff reliably.Recommended Actions
actions/setup/js/frontmatter_hash_pure.cjs(and any wrappers used byfrontmatter_hash.cjs) so the canonical JSON matches Go’sbuildCanonicalFrontmatteroutput (including merged runtimes, services, tools, etc.). The cross-language test should no longer fail once Go and JS canonical representations align.cd actions/setup/js && npm test -- frontmatter_hash_github_api.test.cjs) and ensure both jobs pass before rerunning CI.Prevention Strategies
pkg/parser/frontmatter_hash.go, especially after future runtime or imports deduplication changes.FRONTMATTER_HASH_SUMMARY.mdso JS engineers can replicate Go’s field merging behavior.AI Team Self-Improvement
When runtime deduplication or merged field logic changes are introduced in Go, remind yourself to re-run the JavaScript regression tests (
npm test -- frontmatter_hash_github_api.test.cjs) and alignfrontmatter_hash_pure.cjswith whatever canonical JSONpkg/parser/frontmatter_hash.gonow emits.Historical Context
The frontmatter hash cross-language mismatch has been known (see
FRONTMATTER_HASH_SUMMARY.md), but this is the first time a regression test validatesaudit-workflows.mddirectly against Go’s output; the new runtime deduplication work changed Go’s hash, so the previously simplified JS implementation is now too far out of sync.