v0.8.1: Ultra Fuzz Run 27 remediation + test coverage + doc fixes
Patch release bundling 12 commits of mid-sprint work since v0.8.0.
No new user-visible features, no DB migrations, no SDK breaks.
Audit remediation (Run 27, ~35 items)
- CRITICAL: item_image_confirm scan-before-swap; confirm_upload
rollback restores old_bytes; media_confirm rollback on any INSERT
error; extract_client_ip XFF dropped; idempotency middleware
fails loud.
- SERIOUS Storage: Content-Length binding on presigned uploads;
version expected_old guard + rollback; delete_version atomic
storage+S3; media_delete reordered; pending_uploads conflict
bumps created_at; promo_use_count detach-on-release.
- SERIOUS Payments: compute_splits clamp; promo starts_at atomic
check; FOR SHARE on guest auto-attach; promo expiry boundary;
Fan+ credit uniqueness comment.
- SERIOUS Security: SSH owner validation; SESSION_TOUCH lowered
to 5s; jwt_invalidated_at on suspend/logout-all/terminate;
pending_2fa TTL 10min; Argon2 params from PHC; backup codes
HMAC->Argon2 dual-read; constant_time_compare via subtle;
Sec-Fetch-Site check on fan-plus.
- SERIOUS UX: WishlistItem::price_display; CSS check-done glyph
audit; login + reset-password form recall; git/settings CSRF
gate; CSRF middleware AppError::Forbidden; AppError::Validation
now ValidationError with per-field errors (187-site migration).
- Architectural: scan layers in spawn_blocking + concurrent
ClamAV; build runner upload_multipart streaming; scheduler
tick-duration WARN+WAM; announcement fan-out off the lock;
s3-storage DeleteObjects batching; backup codes Argon2.
- MINOR: i64 in Fixed discount; cart check_min_charge; PKCE
method recheck at token exchange; [::1] in localhost redirect;
delete_session_by_id user-scoped; future-iat JWT rejection;
upload_multipart retry; sanitize_filename doc; content-type
sniffer disclaimer; cdn_base_url WARN; record_user_download
conflict target; media_presign racy pre-check removed.
- Carry-overs: Slug::from_trusted doc; compare.md math fixed.
Observability (Phase 1)
- caddy_ask_total{outcome} counter + domain_cache_entries gauge.
- pg_stat_activity gauges (active, max_connections, ratio).
- creator_storage_{used,cap}_bytes_total + fill_ratio.
UX polish
- Toast cap-with-overflow.
- Footer Shortcuts + What's New links.
- Landing-page What's new prominence.
- data-new-until badge mechanism.
- Auto-show What's New modal on FEATURE_VERSION bump.
Phase 3
- Trial-day presets in promo form.
- Promo redemption tracking modal.
- Scan-held upload warning surfaced in UI.
Test coverage (R26-115-122 closed)
- discover.rs: 13 tests
- embeds.rs: 18 tests
- streaming.rs: 12 tests (filling gaps left by storage.rs/video.rs)
- Earlier in cycle: SyncKit adversarial workflow (~400 lines)
Docs
- deploy/SSH_ACCESS.md (Tailscale break-glass procedure).
- about/compare.md revenue table math + Stripe fee consistency.
2 files changed,
+2 insertions,
-2 deletions
| 3551 |
3551 |
|
|
| 3552 |
3552 |
|
[[package]]
|
| 3553 |
3553 |
|
name = "makenotwork"
|
| 3554 |
|
- |
version = "0.8.0"
|
|
3554 |
+ |
version = "0.8.1"
|
| 3555 |
3555 |
|
dependencies = [
|
| 3556 |
3556 |
|
"anyhow",
|
| 3557 |
3557 |
|
"argon2",
|
| 1 |
1 |
|
[package]
|
| 2 |
2 |
|
name = "makenotwork"
|
| 3 |
|
- |
version = "0.8.0"
|
|
3 |
+ |
version = "0.8.1"
|
| 4 |
4 |
|
edition = "2024"
|
| 5 |
5 |
|
license-file = "LICENSE"
|
| 6 |
6 |
|
|