@once @endonce

Gantt

· {{ $quarter }} · {{ $qStartLabel }} – {{ $qEndLabel }}
{{ $summary['targets'] }} story target{{ $summary['targets'] === 1 ? '' : 's' }} {{ $summary['with_plan'] }} with test plan {{ $summary['sets'] }} test set{{ $summary['sets'] === 1 ? '' : 's' }} QA effort ~{{ $summary['qa_days'] }} d + Dev fix TAT ~{{ $summary['tat_days'] }} d Executed {{ $summary['executed_pct'] }}% Pass rate {{ $summary['pass_pct'] }}%
Estimated duration Executed (fill) Weekend Results uploaded Today
@php $passClass = fn ($p, $exec) => $exec === 0 ? '' : ($p >= 90 ? 'pass-good' : ($p >= 70 ? 'pass-warn' : 'pass-bad')); @endphp @if (empty($groups))
Nothing to show for {{ $quarter }}@if ($hideWithPlan) — every story here already has a test plan @endif.
@else
{{-- Timeline header: month band + one box per day --}}
Story target
@foreach ($months as $m){{ $m['label'] }}@endforeach
@foreach ($days as $d)
{{ $d['dow'] }}{{ $d['dom'] }}
@endforeach
@if ($todayOffset !== null)
@endif
@foreach ($groups as $project => $g)
{{ $project }} {{ $g['plan'] }}/{{ $g['count'] }} with test plan · ~{{ $g['days'] }} d · {{ $g['executed_pct'] }}% executed
@foreach ($g['items'] as $item) @if ($item['kind'] === 'row') @include('partials.gantt-row', [ 'r' => $item['row'], 'rowKey' => 'grow-'.$loop->parent->index.'-'.$loop->index, 'child' => false, 'xShow' => null, ]) @else {{-- Stories sharing a title prefix, merged under it and collapsed by default. --}}
{{ $item['title'] }} {{ $item['count'] }}
~{{ $item['days'] }} d {{ $item['plan'] }}/{{ $item['count'] }} with plan {{ $item['executed'] }}% executed
@if ($todayOffset !== null)
@endif @if ($item['bar'])
@if ($item['executed'] > 0)
@endif
{{ $item['executed'] }}%
@endif @foreach ($item['markers'] as $mk)
@endforeach
@foreach ($item['rows'] as $r) @include('partials.gantt-row', [ 'r' => $r, 'rowKey' => 'grow-'.$item['key'].'-'.$loop->index, 'child' => true, 'xShow' => "op('".$item['key']."')", ]) @endforeach @endif @endforeach @endforeach
@endif