(report)
| 160 | } |
| 161 | |
| 162 | function blockerReasons(report) { |
| 163 | const reasons = []; |
| 164 | if (!report.ready) reasons.push(`readiness status is ${report.status}`); |
| 165 | if (report.currentHead && report.head && report.currentHead !== report.head) { |
| 166 | reasons.push(`readiness head ${report.head} does not match current branch head ${report.currentHead}`); |
| 167 | } |
| 168 | for (const [gate, result] of Object.entries(report.gates || {})) { |
| 169 | if (!result.pass) reasons.push(`${gate} gate failed: ${result.detail}`); |
| 170 | } |
| 171 | return reasons; |
| 172 | } |
| 173 | |
| 174 | function statusForStack(reports, blocked) { |
| 175 | if (reports.length === 0) return 'no-stack'; |
no outgoing calls
no test coverage detected