Attachments end-to-end: drafts, replies and scheduled posts (fase 2b) #164

Merged
robbertbos merged 8 commits from fase-2b-kabel-v2 into main 2026-07-24 07:00:49 +00:00
Owner

Fase 2b van "nieuw bericht opstellen + plannen". Base: main.

Bijlagen reizen nu end-to-end als geparkeerde refs (owned uuids) door concept, direct antwoord en gepland bericht, en uploaden pas naar Mattermost op het moment van verzenden (dat ontwijkt de 7-daagse vervaltermijn van MM voor niet-gekoppelde bestanden). De oude POST /cards/{id}/files-route (MM file_id-currency) is geschrapt ten gunste van de kaartloze POST /outgoing-files (ref-currency). Een dagelijkse orphan-sweep ruimt geparkeerde bestanden op die na 7 dagen door geen enkele rij meer worden gerefereerd.

Uit de adversariele review-pass (security / correctness / WCAG)

  • Concept-bijlagen rehydrateren bij het laden, zodat een heropend concept ze niet stil loskoppelt.
  • Een bijlage die tijdens uploaden wordt verwijderd lekt niet meer; een lopende concept-save wordt geflusht bij unmount.
  • Upload-fouten worden in een aria-live-regio aangekondigd en met tekst gemarkeerd (niet alleen kleur).
  • De runner verwijdert geparkeerde bestanden pas nadat STATE_SENT is vastgelegd.
  • _delete_orphan_refs is per-eigenaar gescoped; outgoing_files faalt dicht op een eigenaarloze sidecar.

BIO/DPIA/NeRDS-review-fixes (in deze PR verwerkt)

  • Bijlage-inhoud versleuteld at rest (eigen HKDF-domein waggle-parkedfile-v1).
  • Retry plaatst geen dubbele bijlage meer (mm_file_id-memo persistent).
  • Account loskoppelen ruimt de geparkeerde bijlagen op.
  • Toegankelijke upload-status + disabled-reden (WCAG 4.1.3 / 1.4.1).
  • Audit-events op de vertrouwensgrens: verzending naar MM + quota-weigering.
  • Docs: quota-grens, volume-encryptie/DPIA, bewaartermijn.

Poorten

Backend 1398 tests, 100% coverage; frontend tsc + vitest + build + eslint; pre-commit schoon. Postgres-parity + e2e via CI.


Vervangt #145 (die PR liep vast in Forgejos mergeability-cache na meerdere force-pushes/reopens; branch en inhoud zijn identiek en lokaal geverifieerd - schone merge + alle gates groen).

Fase 2b van "nieuw bericht opstellen + plannen". Base: main. Bijlagen reizen nu end-to-end als geparkeerde refs (owned uuids) door concept, direct antwoord en gepland bericht, en uploaden pas naar Mattermost op het moment van verzenden (dat ontwijkt de 7-daagse vervaltermijn van MM voor niet-gekoppelde bestanden). De oude `POST /cards/{id}/files`-route (MM file_id-currency) is geschrapt ten gunste van de kaartloze `POST /outgoing-files` (ref-currency). Een dagelijkse orphan-sweep ruimt geparkeerde bestanden op die na 7 dagen door geen enkele rij meer worden gerefereerd. ## Uit de adversariele review-pass (security / correctness / WCAG) - Concept-bijlagen rehydrateren bij het laden, zodat een heropend concept ze niet stil loskoppelt. - Een bijlage die tijdens uploaden wordt verwijderd lekt niet meer; een lopende concept-save wordt geflusht bij unmount. - Upload-fouten worden in een aria-live-regio aangekondigd en met tekst gemarkeerd (niet alleen kleur). - De runner verwijdert geparkeerde bestanden pas nadat STATE_SENT is vastgelegd. - `_delete_orphan_refs` is per-eigenaar gescoped; `outgoing_files` faalt dicht op een eigenaarloze sidecar. ## BIO/DPIA/NeRDS-review-fixes (in deze PR verwerkt) - Bijlage-inhoud versleuteld at rest (eigen HKDF-domein `waggle-parkedfile-v1`). - Retry plaatst geen dubbele bijlage meer (mm_file_id-memo persistent). - Account loskoppelen ruimt de geparkeerde bijlagen op. - Toegankelijke upload-status + disabled-reden (WCAG 4.1.3 / 1.4.1). - Audit-events op de vertrouwensgrens: verzending naar MM + quota-weigering. - Docs: quota-grens, volume-encryptie/DPIA, bewaartermijn. ## Poorten Backend 1398 tests, 100% coverage; frontend tsc + vitest + build + eslint; pre-commit schoon. Postgres-parity + e2e via CI. --- _Vervangt #145 (die PR liep vast in Forgejos mergeability-cache na meerdere force-pushes/reopens; branch en inhoud zijn identiek en lokaal geverifieerd - schone merge + alle gates groen)._
robbertbos force-pushed fase-2b-kabel-v2 from b2510e0755
Some checks failed
CI / pre-commit (pull_request) Has been cancelled
CI / backend-test (pull_request) Has been cancelled
CI / backend-test-postgres (pull_request) Has been cancelled
CI / frontend-test (pull_request) Has been cancelled
CI / e2e (pull_request) Has been cancelled
CI / release-scripts (pull_request) Has been cancelled
security-scan / Python SCA (pip-audit) (pull_request) Has been cancelled
security-scan / Python SAST (bandit) (pull_request) Has been cancelled
security-scan / JS SCA (npm audit) (pull_request) Has been cancelled
security-scan / Filesystem scan (trivy fs) (pull_request) Has been cancelled
security-scan / SBOM (trivy) (pull_request) Has been cancelled
test-build / build (pull_request) Has been cancelled
test-build / build (backend) (pull_request) Has been cancelled
test-build / build (frontend) (pull_request) Has been cancelled
to bcd090a158
Some checks failed
CI / pre-commit (pull_request) Has been cancelled
CI / backend-test (pull_request) Has been cancelled
CI / backend-test-postgres (pull_request) Has been cancelled
CI / frontend-test (pull_request) Has been cancelled
CI / e2e (pull_request) Has been cancelled
CI / release-scripts (pull_request) Has been cancelled
security-scan / Python SCA (pip-audit) (pull_request) Has been cancelled
security-scan / Python SAST (bandit) (pull_request) Has been cancelled
security-scan / JS SCA (npm audit) (pull_request) Has been cancelled
security-scan / Filesystem scan (trivy fs) (pull_request) Has been cancelled
security-scan / SBOM (trivy) (pull_request) Has been cancelled
test-build / build (pull_request) Has been cancelled
test-build / build (backend) (pull_request) Has been cancelled
test-build / build (frontend) (pull_request) Has been cancelled
2026-07-24 05:41:00 +00:00
Compare
robbertbos force-pushed fase-2b-kabel-v2 from bcd090a158
Some checks failed
CI / pre-commit (pull_request) Has been cancelled
CI / backend-test (pull_request) Has been cancelled
CI / backend-test-postgres (pull_request) Has been cancelled
CI / frontend-test (pull_request) Has been cancelled
CI / e2e (pull_request) Has been cancelled
CI / release-scripts (pull_request) Has been cancelled
security-scan / Python SCA (pip-audit) (pull_request) Has been cancelled
security-scan / Python SAST (bandit) (pull_request) Has been cancelled
security-scan / JS SCA (npm audit) (pull_request) Has been cancelled
security-scan / Filesystem scan (trivy fs) (pull_request) Has been cancelled
security-scan / SBOM (trivy) (pull_request) Has been cancelled
test-build / build (pull_request) Has been cancelled
test-build / build (backend) (pull_request) Has been cancelled
test-build / build (frontend) (pull_request) Has been cancelled
to 7957c50149
Some checks failed
CI / pre-commit (pull_request) Has been cancelled
CI / backend-test (pull_request) Has been cancelled
CI / backend-test-postgres (pull_request) Has been cancelled
CI / frontend-test (pull_request) Has been cancelled
CI / e2e (pull_request) Has been cancelled
CI / release-scripts (pull_request) Has been cancelled
security-scan / Python SCA (pip-audit) (pull_request) Has been cancelled
security-scan / Python SAST (bandit) (pull_request) Has been cancelled
security-scan / JS SCA (npm audit) (pull_request) Has been cancelled
security-scan / Filesystem scan (trivy fs) (pull_request) Has been cancelled
security-scan / SBOM (trivy) (pull_request) Has been cancelled
test-build / build (pull_request) Has been cancelled
test-build / build (backend) (pull_request) Has been cancelled
test-build / build (frontend) (pull_request) Has been cancelled
2026-07-24 05:51:37 +00:00
Compare
robbertbos force-pushed fase-2b-kabel-v2 from 7957c50149
Some checks failed
CI / pre-commit (pull_request) Has been cancelled
CI / backend-test (pull_request) Has been cancelled
CI / backend-test-postgres (pull_request) Has been cancelled
CI / frontend-test (pull_request) Has been cancelled
CI / e2e (pull_request) Has been cancelled
CI / release-scripts (pull_request) Has been cancelled
security-scan / Python SCA (pip-audit) (pull_request) Has been cancelled
security-scan / Python SAST (bandit) (pull_request) Has been cancelled
security-scan / JS SCA (npm audit) (pull_request) Has been cancelled
security-scan / Filesystem scan (trivy fs) (pull_request) Has been cancelled
security-scan / SBOM (trivy) (pull_request) Has been cancelled
test-build / build (pull_request) Has been cancelled
test-build / build (backend) (pull_request) Has been cancelled
test-build / build (frontend) (pull_request) Has been cancelled
to d6644cdbe7
Some checks failed
CI / pre-commit (push) Successful in 1m45s
CI / pre-commit (pull_request) Has been cancelled
CI / backend-test (pull_request) Has been cancelled
CI / backend-test-postgres (pull_request) Has been cancelled
CI / frontend-test (pull_request) Has been cancelled
CI / e2e (pull_request) Has been cancelled
CI / release-scripts (pull_request) Has been cancelled
security-scan / Python SCA (pip-audit) (pull_request) Has been cancelled
security-scan / Python SAST (bandit) (pull_request) Has been cancelled
security-scan / JS SCA (npm audit) (pull_request) Has been cancelled
security-scan / Filesystem scan (trivy fs) (pull_request) Has been cancelled
security-scan / SBOM (trivy) (pull_request) Has been cancelled
test-build / build (pull_request) Has been cancelled
test-build / build (backend) (pull_request) Has been cancelled
test-build / build (frontend) (pull_request) Has been cancelled
CI / e2e (push) Failing after 6m12s
CI / release-scripts (push) Successful in 10s
CI / frontend-test (push) Successful in 8m52s
publish-main / build (backend) (push) Successful in 2m29s
publish-main / build (frontend) (push) Successful in 2m41s
publish-main / build (push) Successful in 0s
security-scan / Python SCA (pip-audit) (push) Successful in 59s
security-scan / Python SAST (bandit) (push) Successful in 40s
security-scan / JS SCA (npm audit) (push) Successful in 43s
CI / backend-test (push) Successful in 12m39s
security-scan / Filesystem scan (trivy fs) (push) Successful in 23s
security-scan / SBOM (trivy) (push) Successful in 15s
CI / backend-test-postgres (push) Successful in 13m3s
2026-07-24 06:03:19 +00:00
Compare
robbertbos deleted branch fase-2b-kabel-v2 2026-07-24 07:00:49 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
robbertbos/waggle!164
No description provided.