Security and compliance posture

The mechanisms that actually exist, each named with the artefact that evidences it.

This page describes implemented and in-build controls. Where a control is in build we say so rather than implying coverage; where a driver is a mock we label it a mock. Wynk Systems holds no certification it does not name here.

The four load-bearing claims

Row-level security

Tenant isolation is enforced by the database, not by application code remembering to filter. Every tenant table carries FORCED row-level security and every read runs inside a tenant-scoped transaction, so a query issued without a tenant context returns nothing rather than everything.

Hash-chained audit

Audit and ledger records each commit a SHA-256 over their predecessor. History cannot be edited quietly: a rewrite breaks the chain at the exact record it touched, and an independent verifier recomputes from origin and raises a fork as a blocking alarm.

POPIA

Personal information is collected against a declared purpose and a retention clock, data subjects get self-service access and erasure, logs and URLs are free of personal identifiers, and a discharged erasure destroys the per-subject key.

Two-eyes dual control

Money-adjacent and override actions require a second, distinct operator. The requester cannot approve their own request, the pending state is visible in the interface, and the grant of authority is itself recorded — the UI never implies an override is one click.

Control register

Page 4 of 4 · 30 controls. Wide rows scroll inside the table, not the page.

Across all 4 pages: ✓ Live 27 · ◐ In build 3. In-build controls are not load-bearing yet and a risk assessment should treat them as absent.

Wynk Systems control register
AreaControlHow it is enforcedStatusEvidence
RegulatoryCollateral registry and revaluationSecured exposures hold a valuation with its source and age; a stale valuation degrades the exposure rather than silently persisting.✓ LiveADR-S-0052
PlatformISO 20022 as the internal message shapepain, pacs, camt and admi are the native envelopes; a rail adapter translates outward, never inward.✓ LiveADR-S-0088
PlatformNonce-based CSP, HSTS, no-sniff on every responseScripts and styles execute only under a per-response nonce; framing is denied and the referrer is suppressed.✓ LiveGate G-HEADERS
PlatformExact-origin and synchronizer-token browser admissionAn unsafe browser request is checked against an exact origin allowlist and Fetch Metadata; a cookie-authenticated one additionally carries a per-session token.✓ LiveADR-S-0136
PlatformZero third-party runtime dependenciesThe runtime is the Node standard library and PostgreSQL. There is no transitive package tree for an attacker to reach us through.✓ LiveADR-S-0002
PlatformFail-closed by defaultAn unavailable dependency refuses the operation and says so. No gate degrades to permissive under load or configuration error.✓ LiveADR-S-0080

What we do not claim

Independent reviewers get the evidence pack — chain attestation, control register, exception log and the sampling workfile — rather than a slide deck. ✓ Live means the mechanism is in this codebase and on the gate board today.