Skip to content

EPIC: Structured build & test for PostGuard — shrink the matrix + central e2e harness #201

Description

@rubenhensen

Why

PostGuard spans ~12 repos bound by a few implicit contracts, each tested in isolation with mocks. Flows are combinatorial and crypto-core versions have drifted with no single source of truth. Symptom: "fix one thing, three others break," found late and by hand.

The matrix has two axes

  • Flows — sender × recipient × channel (website, Outlook, Thunderbird, SDK/API, mobile)
  • Versions — pg-core ↔ pg-wasm ↔ pg-js ↔ pg-ffi ↔ PKG v2

They meet at three contracts (the seams):

  1. Wire formatpg-core VERSION_V3 + bincode-v1 preamble.
  2. PKG v2 HTTP API/v2/parameters, /v2/{irma,request}/start|jwt|key|sign/key, /v2/api-key/validate.
  3. Yivi condiscon — the IrmaAuthRequest/ConItem shape (the in-flight feat/condiscon-auth-request).

Two workstreams

  • Shrink the matrix — enumerate the finite real flows; make the 3 contracts explicit/versioned; retire the dead postguard-thunderbird-extension; de-duplicate addon glue; one Yivi binding; one pg-js version; a compat manifest.
  • Central harness — grow postguard-version-matrixpostguard-e2e with 4 layers: contract tests, crypto-compat fixtures, e2e golden flows (headless Yivi via irmaclient, real-device swappable later), version matrix in CI. Runs nightly + on contract-affecting PRs.

Assets we build on (don't rebuild)

  • postguard-website/docker-compose.yml — full stack incl. irma-server + mailcrab
  • postguard-version-matrix — manual version sweep
  • irmago/irmaclient + internal/sessiontest — headless Yivi (disproves "decryption can't be automated")
  • cryptify/api-description.yaml — OpenAPI pattern to copy
  • postguard-docs/docs/guide/{architecture,usage-flows,protocol}.md

Progress is tracked via the sub-issues below.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestepicLarge cross-cutting initiative tracked via sub-issues

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions