Problem / why
The generator must emit per-component workflow files for a manifest that declares components
while leaving single-component output byte-identical. The synthesized default component (no
components: block) keeps the existing filenames (orchestrate.yaml, promote.yaml, ...);
declared components get per-component files. This issue establishes the per-component file
scaffolding; the per-component triggers and version wiring are completed in V3.
Scope
This PR does:
- Set the multi-component generator path: fan generation out over the declared components in
internal/generate/command.go, choosing a per-component output filename (for example
orchestrate-api.yaml, orchestrate-web.yaml) and a component-scoped config per component.
- Keep the single-component path emitting the existing single set of files with the existing
names, byte-identical. The default component never produces orchestrate-default.yaml.
- Confirm
GeneratedFileMarker orphan detection (internal/generate/marker.go) works across
the per-component files (it already supports multiple cascade-owned files).
This PR does NOT:
- Wire each component file's
on.push.paths from component triggers, or per-component version
math (V2 / V3 do that).
- Touch promotion file generation (P2).
Files / areas touched
internal/generate/command.go - multi-component per-component file fan-out and filenames.
internal/generate/generator.go - per-component config emission.
internal/generate/marker.go - confirm multi-file orphan detection.
Tests and coverage required
- Generator unit tests: a two-component manifest emits two orchestrate files.
- A byte-stability test that single-component generated workflows are unchanged.
- actionlint-clean assertion on the generated multi-component workflows.
Acceptance criteria
- A multi-component manifest emits one orchestrate file per component.
- Single-component generated workflows are byte-identical to current output.
- Generated multi-component workflows are actionlint-clean.
Dependencies
Blocked by F1 and F2.
Problem / why
The generator must emit per-component workflow files for a manifest that declares components
while leaving single-component output byte-identical. The synthesized
defaultcomponent (nocomponents:block) keeps the existing filenames (orchestrate.yaml,promote.yaml, ...);declared components get per-component files. This issue establishes the per-component file
scaffolding; the per-component triggers and version wiring are completed in V3.
Scope
This PR does:
internal/generate/command.go, choosing a per-component output filename (for exampleorchestrate-api.yaml,orchestrate-web.yaml) and a component-scoped config per component.names, byte-identical. The
defaultcomponent never producesorchestrate-default.yaml.GeneratedFileMarkerorphan detection (internal/generate/marker.go) works acrossthe per-component files (it already supports multiple cascade-owned files).
This PR does NOT:
on.push.pathsfrom component triggers, or per-component versionmath (V2 / V3 do that).
Files / areas touched
internal/generate/command.go- multi-component per-component file fan-out and filenames.internal/generate/generator.go- per-component config emission.internal/generate/marker.go- confirm multi-file orphan detection.Tests and coverage required
Acceptance criteria
Dependencies
Blocked by F1 and F2.