solidprivacy commited on
Commit
6f6dc1c
·
1 Parent(s): a62d82f

Add Scrub release assurance contract

Browse files
control/SCRUB_RELEASE_ASSURANCE_CONTRACT_V1.md ADDED
@@ -0,0 +1,160 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # SolidPrivacy Scrub — Release Assurance Contract V1
2
+
3
+ ## Status
4
+
5
+ ```text
6
+ contract_id=SCRUB_RELEASE_ASSURANCE_CONTRACT_V1
7
+ version=1.0.0
8
+ standard_id=CROSS_PROJECT_TWO_ROLE_GOVERNANCE_V1
9
+ project_repository=solidprivacy-nl/scrub
10
+ status=ENFORCED
11
+ ```
12
+
13
+ ## Purpose
14
+
15
+ Prevent privacy-sensitive implementation work from certifying its own completion and keep implementation conclusions out of the assurance worker's initial judgment.
16
+
17
+ ## Consequential candidate
18
+
19
+ A candidate is consequential when it changes or claims completion for any of the following:
20
+
21
+ - recognizers, thresholds, replacement logic or human-review behavior;
22
+ - processed document bytes, filenames, MIME types or export semantics;
23
+ - Scrub Key schema, binding, lifecycle, warnings or download behavior;
24
+ - TXT/DOCX reinsert behavior;
25
+ - document hygiene, audit or residual-risk evidence;
26
+ - Streamlit product UI, runtime, dependency or deployment behavior;
27
+ - merge to `main`, GitHub Actions completion, Hugging Face synchronization or a release claim.
28
+
29
+ ## Required cycle
30
+
31
+ ```text
32
+ user request
33
+ → implementation_operations
34
+ → identifiable release candidate
35
+ → governance_release_assurance blind reconstruction
36
+ → PASS / FAIL / INDETERMINATE
37
+ → authorized merge or production action
38
+ → post-action verification
39
+ → closeout
40
+ ```
41
+
42
+ A repaired candidate receives a new candidate identity and a fresh assurance pass.
43
+
44
+ ## Candidate identity
45
+
46
+ Implementation must provide, without issuing a governance conclusion:
47
+
48
+ - repository;
49
+ - base commit SHA;
50
+ - head commit SHA;
51
+ - branch and PR number when available;
52
+ - workpackage title;
53
+ - exact files added/changed;
54
+ - explicit exclusions;
55
+ - implementation test commands and raw results;
56
+ - known blockers and residual risks;
57
+ - handover path.
58
+
59
+ The implementation handover is administrative evidence, not assurance evidence.
60
+
61
+ ## Blind-review input contract
62
+
63
+ Before its initial decision, assurance reconstructs the candidate without reading the implementation handover or implementation conclusions.
64
+
65
+ ### Permitted initial inputs
66
+
67
+ - requested outcome and approved workpackage scope;
68
+ - authoritative project control files;
69
+ - candidate source, base/head diff and file identities;
70
+ - acceptance criteria and exclusions recorded before or independently of implementation conclusions;
71
+ - test source, workflow source and raw GitHub Actions results;
72
+ - exact Hugging Face synchronization evidence and app evidence when applicable;
73
+ - risk register and relevant architecture/specification files.
74
+
75
+ ### Prohibited initial inputs
76
+
77
+ - implementation handover;
78
+ - implementation completion statement;
79
+ - implementation self-review, confidence assessment or claimed PASS;
80
+ - implementation explanation of why tests are sufficient;
81
+ - conclusions copied from the candidate PR description.
82
+
83
+ The reviewer may open the implementation handover only after recording an initial decision. It may then compare disclosure completeness and prepare closeout, but may not retroactively replace the initial independent reasoning.
84
+
85
+ ## Assurance decisions
86
+
87
+ ```text
88
+ PASS
89
+ FAIL
90
+ INDETERMINATE
91
+ ```
92
+
93
+ `PASS` requires all applicable acceptance criteria and evidence. Missing, stale or contradictory evidence is `FAIL` or `INDETERMINATE`, never an inferred pass.
94
+
95
+ Assurance may not modify the candidate under review. A required fix returns to implementation.
96
+
97
+ ## Minimum privacy-sensitive checks
98
+
99
+ For every applicable candidate, assurance checks independently that:
100
+
101
+ - no real personal data, secrets or tokens were introduced;
102
+ - document processing remains local unless explicitly approved otherwise;
103
+ - human review was not weakened;
104
+ - export semantics did not change outside scope;
105
+ - Scrub Key material is treated as re-identification-sensitive;
106
+ - wrong-key and malformed-key behavior remains fail-closed;
107
+ - audit evidence does not overstate anonymization or production readiness;
108
+ - synthetic fixtures preserve professional/legal meaning without real identifiers.
109
+
110
+ ## Test and deployment evidence
111
+
112
+ ### Before merge
113
+
114
+ - relevant focused tests;
115
+ - full repository test workflow where required by the workpackage;
116
+ - frontend/runtime checks when affected;
117
+ - exact candidate SHA associated with the evidence.
118
+
119
+ ### After merge
120
+
121
+ - GitHub Actions on the merged SHA;
122
+ - GitHub-to-Hugging-Face sync evidence for the same SHA when runtime files changed;
123
+ - app verification when UI behavior changed;
124
+ - no app verification claim for test/documentation-only work.
125
+
126
+ A successful workflow invocation is not itself a confirmed deployment outcome. A sync action and the target-space file identity/health check are separate evidence.
127
+
128
+ ## Status mapping
129
+
130
+ Implementation statuses:
131
+
132
+ ```text
133
+ IMPLEMENTATION_IN_PROGRESS
134
+ IMPLEMENTATION_BLOCKED
135
+ RELEASE_CANDIDATE_READY
136
+ ```
137
+
138
+ Assurance and closeout statuses:
139
+
140
+ ```text
141
+ GOVERNANCE_FAIL
142
+ GOVERNANCE_INDETERMINATE
143
+ GOVERNANCE_PASS_PRE_ACTION
144
+ ACTION_EXECUTED_UNVERIFIED
145
+ OUTCOME_CONFIRMED
146
+ ```
147
+
148
+ ## Workpackage pairing
149
+
150
+ Consequential implementation packages must have a separate verification package. The verification package:
151
+
152
+ - is claimed by `governance_release_assurance`;
153
+ - starts from the requested outcome and candidate identity;
154
+ - does not reuse the implementation worker's conclusions;
155
+ - records its own evidence and decision in a separate handover;
156
+ - cannot silently repair the implementation branch.
157
+
158
+ ## Current enforcement maturity
159
+
160
+ The repository begins at `LEVEL_1_CHECKLIST`. Existing GitHub Actions and synchronization evidence support later promotion to `LEVEL_2_MACHINE_EVIDENCE`, but that promotion requires a dedicated structured assurance-record package rather than a documentation claim.