({ capsule, mutation, gene, blastRadius })
| 196 | } |
| 197 | |
| 198 | function buildPRBody({ capsule, mutation, gene, blastRadius }) { |
| 199 | const score = capsule && capsule.outcome ? capsule.outcome.score : 0; |
| 200 | const streak = capsule ? capsule.success_streak : 0; |
| 201 | const capsuleId = capsule ? capsule.id : 'unknown'; |
| 202 | const geneId = gene ? gene.id : 'unknown'; |
| 203 | const signals = capsule && Array.isArray(capsule.trigger) |
| 204 | ? capsule.trigger.slice(0, 5).join(', ') |
| 205 | : ''; |
| 206 | const category = mutation ? mutation.category : 'unknown'; |
| 207 | const risk = mutation ? mutation.risk : 'unknown'; |
| 208 | const rationale = mutation && mutation.rationale |
| 209 | ? redactString(String(mutation.rationale).slice(0, 500)) |
| 210 | : ''; |
| 211 | const files = blastRadius && Array.isArray(blastRadius.all_changed_files) |
| 212 | ? blastRadius.all_changed_files.map(normalizeRel) |
| 213 | : []; |
| 214 | const filesStr = files.map(function (f) { return '- `' + f + '`'; }).join('\n'); |
| 215 | |
| 216 | return [ |
| 217 | '## Mutation Summary', |
| 218 | '', |
| 219 | '- **Category:** ' + category, |
| 220 | '- **Risk:** ' + risk, |
| 221 | '- **PRM Score:** ' + (typeof score === 'number' ? score.toFixed(3) : String(score)), |
| 222 | '- **Success Streak:** ' + streak, |
| 223 | '- **Gene:** `' + geneId + '`', |
| 224 | '- **Signals:** ' + (signals || 'none'), |
| 225 | '- **Capsule:** `' + capsuleId + '`', |
| 226 | '', |
| 227 | '## Rationale', |
| 228 | '', |
| 229 | rationale || '_No rationale provided._', |
| 230 | '', |
| 231 | '## Changed Files', |
| 232 | '', |
| 233 | filesStr || '_None._', |
| 234 | '', |
| 235 | '## Blast Radius', |
| 236 | '', |
| 237 | '- Files: ' + (blastRadius ? blastRadius.files : 0), |
| 238 | '- Lines: ' + (blastRadius ? blastRadius.lines : 0), |
| 239 | '', |
| 240 | '---', |
| 241 | '', |
| 242 | '_This PR was auto-generated by evolver self-evolution (GEP)._', |
| 243 | '_Capsule: ' + capsuleId + ' | Gene: ' + geneId + '_', |
| 244 | ].join('\n'); |
| 245 | } |
| 246 | |
| 247 | function buildPRTitle(mutation) { |
| 248 | const rationale = mutation && mutation.rationale |
no test coverage detected