Kartan · Del två · Maskinen · Kapitel 16 av 23
Regelfilen
Ett nedskrivet ramverk, ändrat bara genom daterade, numrerade beslut. En regelfråga och ett fel hör hemma i olika filer. Att skriva regeln innan situationen uppstår är det som hindrar dig från att böja den när du väl har en insats i svaret. Ungefär 8 minuter · på tiominutersvägen.
Metoden finns som ett dokument innan den finns som kod. Det är ingen bild. Det finns en fil, ramverket, med numrerade avsnitt från 0 till 11, och det finns en andra, mycket längre fil med beslut som ändrar det, vart och ett med en bokstav eller ett nummer, ett datum och påståendet att ägaren har avgjort det. Koden genomför besluten. Den fattar dem inte.
Tre filer, tre uppgifter
- Ramverket. Själva metoden: spärrarna, de hårda diskvalificeringarna, värderingen, disciplinen vid köp och avyttring, positionsstorleken. Det innehåller inga daterade innehav och ingen marknadsdata, så det blir aldrig inaktuellt. Det är i version 2.3.
- Besluten. Varje oklarhet, avvikelse och ändring, i serier med bokstäver. A för strukturella rättelser. B för verkliga oklarheter i spärrarna, var och en väckt med ett datum och antingen avgjord eller lämnad öppen, och en öppen är en fråga som ägaren är skyldig ett svar. C för oklarheter som påverkar pengar. D för konsekvensrättelser. E för beslut om verktygen och, senare, de materiella reglerna, E1 till E114 när detta skrivs. F, den nyaste serien, för översiktssidan. Filen byggs på och skrivs aldrig om.11reference/FRAMEWORK.md och reference/FRAMEWORK-EDITS.md. Beslutsfilen inleds: 'Varje punkt är ett ställe där en människa som läser det vet vad du menar och en maskin inte gör det. Jag har inte tillämpat något av detta — varje punkt ändrar en regel, och det är dina regler.'
- Backloggen. Sådant som är fel i koden. Dess första rader drar gränsen: "En regelfråga går till beslutsfilen och får en bokstav; ett fel går hit och blir åtgärdat. Ingenting i den här filen är ett beslut som ägaren är skyldig ett svar."22reference/BACKLOG.md, inledningen.
Åtskillnaden mellan den andra och den tredje filen är den viktiga. Ett tröskelvärde som är fel för att regeln var fel är ett beslut. Ett tröskelvärde som är fel för att koden missförstod regeln är ett fel. Blandas de kan en felrättelse i tysthet ändra en regel, eller en regeländring gömma sig i en felrättelse. Varje tröskelvärde i koden hänvisar till det beslut som satte det, och screenerns tröskelvärden bor i en konfigurationsfil där vart och ett anger sitt avsnitt i ramverket, inte alls i koden.33config/screener_filter2.yaml, varje led med hänvisning till sitt avsnitt eller beslut; modulernas docstrings genom hela vss/ hänvisar till E-nummer som auktoritet för ett tröskelvärde eller ett fält.
Varför regeln skrivs först
BOLAG A står i 91, köplinjen är 85, och ägaren har just läst om rapporterna och känner sig tryggare än nivån tillåter. Det förnuftiga vore att flytta det till nivå 1, vilket sätter linjen vid 89. Sedan vänta på 89.
En ändring av en säkerhetsmarginal är ett daterat beslut, och den träder i kraft vid varje bolags nästa schemalagda omvärdering, aldrig omedelbart. En köplinje som korsas för att säkerhetsmarginalen flyttats beväpnar ingenting.
Hela poängen med att skriva en regel innan situationen uppstår är att du i det ögonblicket inte har någon insats i svaret. När situationen väl kommer har du det, och regeln du skrev tidigare är den enda version av dig som tänkte klart. Besluten säger "skrivet före koden" öppet på sin framsida, och versionshanteringens historik behandlas som bevis för ordningen.44Beslut E100 om ändringar av säkerhetsmarginalen. Projektbeskrivningen §1.2: 'Ett beslut skrivs FÖRE koden som genomför det, och många säger det öppet på sin framsida.' En session som ändrar vad koden gör utan ett beslut bakom sig gör, med projektets egna ord, fel sak.55Projektbeskrivningen, §0.
Varje beslut anger sitt pris
Besluten är skrivna i ett ovanligt tonläge: deklarativt, absolut där en regel är absolut, och uttryckligt om vad ett beslut kostar. En borttagning anger vad som gick förlorat genom att ta bort. Ett nytt krav anger vad det kommer att göra långsammare. Den här webbplatsens beslutsrutor har lånat formen från besluten.
Regler som drogs tillbaka
En regelfil som bara någonsin växer är misstänkt. Den här dokumenterar sina egna omsvängningar, och de är det bästa beviset för att processen fungerar, eftersom var och en visar en regel som rättas genom ett daterat beslut i stället för att i tysthet böjas.
- En spärr med två led som inte mätte någonting. Två test av stabilitet i rapporterade siffror visade sig mäta valuta och säsong, inte verksamheten, och hade inte ändrat något utlåtande över fem bolag. Raderades, med meningen "inte vidgat, inte mjukat upp, borttaget".66Beslut E30, 2026-08-25.
- Ett skuldtak som lättades av fel skäl. Screenerns första tak sattes löst, på principen att ett grovt filter inte får förlora ett bolag som den noggranna läsningen skulle behålla. Fyra dagar senare visade en provkörning 72 bolag som passerade det lösa taket och föll på metodens egna strängare test. Skärptes, med antalet i beslutet.77Beslut E2 ersatt av E44, 2026-08-26.
- En köpkursformel ersatt, med de gamla siffrorna kvar. När säkerhetsmarginalen flyttades från värdet i sämre fall till värdet i basfall räknades inte tre köpkurser som redan värderats enligt den gamla formeln om i tysthet. De behölls, markerade som ersatta överallt där de skrivs ut, och de gamla multiplikatorerna ligger kvar i koden med en kommentar som säger varför.88Besluten E28, E32 och E90. Koden behåller båda multiplikatortabellerna: 'MBP_TIER_MULTIPLIER ovan BEHÅLLS för de ersatta vägarnas historik.'
- En hänvisning som inte fanns. Commiten som byggde telefontunneln hänvisade till ett avsnitt i ramverket som förbjöd en server. Avsnittet finns inte. Beslutet som följde säger: "Hänvisningen gjordes utan att filen lästes och dras tillbaka här." Commitmeddelandet är oföränderligt; beslutet är den gällande rättelsen.99Beslut F1, 2026-09-13.
- Ett krav som drogs tillbaka samma dag det beslutades. Beslut F1 krävde att telefonsidan skulle markera sig själv som gammal efter 26 timmar. Beslut F2, samma dag, drog tillbaka kravet som omöjligt att bygga: en statisk fil kan inte jämföra sin egen ålder med tiden då den läses utan ett skript, och samma beslut förbjuder skript. De två leden motsade varandra; det ena föll. Det som återstod, att sidan anger sin egen ålder två gånger, genomfördes samma dag.1010Beslut F2, 2026-09-13.
Inget av detta är pinsamt. Var och en är en regel som möter verkligheten och rättas i registret, med kostnaden angiven, av den som har rätt att ändra den. En metod som inte kan visa något tillbakadragande har antingen aldrig prövats eller döljer något.
- Beslut
- Ramverket ändras bara genom daterade, numrerade beslut som ägaren fattar. Koden hänvisar till det beslut den genomför. En regelfråga och ett fel hör hemma i olika filer.
- Varför
- En regel som skrivs innan situationen uppstår skrivs av någon utan insats i svaret. En regel som bara bor i koden kan ändras av en felrättelse.
- Kostnad
- Förändring går långsamt. Ett tröskelvärde som ägaren vet är fel förblir fel tills ett beslut skrivs, och vissa öppna frågor har stått öppna i veckor. Beslutsfilen är över elvatusen rader lång.
Källor för det här kapitlet
- Ramverket, besluten och backloggen — läst ur det här repot: reference/FRAMEWORK.md; reference/FRAMEWORK-EDITS.md (A1–A3, B1–B48, C1–C4, D1–D2, E1–E114, F1–F2); reference/BACKLOG.md; config/screener_filter2.yaml
Den långsamma vägen, gjord uthärdlig. Byggd 2026-09-13 ur repot som det såg ut den dagen. BOLAG A och BOLAG B är påhittade; inget bolag, ingen kurs och inget innehav förekommer på den här sajten. Inte finansiell rådgivning: en privatinvesterares metod, delad som den är.