(content)
| 200 | return decisions.length > 0 ? decisions[decisions.length - 1].replace(/^- /, '') : null; |
| 201 | } |
| 202 | |
| 203 | function completionRecordSummary(content) { |
| 204 | const values = {}; |
| 205 | let inSection = false; |
| 206 | for (const line of String(content || '').split(/\r?\n/)) { |
| 207 | if (/^##\s+Completion Record\s*$/i.test(line.trim())) { |
| 208 | inSection = true; |
| 209 | continue; |
| 210 | } |
| 211 | if (inSection && /^##\s+/.test(line.trim())) break; |
| 212 | if (!inSection) continue; |
| 213 | const match = line.match(/^-\s+([^:]+):\s*(.+)$/); |
| 214 | if (match) values[match[1].trim().toLowerCase()] = match[2].trim(); |
| 215 | } |
| 216 | return { |
| 217 | completedAt: values['completed at'] || null, |
| 218 | outcome: values.outcome || extractCompletionOutcome(content), |
| 219 | pr: values.pr || null, |
| 220 | mergeSha: values['merge sha'] || null, |
| 221 | verification: values.verification || null, |
| 222 | note: values.note || null, |
| 223 | }; |
| 224 | } |
| 225 | |
| 226 | function packagePhaseReadiness(parsed) { |
no test coverage detected