You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/issues/tb-portreeve-apple-trust/decisions.md
+19Lines changed: 19 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -59,3 +59,22 @@ When the protected producer transforms either macOS CLI, it must rewrite the cor
59
59
Defer metadata repair until finalization - rejected because native verification must consume a self-consistent protected output. Keep separate unsigned and signed manifests - rejected because multiple authorities would make downstream selection ambiguous. Rebuild metadata independently in each native job - rejected because read-only verifiers must not mutate the producer output.
## Persist notarization continuity at the producer boundary
66
+
67
+
**Confidence:** HIGH
68
+
69
+
**Blast Radius:** Protected Apple producer, failure artifacts, exact signed DMG retention, workflow uploads, and notarization evidence
70
+
71
+
Treat successful notarytool submit output as request creation even when status is absent, while keeping info responses strict. Drive the real producer through the existing finite recovery state machine, persist every non-secret state transition beside the exact signed DMG before and after Apple calls, and upload only that recovery directory when the protected job fails. Once a request ID exists, all continuation targets that ID; no new submission is allowed. Successful candidates retain the recovery history but move the authoritative DMG into the normal trusted artifact set.
72
+
73
+
**Triggered by:** Live run 33267482516 returned a valid Apple request ID without status, then the producer rejected the response and deleted its output
74
+
75
+
**Alternatives considered:**
76
+
- Add `notarytool --wait` - rejected because it bypasses the approved explicit polling and continuity model.
77
+
- Default missing status without recording the request lifecycle - rejected because a later failure would again erase continuity.
78
+
- Keep deleting output on failure - rejected because exact signed bytes and failed-attempt evidence would disappear.
0 commit comments