@@ -96,7 +96,9 @@ rm -f "$PLAN_FILE"
9696
9797# ── Phase A: Planning ──
9898log " Phase A: Planning..."
99- ./iterate --phase plan --gh-owner GrayCodeAI --gh-repo iterate 2>> " $LOG_FILE " || true
99+ if ! ./iterate --phase plan --gh-owner GrayCodeAI --gh-repo iterate 2>> " $LOG_FILE " ; then
100+ log " WARNING: plan phase exited with error — checking for fallback"
101+ fi
100102
101103# Fallback plan if agent didn't create one
102104if [[ ! -f " $PLAN_FILE " ]]; then
134136# ── Phase B: Implementation ──
135137log " Phase B: Implementation..."
136138sleep 5 # Brief pause between phases
137- ./iterate --phase implement --gh-owner GrayCodeAI --gh-repo iterate 2>> " $LOG_FILE " || true
139+ if ! ./iterate --phase implement --gh-owner GrayCodeAI --gh-repo iterate 2>> " $LOG_FILE " ; then
140+ log " WARNING: implement phase exited with error — continuing to communicate"
141+ fi
138142
139143# ── Phase C: Communication ──
140144log " Phase C: Communication..."
141145sleep 5 # Brief pause between phases
142- ./iterate --phase communicate --gh-owner GrayCodeAI --gh-repo iterate 2>> " $LOG_FILE " || true
146+ if ! ./iterate --phase communicate --gh-owner GrayCodeAI --gh-repo iterate 2>> " $LOG_FILE " ; then
147+ log " WARNING: communicate phase exited with error"
148+ fi
143149
144150# ── Verify journal was written ──
145- if grep -q " ^## Day $DAY " " ${REPOPATH} /docs/JOURNAL.md" 2> /dev/null; then
151+ if grep -qP " ^## Day ${DAY} (\s|$|—) " " ${REPOPATH} /docs/JOURNAL.md " 2> /dev/null || grep - q " ^## Day ${ DAY} " " ${REPOPATH} /docs/JOURNAL.md" 2> /dev/null; then
146152 log " Journal entry written for Day $DAY "
147153else
148154 log " WARNING: No journal entry found for Day $DAY — writing fallback"
@@ -319,11 +325,11 @@ gh api repos/"$GITHUB_REPO"/branches --jq '.[].name' 2>/dev/null | grep "^evolut
319325 if [[ " $branch " == " $BRANCH " ]]; then
320326 continue
321327 fi
322- # Check if branch's PR is merged or closed
323- PR_STATE=$( gh pr list --repo " $GITHUB_REPO " --head " $branch " -- json state --jq ' .[0]. state' 2> /dev/null)
328+ # Use gh pr view for reliable single- branch state (avoids race with gh pr list pagination)
329+ PR_STATE=$( gh pr view --repo " $GITHUB_REPO " --json state --jq ' .state' --head " $branch " 2> /dev/null || echo " " )
324330 if [[ " $PR_STATE " == " MERGED" || " $PR_STATE " == " CLOSED" ]]; then
325- log " Deleting stale branch: $branch "
326- git push origin --delete " $branch " 2> /dev/null || true
331+ log " Deleting stale branch: $branch (PR state: $PR_STATE ) "
332+ git push origin --delete " $branch " 2> /dev/null || log " Failed to delete branch: $branch "
327333 fi
328334done
329335
@@ -343,24 +349,23 @@ log "Duration: ${SESSION_DURATION}s"
343349if [[ -n " ${DISCORD_WEBHOOK_URL:- } " ]]; then
344350 log " Sending Discord notification..."
345351
346- # Get journal entry for this day
347- JOURNAL_ENTRY=$( grep -A3 " ^## Day $DAY " docs/JOURNAL.md 2> /dev/null | head -4 || echo " No journal entry" )
348-
349- DISCORD_MSG=" {
350- \" embeds\" : [{
351- \" title\" : \" 🧬 Evolution Day $DAY Complete\" ,
352- \" color\" : 5814783,
353- \" fields\" : [
354- {\" name\" : \" PR\" , \" value\" : \" ${PR_NUMBER:- none} \" , \" inline\" : true},
355- {\" name\" : \" Duration\" , \" value\" : \" ${SESSION_DURATION} s\" , \" inline\" : true},
356- {\" name\" : \" Commits\" , \" value\" : \" $( git log --oneline origin/main..HEAD 2> /dev/null | wc -l | tr -d ' ' ) \" , \" inline\" : true},
357- {\" name\" : \" Journal\" , \" value\" : \" $( echo " $JOURNAL_ENTRY " | head -3 | tr ' \n' ' ' | cut -c1-100) \" }
358- ],
359- \" footer\" : {\" text\" : \" iterate-evolve[bot]\" },
360- \" timestamp\" : \" $( date -u +' %Y-%m-%dT%H:%M:%SZ' ) \"
361- }]
362- }"
363-
352+ JOURNAL_ENTRY=$( grep -A3 " ^## Day ${DAY} \|^## Day ${DAY} —" docs/JOURNAL.md 2> /dev/null | head -4 || echo " No journal entry" )
353+ COMMIT_COUNT=$( git log --oneline origin/main..HEAD 2> /dev/null | wc -l | tr -d ' ' )
354+
355+ DISCORD_MSG=$( jq -n \
356+ --arg title " 🧬 Evolution Day $DAY Complete" \
357+ --arg pr " ${PR_NUMBER:- none} " \
358+ --arg dur " ${SESSION_DURATION} s" \
359+ --arg commits " $COMMIT_COUNT " \
360+ --arg journal " $( echo " $JOURNAL_ENTRY " | head -3 | tr ' \n' ' ' | cut -c1-100) " \
361+ --arg ts " $( date -u +' %Y-%m-%dT%H:%M:%SZ' ) " \
362+ ' {embeds:[{title:$title,color:5814783,fields:[
363+ {name:"PR",value:$pr,inline:true},
364+ {name:"Duration",value:$dur,inline:true},
365+ {name:"Commits",value:$commits,inline:true},
366+ {name:"Journal",value:$journal}
367+ ],footer:{text:"iterate-evolve[bot]"},timestamp:$ts}]}' )
368+
364369 curl -s -H " Content-Type: application/json" \
365370 -d " $DISCORD_MSG " \
366371 " $DISCORD_WEBHOOK_URL " > /dev/null 2>&1 || log " Discord notification failed"
0 commit comments