Spaces:
Running
Running
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.
|