Commit a3b4c0f
committed
feat(recovery): show bundle verification status when below threshold (#147)
When a friend opens their personalized recover.html with only their own
share loaded (below threshold), the recovery tool now shows a
verification card confirming their bundle is valid.
The card displays:
- "Your bundle is working" with a checkmark
- Which piece they hold (e.g. "piece 1 of 3")
- How many pieces are needed for recovery
- Whether the encrypted archive is pre-loaded
- A reminder to keep the bundle safe
The card appears automatically when the personalized share loads and
disappears once enough pieces are gathered for recovery.
Friends may open their bundle months or years after receiving it to
check if everything is still functional. Without a verification signal,
they have no way to confirm their piece will work when recovery is
actually needed. The existing below-threshold state just shows "waiting
for more shares" with no validation feedback.
This is especially relevant for the non-technical users rememory is
designed for. They need reassurance that their responsibility (keeping
the bundle safe) has been met.
- Built the binary with changes, sealed a 2-of-3 test project
- Extracted Alice's bundle and verified the verification-status div,
CSS, and translation keys are all embedded in recover.html
- Opened recover.html in browser and confirmed the verification card
appears with correct piece index, threshold, and manifest status
- Verified the card disappears when a second share is added (threshold
met)
- Verified manifest status line updates when manifest is loaded/cleared

<img width="1708" height="896" alt="CleanShot 2026-04-05 at 15 48 29@2x"
src="https://github.com/user-attachments/assets/b9e99c40-dc4f-493d-95da-e61a937cf68d"
/>
- [x] I have read [CONTRIBUTING.md](../CONTRIBUTING.md) and this PR
follows the guidelines
- [x] A human has reviewed the **entire diff** of this PR, every line of
code
- [x] A human understands the changes and can explain why this approach
is correct
- [x] Tests pass (`make full`)
- [x] This PR doesn't have AI-generated boilerplate or co-author lines
- [ ] This PR was authored and submitted by an AI agent without human
review
This contribution was developed with AI assistance.4 files changed
Lines changed: 88 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
28 | 28 | | |
29 | 29 | | |
30 | 30 | | |
| 31 | + | |
| 32 | + | |
31 | 33 | | |
32 | 34 | | |
33 | 35 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
114 | 114 | | |
115 | 115 | | |
116 | 116 | | |
| 117 | + | |
117 | 118 | | |
118 | 119 | | |
119 | 120 | | |
| |||
146 | 147 | | |
147 | 148 | | |
148 | 149 | | |
| 150 | + | |
149 | 151 | | |
150 | 152 | | |
151 | 153 | | |
| |||
1088 | 1090 | | |
1089 | 1091 | | |
1090 | 1092 | | |
| 1093 | + | |
| 1094 | + | |
| 1095 | + | |
| 1096 | + | |
| 1097 | + | |
| 1098 | + | |
| 1099 | + | |
| 1100 | + | |
| 1101 | + | |
| 1102 | + | |
| 1103 | + | |
| 1104 | + | |
| 1105 | + | |
| 1106 | + | |
| 1107 | + | |
| 1108 | + | |
| 1109 | + | |
| 1110 | + | |
| 1111 | + | |
| 1112 | + | |
| 1113 | + | |
| 1114 | + | |
| 1115 | + | |
| 1116 | + | |
| 1117 | + | |
| 1118 | + | |
| 1119 | + | |
| 1120 | + | |
| 1121 | + | |
| 1122 | + | |
| 1123 | + | |
| 1124 | + | |
| 1125 | + | |
| 1126 | + | |
| 1127 | + | |
| 1128 | + | |
| 1129 | + | |
| 1130 | + | |
| 1131 | + | |
| 1132 | + | |
1091 | 1133 | | |
1092 | 1134 | | |
1093 | 1135 | | |
| |||
1120 | 1162 | | |
1121 | 1163 | | |
1122 | 1164 | | |
| 1165 | + | |
| 1166 | + | |
1123 | 1167 | | |
1124 | 1168 | | |
1125 | 1169 | | |
| |||
1129 | 1173 | | |
1130 | 1174 | | |
1131 | 1175 | | |
| 1176 | + | |
1132 | 1177 | | |
1133 | 1178 | | |
1134 | 1179 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
221 | 221 | | |
222 | 222 | | |
223 | 223 | | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
224 | 258 | | |
225 | 259 | | |
226 | 260 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
92 | 92 | | |
93 | 93 | | |
94 | 94 | | |
95 | | - | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
96 | 102 | | |
0 commit comments