Without a written rule the decision follows the loudest voice: schedule says go, caution says no-go, and the chip goes out on confidence. The rule must exist before the meeting, score the same inputs the same way whoever reads them, and name what happens after each outcome. This lesson writes the NanoSoC rule and scores it against the hard case: four live waivers, one new request and a decision to defend. Its one job is the rule; the surprises that arrive after it is applied are next.
Go needs four simultaneous truths: the manifest checker green on the signoff candidate, the dashboard with zero reds, every live waiver owned, evidenced and unexpired, and equivalence proven for every netlist including the last ECO. Any single failure is no-go, and no-go names its exit: the missing evidence, the owner, and the date of the reconvene, never an open-ended delay. For anything that changes the database sent to manufacturing, a conditional go does not exist: a go with homework is a no-go with better catering. Items that cannot change that database, such as test-program tuning, the bring-up plan or documentation, may close after release, listed with owner and date in the review record.
The drill below uses the NanoSoC waiver set on day 182, the signoff-complete date: W-009 (false), W-014 and W-021 (proven safe) and W-027 (bounded risk) are live, evidenced and owned, so their rows stay amber. W-030, a new bounded-risk request against the verification row, arrives without its containment analysis, so that row turns red, and red is no-go with a named exit. The script scores four scenarios, so the rule is shown to return both outcomes.
# Score go/no-go by rule on day 182. Waiver and metric data are
# illustrative and extend the same waiver table used in earlier lessons.
DAY = 182
metrics = {"timing": "amber", "power": "green", "physical": "green",
"crossings": "amber", "verification": "amber",
"connectivity": "green", "equivalence": "green",
"gate-level-sim": "green"}
waivers = { # id: (discipline, evidenced, expiry day)
"W-009": ("timing", True, 210),
"W-014": ("crossings", True, 240),
"W-021": ("timing", True, 320),
"W-027": ("verification", True, 280),
"W-030": ("verification", False, 362), # requested, containment missing
}
def decide(checker_green, equivalence, metrics, waivers, day):
rows = dict(metrics)
bad = []
for wid, (disc, evidenced, expiry) in sorted(waivers.items()):
if not evidenced or expiry <= day:
rows[disc] = "red" # this waiver turns its row red
bad.append(wid)
reds = sorted(d for d, c in rows.items() if c == "red")
go = checker_green and equivalence and not reds
return go, reds, bad
go, reds, bad = decide(True, True, metrics, waivers, DAY)
assert go is False and reds == ["verification"] and bad == ["W-030"]
# the exit: W-030 containment analysis arrives and is evidenced
resolved = dict(waivers, **{"W-030": ("verification", True, 362)})
assert decide(True, True, metrics, resolved, DAY) == (True, [], [])
# an expired waiver is no-go even with everything else green
lapsed = dict(resolved, **{"W-009": ("timing", True, 181)})
assert decide(True, True, metrics, lapsed, DAY) == (False, ["timing"], ["W-009"])
# a missing equivalence run is no-go whatever the colours say
assert decide(True, False, metrics, resolved, DAY)[0] is False
print("PASS: no-go while W-030 lacks containment (owner integrator); go once resolved")The rule written on the first page of the review pack, with the four truths as checkboxes.
The scored table for the actual inputs, showing which truth failed and the exit it demands.
Signatures from every owner on the outcome: a go nobody signed is a rumour.
After a no-go, the reconvene checks only the exit items: the missing containment analysis for W-030, the rerun it requires, nothing else reopened. After a go, the manifest is sealed and any further change is an ECO against a taped baseline. Rehearse the drill quarterly with the real tables even when no tapeout looms; a rule first used under pressure will be misused under pressure.
No-go. Expired means open, open in any row the dashboard tracks is red, and red is no-go. Re-confirm the waiver with fresh evidence and reconvene.