Softanza
DémarrerEnglish
Softanza
Disciplines transversales

Système de test et de qualité

Des gardes narrés comme spécifications, numpy et LAPACK pour oracles, une porte adversariale avec contrôles négatifs, une seule porte de règles ; ni couverture ni intégration continue.

4 Strong · 6 Solid · 2 Partial · 0 Emerging

Mesuré contre : pytest · Hypothesis · libFuzzer · SonarQube · Dossiers : base/test(s'ouvre dans un nouvel onglet) · base/meta(s'ouvre dans un nouvel onglet) · base/engine(s'ouvre dans un nouvel onglet) · Pour les programmeurs : la référence de ce domaine

une grille d'assertions des gardes d'une nuit
une grille d'assertions des gardes d'une nuit. dessiné le 2026-10-01 par le script du site tools/areas-figurative.ring, exécuté dans la bibliothèque au commit 0e72e2e2c · la source(s'ouvre dans un nouvel onglet)

Repensé depuis les premiers principes

Ce que Softanza a gardé de ce qui marche, et ce qu'elle a repensé, tel que la bibliothèque l'a écrit dans ses documents de conception et ses narrations.

La manière SoftanzaChaque valeur attendue écrite est une promesse, et elle ne compte que lorsqu'une exécution qui aurait pu échouer l'a tenue.

Gardé des meilleures pratiques

  • Les tests sont des scénarios Given, When, Then : la sortie se lit comme une spécification, et un échec montre la valeur attendue et la valeur obtenue. source(s'ouvre dans un nouvel onglet)
  • Les analyseurs du moteur exposés aux entrées hostiles passent au fuzzing, et les tests de propriétés sont vérifiés par mutation : des versions volontairement fausses doivent échouer. source(s'ouvre dans un nouvel onglet)
  • Les résultats sont comparés à une référence indépendante : des valeurs produites par NumPy pour les matrices, et par R pour les lissages statistiques. source(s'ouvre dans un nouvel onglet)

Repensé

  • Des milliers de lignes d'exemple notent ce qu'elles doivent afficher. Personne ne les comparait : un banc d'essai exécute désormais chaque fichier et vérifie ces promesses dans l'ordre. source(s'ouvre dans un nouvel onglet)
  • Un test qui ne peut que réussir ne prouve rien : tout cas positif a son jumeau négatif, et l'outil est essayé sur de fausses promesses, pour le voir échouer. source(s'ouvre dans un nouvel onglet)
  • Une identité n'est pas une vérification : une formule tirée d'un seul jeu de chiffres ne peut jamais échouer. Une vraie vérification compare deux mesures indépendantes d'une même réalité. source(s'ouvre dans un nouvel onglet)
  • La suite complète est une barrière passée une fois avant chaque commit, pas après chaque modification. Les nouveaux contrôles naissent en sondes isolées : verdict en quelques secondes. source(s'ouvre dans un nouvel onglet)

Softanza has no test framework as a module; it has a test-and-quality discipline spread across the estate, whose signature is that a test is a readable specification and a green checkmark is never enough. 455 narrated guards read as Given/When/Then specs, correctness is proven against independent numpy/LAPACK oracles and byte-parity ground truth, and an adversarial gate of 1,416 assertions carries 58 negative controls. Where it is thin: property/mutation is engine-only, there is no coverage instrumentation and no CI, and the classic suites carry a fidelity backlog.

Ce qu'un artisan en fait, et ce qui se distingue

  • A test is a readable specification: 455 narrated Given/When/Then guards
  • Correctness proven against independent numpy/LAPACK oracles, not self-captured snapshots
  • An adversarial gate of 1,416 assertions each born from an escaped defect, with 58 negative controls
  • One rule gate collecting code, security, agent and diagram findings in a single shape

Ce qui est dû

  • A standard CI pipeline running the rule gate on every push
  • Coverage instrumentation (line/branch) for the engine and guards
  • Haro-side property testing and a shipped assertion module
  • Close the fidelity-grind backlog (1,312 #ERR in the classic suites)

La manière Softanza, exécutée

Ce que Softanza fait autrement dans ce domaine, montré par du code tiré de ses narrations et de ses gardes, et exécuté pour cette page.

Le vérificateur qui garde le modèle de menaces honnête est lui-même vu attraper une fausse ligne sans preuve et un test qui n'existe pas.

Softanza
cFake = "## 3. Guarantees" + char(10) +
	"| G98 | a claim | code | `base/test/security/no_such_guard_narrated.ring` (5) | A01 | - |" + char(10) +
	"| G99 | an unproven claim | code | nothing here | A01 | - |" + char(10) +
	"## 4. Open risks" + char(10)
aFR = GuaranteeRows(cFake)
Then("it reads both fake rows", len(aFR), 2)
Then("it flags the row with no proof", len(RowsWithoutProof(aFR)), 1)
Then("it flags the guard that does not exist", len(MissingPaths(GuardPaths(aFR))), 1)
Sortie
  THEN  it reads both fake rows  [PASS]
  THEN  it flags the row with no proof  [PASS]
  THEN  it flags the guard that does not exist  [PASS]

exécuté le 2026-10-01 21:18 dans la bibliothèque au commit 0e72e2e2c ; tiré de base/test/security/threat_model_narrated.ring(s'ouvre dans un nouvel onglet)

Les couloirs, un par un

Les couloirs et leurs notes sont cités tels qu'ils ont été lus à la source, le Read from the source on 2026-09-17, from a read-only main worktree -- base/test/_narrated (455 guards), base/meta/promises.py (~8,500 #--> markers), engine test blocks (151/371 files), fuzzers and props, _gen_numpy_reference.py, plot.zig, stzRuleReport + stzPredicateSet, health in base/test/_STATUS.md / _FINDINGS.md.

Narrated guards as executable spec
Strong
_narrated gives a Given/When/Then DSL across 455 *_narrated guards and 10,000+ assertions; the per-file chk() idiom is copy-pasted, not importedbase/test/_narrated
Reference oracles (numpy / LAPACK)
Strong
_gen_numpy_reference.py generates _numpy_reference / _numpy_fft_reference (eigenvalues, SVD, det, Cholesky); BERT forward matches numpy to 1.64e-7_gen_numpy_reference.py
Adversarial gate & negative controls
Strong
gg_adversarial (23,481 lines, 1,416 assertions): every assertion exists because a defect survived a green suite; 58 negative siblings, 82 discharges()gg_adversarial
The unified quality gate
Strong
stzRuleReport collects findings in one shape from 13 rule domains with IsSound(); 14 code rules + the knob gate; signable stzPredicateSet; not wired to any CIbase/graph/stzRuleReport + stzPredicateSet (.zrlz)
Byte-parity & golden / snapshot
Solid
plot.zig holds 29 byte-parity tests against pre-port ground truth; stzLLMFunction.AddGolden/RunGoldens; #--> markers; snapshots pin current, not correctengine plot.zig (29 byte-parity tests)
Fuzzing
Solid
Five UBSan-trap fuzzers (http, tls/X.509, pcre2 300k rounds, sqlite, utf8) via zig build fuzz; engine-only, random-round not coverage-guided, not continuousfuzz_{http,tls,pcre2,sqlite,utf8}.zig
Real-process & integration testing
Solid
D0-D6 cluster guards spawn genuine OS processes via uv_spawn, exchange STZM frames, perform real kills; a focused set, not a general frameworkD0-D6 cluster guards; appserver guards
Engine unit tests (Zig)
Solid
Inline test blocks in 151 of 371 engine .zig files, run by the build's test step; broad but not universal, and unmeasuredzig build test (151/371 files)
Stress & scale testing
Solid
Million-scale guards (1M-item IntSeq ~7 ms vs >60 s; 999_*_millions suites) and multilingual stress (Arabic/CJK/emoji); timed guards are load-sensitive999_*_millions suites
Test-as-documentation
Solid
Narrated guards double as specs and 135 prose narrations explain the same features; the guard <-> narration link is convention, not enforcedbase/doc/narrations
Property & mutation testing
Partial
Three prop_*.zig files (crypto with mutation-kill, http, ratebucket); engine-only, no Haro-side property testing, no generator/shrinking, no mutation frameworkprop_{crypto,http,ratebucket}.zig
Coverage, CI & suite health
Partial
Coverage is by assertion count; bespoke Python runners; no line/branch coverage, no CI config (.github absent), classic #--> suites ~41-60% green, 1,312 #ERRbase/test/_STATUS.md / _FINDINGS.md