Skip to content

[CI Failure Doctor] 🏥 CI Failure Investigation - Run #34273 #14387

@github-actions

Description

@github-actions

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

  • jsnpm 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.

  • expires on Feb 8, 2026, 4:53 PM UTC

Metadata

Metadata

Labels

cookieIssue Monster Loves Cookies!

Type

No type
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