SASFA

Testing

How the testing works

Automated, private and repeatable. SASFA's agents review your repository clause by clause against SANS 1718 on servers nobody else can reach, report what passed and what failed with the fix for each, and leave nothing behind.

The process

  1. 01 NDA A mutual NDA is signed before anything is shared.
  2. 02 Repository access and sasfa.md You grant read access to the repository that produces your production build, and add a sasfa.md file that maps the code: where outcomes are generated, where bets are recorded and settled, where money moves, where limits and exclusion are enforced, how the build is hashed, and how the tests and generator harness run.
  3. 03 Automated review SASFA's agents clone the repository into a fresh, isolated environment and review it clause by clause against SANS 1718, guided by sasfa.md but not limited to it. Where your tests and harness can be run, they are run.
  4. 04 Private report Every applicable clause graded met, partial or missing, with the evidence and, for every partial, exactly what is satisfied and what is not. Each failed clause carries the fix. The report goes to you and nobody else.
  5. 05 Fix and re-test You fix what the report lists. Re-tests cover only the outstanding clauses and are priced on them.
  6. 06 Pass summary When every applicable clause is met, a public pass summary is published here, naming the product, the build hash, the parts and editions, and the date.
  7. 07 Deletion The environment is destroyed, you revoke repository access, and you receive a system-generated deletion report listing what was removed. Nothing of your code remains on SASFA systems.

Price

R10 000, flat, for the first report. Re-tests are priced on the outstanding clauses only, never more than the first report. The pass summary and the deletion report are included.

Privacy

No person reads your code. The agents run open-weight models on SASFA-controlled servers in South Africa, with no call to any outside service. Each engagement gets a fresh, isolated environment that is destroyed when the report is accepted. You revoke repository access yourself, and the deletion report lists what was removed.

What is reviewed

Odds and settlement

Settlement logic for every bet type against the published rules.

Outcome generation

One declared generator, isolated from everything else, with its seeding, mapping and harness.

The bet record

Each bet stored with stake, odds, selection, time and result, append-only.

Player funds and limits

Wallet, deposits, withdrawals, deposit and loss limits and self-exclusion enforced in the system.

Software integrity

Build reproducibility, hashing and the verification that production matches the reviewed build.

Events, meters and recovery

The significant-event catalogue, meters nobody can edit, and recovery of bet state after a failure.

Against SANS 1718 Part 4 (wagering record-keeping), Part 10 (server-based systems), the outcome-fairness clauses of Part 2, and the control baseline of Parts 3 and 9. The edition reviewed against is named on the report.

What goes in sasfa.md

A short markdown file at the root of the repository. It is a map, not a boundary: the agents review the whole repository and use it to know where to start.

  • Product: what it is, bet types and products, and which generate their own outcomes
  • Outcome generation: the module that generates results and the harness that exercises it alone
  • Bets: where a bet is recorded, priced and settled
  • Money: the wallet, ledger, deposit and withdrawal paths
  • Player protection: where limits, exclusion, age and identity gates are enforced
  • Build: how the production artefact is built and hashed, and the current production hash
  • Tests: the commands that run your tests and the generator harness
  • Out of scope: paths that are not part of the betting system, and why

What the report says

One row per applicable clause: met, partial or missing, with the evidence the agents found, a file and line, a test result, a harness run. A partial says exactly which part is satisfied and which is not. A missing clause says what would satisfy it. Clauses that need the system running, and could not be run from sasfa.md, are marked as requiring execution. Clauses that belong to the licensed bookmaker rather than the software are marked as the bookmaker's. The report is private and is never published.

After a pass

The pass summary is public: product, build hash, parts and editions, date. It is not a certificate. Any change to the build changes the hash, and the summary is true only of the hash it names; a re-test on the changed clauses produces a new one.

Request a test