feat: Add source tracing metadata to cooked steps (gt-8tmz.18)
Add SourceFormula and SourceLocation fields to track where each step came from during the cooking process. This enables debugging of complex compositions with inheritance, expansion, and advice. Changes: - Added SourceFormula and SourceLocation fields to Step struct (formula/types.go) - Added same fields to Issue struct (types/types.go) - Added SetSourceInfo() to parser.go - sets source on all steps after parsing - Updated cook.go to copy source fields from Step to Issue - Updated dry-run output to display source info: [from: formula@location] - Updated advice.go to set source on advice-generated steps - Updated controlflow.go to preserve source on loop-expanded steps - Updated expand.go to preserve source on template-expanded steps The source location format is: - steps[N] - regular step at index N - steps[N].children[M] - child step - steps[N].loop.body[M] - loop body step - template[N] - expansion template step - advice - step inserted by advice transformation 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -146,18 +146,20 @@ func expandLoopIteration(step *Step, iteration int) ([]*Step, error) {
|
||||
iterID := fmt.Sprintf("%s.iter%d.%s", step.ID, iteration, bodyStep.ID)
|
||||
|
||||
clone := &Step{
|
||||
ID: iterID,
|
||||
Title: bodyStep.Title,
|
||||
Description: bodyStep.Description,
|
||||
Type: bodyStep.Type,
|
||||
Priority: bodyStep.Priority,
|
||||
Assignee: bodyStep.Assignee,
|
||||
Condition: bodyStep.Condition,
|
||||
WaitsFor: bodyStep.WaitsFor,
|
||||
Expand: bodyStep.Expand,
|
||||
Gate: bodyStep.Gate,
|
||||
Loop: cloneLoopSpec(bodyStep.Loop), // Support nested loops (gt-zn35j)
|
||||
OnComplete: cloneOnComplete(bodyStep.OnComplete),
|
||||
ID: iterID,
|
||||
Title: bodyStep.Title,
|
||||
Description: bodyStep.Description,
|
||||
Type: bodyStep.Type,
|
||||
Priority: bodyStep.Priority,
|
||||
Assignee: bodyStep.Assignee,
|
||||
Condition: bodyStep.Condition,
|
||||
WaitsFor: bodyStep.WaitsFor,
|
||||
Expand: bodyStep.Expand,
|
||||
Gate: bodyStep.Gate,
|
||||
Loop: cloneLoopSpec(bodyStep.Loop), // Support nested loops (gt-zn35j)
|
||||
OnComplete: cloneOnComplete(bodyStep.OnComplete),
|
||||
SourceFormula: bodyStep.SourceFormula, // Preserve source (gt-8tmz.18)
|
||||
SourceLocation: fmt.Sprintf("%s.iter%d", bodyStep.SourceLocation, iteration), // Track iteration
|
||||
}
|
||||
|
||||
// Clone ExpandVars if present
|
||||
|
||||
Reference in New Issue
Block a user