Overview
Semantic analysis of 726 non-test Go source files across pkg/workflow (352 files), pkg/cli (263 files), pkg/parser, and smaller utility packages. The codebase is well-structured overall — this report focuses on the three actionable issues found.
Issue 1 — Outlier function: computeIntegrityCacheKey in cache.go
File:pkg/workflow/cache.go (line 80)
Recommendation priority: High
computeIntegrityCacheKey belongs semantically in cache_integrity.go. Every call it makes is to a function defined in that file:
// cache.go — calls three functions, all from cache_integrity.gofunccomputeIntegrityCacheKey(cacheCacheMemoryEntry, githubConfig*GitHubToolConfig) string {
integrityLevel:=cacheIntegrityLevel(githubConfig) // cache_integrity.gopolicyHash:=computePolicyHash(githubConfig) // cache_integrity.go...returngenerateIntegrityAwareCacheKey(...) // cache_integrity.go
}cache_integrity.go already owns: computePolicyHash, buildCanonicalPolicy, cacheIntegrityLevel, generateIntegrityAwareCacheKey. This function is the missing piece of that chain.
Recommendation: Move computeIntegrityCacheKey from cache.go to cache_integrity.go.
Issue 2 — Npm/Node step-generation split across engine_helpers.go and nodejs.go
Files:pkg/workflow/engine_helpers.go, pkg/workflow/nodejs.go
Recommendation priority: Medium
nodejs.go is the canonical home for Node.js/npm step generation:
| Function | Current file |
|---|
GenerateNodeJsSetupStep | nodejs.go ✓ |
GenerateNpmInstallSteps | nodejs.go ✓ |
GenerateNpmInstallStepsWithScope | nodejs.go ✓ |
BuildStandardNpmEngineInstallSteps | engine_helpers.go ← outlier |
BuildNpmEngineInstallStepsWithAWF | engine_helpers.go ← outlier |
GetNpmBinPathSetup | engine_helpers.go ← outlier |
engine_helpers.go mixes engine orchestration, secret validation, YAML formatting, environment filtering, and npm step generation. The three npm-specific functions there are outliers; they belong in nodejs.go alongside the rest of the npm step generation code.
Recommendation: Move BuildStandardNpmEngineInstallSteps, BuildNpmEngineInstallStepsWithAWF, and GetNpmBinPathSetup from engine_helpers.go to nodejs.go.
Issue 3 — Complementary percentage helpers in separate audit files
Files:pkg/cli/audit_cross_run_render.go, pkg/cli/audit_diff.go
Recommendation priority: Low
Two small math/format helpers serve the same conceptual pair (compute → format percentage) but are isolated in different files:
// audit_cross_run_render.gofuncsafePercent(part, totalint) float64 {
iftotal==0 { return0 }
returnfloat64(part) /float64(total) *100
}
// audit_diff.gofuncformatPercent(pctfloat64) string {
returnfmt.Sprintf("%.0f%%", pct)
}Neither file currently uses the other's function, resulting in repeated inline percent formatting across the audit rendering code. Extracting both into a shared audit_math_helpers.go (or similar) would allow the common pattern formatPercent(safePercent(a, b)) to be used consistently.
Recommendation: Extract safePercent and formatPercent into a shared pkg/cli/audit_math_helpers.go.
What was verified as well-organized (no action needed)
strict_mode_*_validation.go — clean domain-based validation split ✓update_*_helpers.go / close_entity_helpers.go — clean entity hierarchy with shared base types ✓safe_outputs_* family — well-decomposed by concern ✓codemod_*.go — one codemod per file ✓audit_report_render_*.go — clean rendering domain split ✓compile_*.go (cli) — well-decomposed orchestration ✓getEffective*Token family in github_token.go ✓_wasm.go platform splits — all carry correct //go:build js || wasm constraints, not duplicates ✓aggregateLogFiles[T LogAnalysis] generic abstraction — already in log_aggregation.go ✓
Analysis Metadata
| Metric | Value |
|---|
| Total Go files analyzed | 726 |
| Packages examined | workflow, cli, parser, stringutil, agentdrain |
| Outlier functions identified | 4 (computeIntegrityCacheKey + 3 npm funcs in engine_helpers.go) |
| Near-duplicate pairs | 1 (safePercent / formatPercent) |
| Detection method | Serena LSP semantic analysis + naming-pattern clustering |
| Workflow run | §24887527394 |
Implementation Checklist
Generated by Semantic Function Refactoring · ● 221.9K · ◷
Overview
Semantic analysis of 726 non-test Go source files across
pkg/workflow(352 files),pkg/cli(263 files),pkg/parser, and smaller utility packages. The codebase is well-structured overall — this report focuses on the three actionable issues found.Issue 1 — Outlier function:
computeIntegrityCacheKeyincache.goFile:
pkg/workflow/cache.go(line 80)Recommendation priority: High
computeIntegrityCacheKeybelongs semantically incache_integrity.go. Every call it makes is to a function defined in that file:cache_integrity.goalready owns:computePolicyHash,buildCanonicalPolicy,cacheIntegrityLevel,generateIntegrityAwareCacheKey. This function is the missing piece of that chain.Recommendation: Move
computeIntegrityCacheKeyfromcache.gotocache_integrity.go.Issue 2 — Npm/Node step-generation split across
engine_helpers.goandnodejs.goFiles:
pkg/workflow/engine_helpers.go,pkg/workflow/nodejs.goRecommendation priority: Medium
nodejs.gois the canonical home for Node.js/npm step generation:GenerateNodeJsSetupStepnodejs.go✓GenerateNpmInstallStepsnodejs.go✓GenerateNpmInstallStepsWithScopenodejs.go✓BuildStandardNpmEngineInstallStepsengine_helpers.go← outlierBuildNpmEngineInstallStepsWithAWFengine_helpers.go← outlierGetNpmBinPathSetupengine_helpers.go← outlierengine_helpers.gomixes engine orchestration, secret validation, YAML formatting, environment filtering, and npm step generation. The three npm-specific functions there are outliers; they belong innodejs.goalongside the rest of the npm step generation code.Recommendation: Move
BuildStandardNpmEngineInstallSteps,BuildNpmEngineInstallStepsWithAWF, andGetNpmBinPathSetupfromengine_helpers.gotonodejs.go.Issue 3 — Complementary percentage helpers in separate audit files
Files:
pkg/cli/audit_cross_run_render.go,pkg/cli/audit_diff.goRecommendation priority: Low
Two small math/format helpers serve the same conceptual pair (compute → format percentage) but are isolated in different files:
Neither file currently uses the other's function, resulting in repeated inline percent formatting across the audit rendering code. Extracting both into a shared
audit_math_helpers.go(or similar) would allow the common patternformatPercent(safePercent(a, b))to be used consistently.Recommendation: Extract
safePercentandformatPercentinto a sharedpkg/cli/audit_math_helpers.go.What was verified as well-organized (no action needed)
strict_mode_*_validation.go— clean domain-based validation split ✓update_*_helpers.go/close_entity_helpers.go— clean entity hierarchy with shared base types ✓safe_outputs_*family — well-decomposed by concern ✓codemod_*.go— one codemod per file ✓audit_report_render_*.go— clean rendering domain split ✓compile_*.go(cli) — well-decomposed orchestration ✓getEffective*Tokenfamily ingithub_token.go✓_wasm.goplatform splits — all carry correct//go:build js || wasmconstraints, not duplicates ✓aggregateLogFiles[T LogAnalysis]generic abstraction — already inlog_aggregation.go✓Analysis Metadata
workflow,cli,parser,stringutil,agentdraincomputeIntegrityCacheKey+ 3 npm funcs inengine_helpers.go)safePercent/formatPercent)Implementation Checklist
computeIntegrityCacheKey→cache_integrity.goBuildStandardNpmEngineInstallSteps,BuildNpmEngineInstallStepsWithAWF,GetNpmBinPathSetup→nodejs.gosafePercent+formatPercent→audit_math_helpers.go