Modif scripts dev-create story

This commit is contained in:
MaksTinyWorkshop
2026-03-10 21:54:34 +01:00
parent 1b2ed6ff4e
commit c74f865a4b
6 changed files with 212 additions and 12 deletions

View File

@@ -17,6 +17,8 @@ DEV_STORY_XML="$PROJECT_ROOT/_bmad/bmm/workflows/4-implementation/dev-story/inst
CODE_REVIEW_XML="$PROJECT_ROOT/_bmad/bmm/workflows/4-implementation/code-review/instructions.xml"
DEV_STORY_CHECKLIST="$PROJECT_ROOT/_bmad/bmm/workflows/4-implementation/dev-story/checklist.md"
CODE_REVIEW_CHECKLIST="$PROJECT_ROOT/_bmad/bmm/workflows/4-implementation/code-review/checklist.md"
STORY_TEMPLATE_MD="$PROJECT_ROOT/_bmad/bmm/workflows/4-implementation/create-story/template.md"
CREATE_STORY_XML="$PROJECT_ROOT/_bmad/bmm/workflows/4-implementation/create-story/instructions.xml"
PRODUCER_AGENTS_CONFIG="$TEMPLATES_DIR/config/producer_agents.tsv"
MEMORIES_DIR="$TEMPLATES_DIR/memories"
@@ -25,6 +27,8 @@ CLAUDE_FRAGMENTS_DIR="$TEMPLATES_DIR/claude"
CAPITALIZE_MARKER="95_a_capitaliser.md"
CAPITALIZE_MARKER_XML="Capitalisation Lead_tech"
PARALLELIZATION_MARKER_XML="Story parallelization check"
CREATE_STORY_PARALLELIZATION_MARKER_XML="Story parallelization metadata"
if [ ! -d "$AGENTS_DIR" ]; then
echo "Erreur : dossier _bmad/_config/agents/ introuvable dans $PROJECT_ROOT" >&2
@@ -50,6 +54,14 @@ render_template() {
sed "s/__PROJECT_NAME__/$(escape_sed_replacement "$PROJECT_NAME")/g" "$file"
}
render_template_to_temp_file() {
local file="$1"
local output
output="$(mktemp)"
render_template "$file" > "$output"
printf '%s\n' "$output"
}
patch_line_after_match() {
local file="$1"
local match="$2"
@@ -65,17 +77,19 @@ patch_line_after_match() {
return 0
fi
local fragment
fragment="$(render_template "$fragment_file")"
local rendered_fragment
rendered_fragment="$(render_template_to_temp_file "$fragment_file")"
awk -v match="$match" -v block="$fragment" '
awk -v match="$match" -v fragfile="$rendered_fragment" '
index($0, match) {
print
print block
while ((getline line < fragfile) > 0) print line
close(fragfile)
next
}
{ print }
' "$file" > "${file}.tmp" && mv "${file}.tmp" "$file"
rm -f "$rendered_fragment"
echo " [ok] $(basename "$file") — capitalisation injectée"
}
@@ -95,19 +109,114 @@ patch_block_before_match() {
return 0
fi
local fragment
fragment="$(render_template "$fragment_file")"
local rendered_fragment
rendered_fragment="$(render_template_to_temp_file "$fragment_file")"
awk -v match="$match" -v block="$fragment" '
awk -v match="$match" -v fragfile="$rendered_fragment" '
index($0, match) {
print block
while ((getline line < fragfile) > 0) print line
close(fragfile)
}
{ print }
' "$file" > "${file}.tmp" && mv "${file}.tmp" "$file"
rm -f "$rendered_fragment"
echo " [ok] $(basename "$file") — capitalisation injectée"
}
patch_create_story_parallelization() {
local file="$CREATE_STORY_XML"
local fragment_file="$WORKFLOWS_DIR/create-story-parallelization.xmlfrag"
if [ ! -f "$file" ]; then
echo " [skip] $(basename "$file") — fichier absent"
return 0
fi
if grep -q "$CREATE_STORY_PARALLELIZATION_MARKER_XML" "$file"; then
echo " [skip] $(basename "$file") — parallélisation create-story déjà présente"
return 0
fi
local rendered_fragment
rendered_fragment="$(render_template_to_temp_file "$fragment_file")"
awk -v fragfile="$rendered_fragment" '
/<template-output file="\{default_output_file\}">story_header<\/template-output>/ {
print
while ((getline line < fragfile) > 0) print line
close(fragfile)
next
}
{ print }
' "$file" > "${file}.tmp" && mv "${file}.tmp" "$file"
rm -f "$rendered_fragment"
echo " [ok] $(basename "$file") — règle create-story injectée"
}
patch_story_template() {
local file="$STORY_TEMPLATE_MD"
local fragment_file="$WORKFLOWS_DIR/story-template-frontmatter.mdfrag"
if [ ! -f "$file" ]; then
echo " [skip] $(basename "$file") — fichier absent"
return 0
fi
if grep -q "^Parallel-safe:" "$file"; then
echo " [skip] $(basename "$file") — parallélisation déjà présente"
return 0
fi
local rendered_fragment
rendered_fragment="$(render_template_to_temp_file "$fragment_file")"
awk -v fragfile="$rendered_fragment" '
/^Status:/ {
print
while ((getline line < fragfile) > 0) print line
close(fragfile)
next
}
{ print }
' "$file" > "${file}.tmp" && mv "${file}.tmp" "$file"
rm -f "$rendered_fragment"
echo " [ok] $(basename "$file") — frontmatter de parallélisation injecté"
}
patch_dev_story_parallelization() {
local file="$DEV_STORY_XML"
local fragment_file="$WORKFLOWS_DIR/dev-story-parallelization-check.xmlfrag"
if [ ! -f "$file" ]; then
echo " [skip] $(basename "$file") — fichier absent"
return 0
fi
if grep -q "$PARALLELIZATION_MARKER_XML" "$file"; then
echo " [skip] $(basename "$file") — parallélisation déjà présente"
return 0
fi
local rendered_fragment
rendered_fragment="$(render_template_to_temp_file "$fragment_file")"
awk -v fragfile="$rendered_fragment" '
/<step n="5" goal="Implement task following red-green-refactor cycle">/ {
while ((getline line < fragfile) > 0) print line
close(fragfile)
print
next
}
{ print }
' "$file" > "${file}.tmp" && mv "${file}.tmp" "$file"
rm -f "$rendered_fragment"
echo " [ok] $(basename "$file") — règle de parallélisation injectée"
}
patch_agent() {
local agent="$1"
local template_name="$2"
@@ -173,20 +282,22 @@ patch_code_review() {
return 0
fi
local fragment
fragment="$(render_template "$fragment_file")"
local rendered_fragment
rendered_fragment="$(render_template_to_temp_file "$fragment_file")"
awk -v block="$fragment" '
awk -v fragfile="$rendered_fragment" '
/✅ Review Complete!/ { in_review_complete = 1 }
in_review_complete && /<\/output>/ {
print
print ""
print block
while ((getline line < fragfile) > 0) print line
close(fragfile)
in_review_complete = 0
next
}
{ print }
' "$file" > "${file}.tmp" && mv "${file}.tmp" "$file"
rm -f "$rendered_fragment"
echo " [ok] $(basename "$file") — capitalisation injectée"
}
@@ -235,6 +346,9 @@ patch_agents
echo ""
echo "Patch workflows :"
patch_story_template
patch_create_story_parallelization
patch_dev_story_parallelization
patch_dev_story
patch_code_review
patch_dev_story_checklist