Write ready_to_ship(tasks) — the go/no-go, computed.
Each task has id, launch_blocking, and the three acceptance-record
fields. Using the provided task_rag, return (verdict, blockers):
blockers: ids (in list order) of tasks wherelaunch_blockingis True AND the derived rag is not"green".verdict:"GO"if blockers is empty, else"NO-GO".
A red or amber on a non-blocking task never blocks the release — it rides along in the notes, not in this gate.
Two releases run. Expected output:
release A: NO-GO — T-2, T-5
release B: GO