refactor(P1): consolidate YAML single-quote escapers, MCP config base, and workflow validation helpers#36033
Conversation
Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com>
|
Hey A couple of things to address before this is ready for review:
Once the implementation is complete, consider assigning this prompt to your coding agent to finish up:
|
…ation helpers P1.1: Add escapeYAMLSingleQuotedScalar to yaml_env_helpers.go, remove duplicates from observability_otlp.go and central_slash_command_workflow.go, and route all inline strings.ReplaceAll(x, \"'\", \"''\") uses through it. P1.2: Add renderJSONMCPConfigForEngine helper to mcp_renderer_factory.go; collapse the 5 standard JSON-MCP engine RenderMCPConfig methods (claude, gemini, antigravity, crush, opencode) to one-liner delegations, removing per-engine logger vars. P1.3: Extract formatWorkflowNotFoundError and formatMissingTriggerError to validation_helpers.go; extract workflowFileValidation struct and readAndValidateWorkflowFileTrigger to dispatch_workflow_file_resolver.go; refactor call_workflow_validation.go (collapsing duplicated lock/yml branches) and dispatch_workflow_validation.go to use all helpers. Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
Refactors three duplicate/scattered patterns: consolidates the YAML single-quoted-scalar escaper into a single canonical helper, introduces a shared renderJSONMCPConfigForEngine base for the five standard JSON-MCP engines, and extracts shared call/dispatch workflow validation helpers (error formatters + a read/parse/trigger-check helper).
Changes:
- Adds
escapeYAMLSingleQuotedScalartoyaml_env_helpers.goand routes 8 call sites (including former duplicates inobservability_otlp.goandcentral_slash_command_workflow.go) through it. - Adds
renderJSONMCPConfigForEnginetomcp_renderer_factory.go; Claude/Gemini/Antigravity/Crush/OpenCode MCP files collapse to one-liner delegations and drop per-engine loggers. - Adds
formatWorkflowNotFoundError/formatMissingTriggerErrortovalidation_helpers.goandworkflowFileValidation/readAndValidateWorkflowFileTriggertodispatch_workflow_file_resolver.go; both validators now share read/parse/trigger logic and error templates.
Show a summary per file
| File | Description |
|---|---|
| pkg/workflow/yaml_env_helpers.go | Adds canonical escapeYAMLSingleQuotedScalar. |
| pkg/workflow/observability_otlp.go | Removes duplicate definition of the escaper. |
| pkg/workflow/central_slash_command_workflow.go | Replaces inline escaper and removes local helper. |
| pkg/workflow/cache.go, compiler_yaml.go, compiler_experiments.go, engine_helpers.go, expression_nodes.go, service_ports.go | Route inline '→'' replacements through the shared helper. |
| pkg/workflow/mcp_renderer_factory.go | Adds shared renderJSONMCPConfigForEngine base. |
| pkg/workflow/{claude,gemini,antigravity,crush,opencode}_mcp.go | Collapse to single-line delegations; drop per-engine loggers/imports. |
| pkg/workflow/validation_helpers.go | Adds shared error formatters for missing workflow/trigger. |
| pkg/workflow/dispatch_workflow_file_resolver.go | Adds workflowFileValidation + readAndValidateWorkflowFileTrigger. |
| pkg/workflow/call_workflow_validation.go | Uses shared trigger helper + error formatters; drops yaml import. |
| pkg/workflow/dispatch_workflow_validation.go | Same consolidation; drops os/yaml imports. |
| .github/workflows/daily-model-inventory.lock.yml | Regenerated body_hash only. |
Copilot's findings
Tip
Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- Files reviewed: 20/20 changed files
- Comments generated: 0
|
|
1 similar comment
|
|
Three confirmed duplicate/scattered-helper patterns from the semantic function clustering analysis (P1 items). Eliminates byte-identical function bodies and ~90%-parallel validation files by extracting shared helpers.
P1.1 — Single canonical YAML single-quote escaper
Two functions (
escapeSingleQuotedYAMLString,escapeYAMLSingleQuotedScalar) were byte-identical, with the same one-liner also inlined at 6 additional sites. CanonicalescapeYAMLSingleQuotedScalarnow lives inyaml_env_helpers.go; both definitions and all inline sites route through it.P1.2 — Shared
RenderMCPConfigbase for 5 JSON-MCP enginesClaude, Gemini, Antigravity, Crush, and OpenCode each had an identical 3-line body: log + comment +
renderDefaultJSONMCPConfig(…, PATH). New helper inmcp_renderer_factory.go:Each engine file is now a one-liner delegation; 5 per-engine
logger.New(…)vars removed.P1.3 — Shared call/dispatch workflow validation helpers
call_workflow_validation.goanddispatch_workflow_validation.gowere ~90% parallel (~200 lines each), with byte-identical error templates and duplicated read→parse→check-trigger logic.Extracted to
validation_helpers.go:formatWorkflowNotFoundError(workflowType, workflowName, workflowsDir string) errorformatMissingTriggerError(workflowType, workflowName, triggerName string) errorExtracted to
dispatch_workflow_file_resolver.go:workflowFileValidationstruct +readAndValidateWorkflowFileTrigger(fileResult, triggerName)— reads lock/yml (priority order), parses YAML, checks theon:trigger; preserves read-vs-parse error distinction for callerscall_workflow_validation.goalso has its duplicatedlockExists/ymlExistsbranches collapsed into the singlereadAndValidateWorkflowFileTriggercall, matching the cleaner pattern already present in the dispatch file.