Fenix / Genesis · modul kao specifikacija (ZAKON 58)
na 10 modula, uključujući dijeljenu jezgru · za jedan modul +4 % · paritet TESTIRAN 14/14 na sintetičkom primjeru
Ispravljeno 18.10.2026. (c14591): ranije je ovdje pisalo „−67 %, dokazan paritet". Ta brojka nije uključivala jezgru bez koje specifikacija ne radi, a izvor testa pariteta ipak postoji i test je 18.10.2026. ponovljen (14/14, atom c14629).
Isti opseg: validacija, tenant-izolacija, CRUD, filtriranje, stanja (draft→potvrđena→plaćena→završena), izračun (PDV + boravišna), XML izvoz.
PDV = Decimal("0.13")
BORAVISNA_PO_NOCI = Decimal("1.50")
@dataclass
class Rezervacija:
id: int; tenant_id: str
gost_ime: str; gost_oib: str
dolazak: date; odlazak: date
osoba: int; cijena_nocenje: Decimal
status: str = "draft"
def validiraj(r):
if len(r.gost_ime) < 2: raise ...
if len(r.gost_oib) != 11: raise ...
if r.odlazak <= r.dolazak: raise ...
if r.osoba < 1 or r.osoba > 20: raise ...
...
PRIJELAZI = {"draft":["potvrdena","otkazana"],
"potvrdena":["placena","otkazana"], ...}
def promijeni_stanje(r, novo): ...
def osnovica(r): return r.cijena_nocenje*noci(r)
def pdv_iznos(r): return (osnovica(r)*PDV)...
def boravisna(r): return (1.50*noci(r)*r.osoba)...
def ukupno(r): return osnovica+pdv+boravisna
class Spremiste:
def kreiraj(...): validiraj; spremi
def dohvati(t,id): tenant provjera
def izmijeni / obrisi / popis(filtri): ...
def u_xml(r): return "<Rezervacija>...</>"
# + 90 linija CRUD/validacija/XML rukom
REZERVACIJA = Modul({
"polja": {
"gost_ime":["obavezno",("minduljina",2)],
"gost_oib":["obavezno",("duljina",11),("znamenke",None)],
"dolazak":["obavezno"],
"odlazak":["obavezno",("poslije","dolazak")],
"osoba":["obavezno",("min",1),("max",20)],
"cijena_nocenje":["obavezno",("min",0.01)],
"tenant_id":["obavezno"]},
"stanja": {"pocetno":"draft", "prijelazi":{
"draft":["potvrdena","otkazana"],
"potvrdena":["placena","otkazana"],
"placena":["zavrsena"], ...}},
"izracun": {
"osnovica": d => cijena*noci,
"pdv": d => osnovica*0.13,
"boravisna":d => 1.50*noci*osoba,
"ukupno": d => osn+pdv+borav},
"poredak": "dolazak",
"izvoz": {"korijen":"Rezervacija", "polja":{...}},
})
# CRUD, validaciju, stanja, XML
# izvršava DIJELJENA jezgra — ne piše se
| Provjera | Provjera | ||
|---|---|---|---|
| osnovica | OK | tenant izolacija A/B | OK |
| PDV iznos | OK | prijelaz stanja isti | OK |
| boravišna pristojba | OK | nedopušten prijelaz odbijen | OK |
| ukupno | OK | loš OIB odbijen | OK |
| XML bajt-identičan | OK | loš datum odbijen | OK |
14/14 identično klasik i spec daju isti rezultat na svakoj provjeri — XML izlaz je bajt po bajt jednak.
dokaz_paritet.py je sačuvan (EU, files72) i test je ponovljen 18.10.2026.: 14/14 (atom c14629). Skup je ipak sintetički.d => nije Python), a PDV se u njoj računa pomičnim zarezom bez pravila zaokruživanja.223.169 bajtova stvarnog koda, klasificiranih po fiksiranoj rubrici prije brojanja (da se broj ne namjesti).
Iznajmljivači su danas Django. Kanon je FastAPI + jezgra. Dio koda ne prelazi u spec — briše se jer ga novi sloj ne treba.
| Django artefakt | Veličina | U kanonu |
|---|---|---|
| Migracije (8 datoteka) | 34,5 KB | nema — shema iz spec-a |
| admin.py | 5,1 KB | nema — generira jezgra |
| ORM boilerplate + forms | dio models/views | deklarativna polja |
Zato je izmjerenih 72,1% donja procjena za ovaj modul: mjeri koliko se svodi na spec, a ne računa koliko Django-boilerplatea ispari pri prelasku na FastAPI.
Silazak sa servera: izračun i stanja nisu ni kod ni specifikacija koju izvršava server, nego zakon-atom od 943 B koji provjerava svatko — uređaj, svjedok ili gola RISC-V slika — istom fiksnom funkcijom. Pred-registrirano u c14587, rezultat u c14590.
| Provjera | Rezultat |
|---|---|
| 100 000 nasumičnih rezervacija iz klasične Decimal reference drži pod zakonom | 100 000 / 100 000 |
| PDV, boravišna ili ukupno pomaknuti za ±1 cent | PAD 600 000 / 600 000 |
| svih 25 prijelaza stanja kao klasična tablica | 25 / 25 |
| certifikat jednoznačnosti (prva inačica) | PAD propustio dvoznačan pojas |
| certifikat redom izvođenja (c14589) | 4/4, dvoznačan pojas odbijen |
| provjera jedne rezervacije, n=30 | medijan 0,10 µs |
| veličina: zakon-atom prema klasičnom kodu novca i stanja | 943 B prema 1.081 B — praktički isto |
Ušteda ovdje nije u bajtima. Pravilo se ne deploya, provjerljivo je svakome, nosi dokaz jednoznačnosti i radi bez servera. Ime, OIB i XML izvoz ostaju u sučelju uređaja.
Logika (CRUD, validacija, stanja, izračun redoslijeda, XML izvoz) napisana je jednom u dijeljenoj jezgri. Svaki modul isporučuje samo specifikaciju-podatak — polja, pravila, stanja, izračune. Ista jezgra izvršava sve module, pa dodavanje modula ne dodaje logiku, samo opis.
Poštena granica: dijeljena jezgra (2.951 B) piše se jednom. Ušteda raste s brojem modula: 10 modula klasično = ~42 KB; kroz spec = jezgra + 10×1,4 KB ≈ 17 KB. Za jedan modul ušteda je skromna; za flotu modula je velika. I dio (~4%) koji je pravi stroj — ostaje kod, namjerno.
Ovaj zapis nije samo tvrdnja na stranici. Zapečaćen je i stoji na pet čvorova u različitim mrežama i kod različitih pružatelja — nijedan od njih nije nužan da bi se provjerio.
| čvor | poveznica za provjeru | pravi atom | izmišljen ID |
|---|---|---|---|
| EU | genesis.limit-connect.com/v/749e176ba4… | 200 autentično | 404 |
| ES | no-limit.world/v/749e176ba4… | 200 autentično | 404 |
| DE | sati.ink/v/749e176ba4… | 200 autentično | 404 |
| NEW | fina-connect.online/v/749e176ba4… | 200 autentično | 404 |
| MAR | limit-connect.com/v/749e176ba4… | 200 autentično | 404 |
Stupac „izmišljen ID“ nije ukras. Da svih pet čvorova vraća „autentično“ na bilo što, poveznica ne bi ništa značila. Zato se svaki provjerava i s izmišljenim brojem — i svaki mora reći ne.
Što ova poveznica dokazuje: da atom c1997 (klasifikacija J/P/I, Primjer 2) postoji i nije mijenjan. Ne dokazuje naslov stranice niti paritet iz Primjera 1. Primjer 4 ima vlastite atome (c14587, c14589, c14590).
Puni otisak: 749e176ba41b06dfd2e49c377328cea691d7697493cddf07dfc806b2fb1e8710
Pošteno o vremenu: novi atom ne osvane na svih pet istog trenutka — izmjereno kašnjenje od pečaćenja do prvog udaljenog čvora bilo je oko 6 minuta. Prije toga udaljeni čvor odgovara 404, i to je točan odgovor, ne kvar.