The plan playground for #3474 was rendered from the tree at commit 1, then commit 2 changed one of the facts it had already baked in. Nothing regenerated it.
commit 1 adopt 2.1.231 playground rendered here, from the tree as it was
└─ override expiry: 2026-09-20, risk R1 = "expires in ~38 days"
commit 2 renew override the fact changed
└─ override expiry: 2026-11-20
MERGE both commits land playground still describes commit 1's world
The artifact was accurate when written and false when merged. CI could not catch it: the HTML is valid, the JSON island is well-formed, the security test passes. Only reading the rendered page against ground truth finds it.
| Line | Role | Verdict |
|---|---|---|
| 255 | BASE (before) state | correct — the base really was 2026-09-20 |
| 265 | HEAD state, marked "UNCHANGED" | wrong — it changed in commit 2 |
| 282 | phase P1 detail | wrong — quoted the old expiry |
| 295-298 | risk R1, severity warning | wrong — the risk was resolved by commit 2 |
| 311 | decision D2 context | wrong — asserted the old deadline |
| 314 | decision D2 tradeoff | wrong — claimed the decision point was kept intact |
| 324 | the original prompt | correct — a historical record of what was asked |
Two of the eight were legitimately historical and were left alone. Rewriting those would have been the opposite error: falsifying the record to make it look current.
A generated artifact is a snapshot with a timestamp, not a live view. If a later commit on the same branch changes a fact the artifact asserts, the artifact is now wrong and no gate will say so. Either regenerate it as the last step before opening the PR, or write it to describe only what cannot change under it.