Hur det här repot ska hållas organiserat över tid. Pragmatisk, inte byråkratisk. Allt nytt arbete ska följa indexet nedan. Fungerar något annorlunda i praktiken — uppdatera policyn först, inte tvärtom.
| Mapp | Syfte | Versionshanteras? |
|---|---|---|
src/fibengine/ |
Produktionskod (motorn) | Ja |
tests/ |
Tester (speglar src/fibengine/-strukturen, se §4) |
Ja |
config/ |
Körningskonfiguration (settings.yaml) |
Ja |
config/variants/ |
Alternativa settings-profiler + INDEX.md |
Ja |
data/labels/ |
Manuell facit (golden set) | Ja |
data/raw/ |
Cachad rådata från CCXT + INDEX.md |
Nej (gitignore) |
data/screenshots/ |
Referensbilder + INDEX.md |
Nej (gitignore) |
experiments/results/ |
Append-only jsonl-ledgers (se §5) | Ja |
experiments/runs/ |
Per-körning audit-mappar + INDEX.md |
Selektivt (se §5) |
experiments/label_review/ |
Versionerade label-checkpoints | Ja (se §5) |
premortem/ |
Premortem + reflektioner | Ja |
premortem/reflections/ |
Datums-stämplade reflektioner | Ja |
docs/ |
Frivilliga djupare dokument | Ja (om det skapas) |
archive/ |
Arkiverat material (dubletter, legacy paths, ersatta docs) | Ja |
tmp/ |
Tillfälliga skript/artefakter | Valfritt (se §9) |
Toppnivån ska bara innehålla: README.md, REPO_POLICY.md, pyproject.toml,
uv.lock, .gitignore, och dessa mappar. Inga stub-filer som bara pekar
bort flyttat innehåll — uppdatera länkar till canonical path (t.ex. docs/FIB_BACKTEST_PLAN.md).
Tillfälliga filer läggs i tmp/.
Allt arbete i repot ska kunna klassas i exakt ett av dessa spår:
- Research / Experiment
- Validate
- Promotion
Definitioner och gate finns i docs/TRACKS.md. Vid tvekan: behandla ändringen
som Research tills Validate-kriterier uppfyllts.
-
Research / Experiment
config/variants/(principmotiverade profiler — inte label-auto-tuning)experiments/label_review/premortem/reflections/
-
Validate
tests/experiments/runs/stability/experiments/results/pivot_recall.jsonlexperiments/results/backtests.jsonlexperiments/results/backtest_matrix.jsonl
-
Promotion
config/settings.yaml(canonical baseline)src/fibengine/core/och etablerad runtime-surfaceREADME.md+ policydokument
Varje modul ska ha ett tydligt ansvar. Inga “utils.py” utan kategori.
| Modul | Ansvar |
|---|---|
core/config.py |
Settings-loading + validering |
core/models.py |
Dataklasser (Pivot, Swing) |
data/ |
Hämta + ladda candles |
pivots/ |
Pivot-detektering (Lager A) |
core/scale.py |
Multi-skala confluence |
core/structure.py |
HH/HL marknadsstruktur |
core/features.py |
Per-swing features |
core/scoring.py |
Viktad leg-poängsättning + select_swing |
core/confirm.py |
Bekräftad vs provisorisk swing |
core/fib.py |
Fib-nivå-beräkning |
evaluation/ |
Mätning mot labels (Lager A diagnostics) |
labeling/ |
Label-verktyg + lagring + batch |
backtest/ |
Walk-forward stabilitet + trade-backtest |
sizing/ |
Solros sizing (Lager B) |
viz/ |
Plot-funktioner |
experiment.py |
Standardrunner som loggar till experiments/runs/ |
core/logging_conf.py |
Loguru-setup |
- Filer i kod:
snake_case.py. - Tester:
test_<modulnamn>.py. - Label-filer:
{exchange}/{symbol-with-dash}/{timeframe}.jsonunderdata/labels/. Legacy platt format på rot ({exchange}_{symbol}_{timeframe}.json) läses fortfarande vid migration. - Run-id:
{kind}_{YYYYMMDDTHHMMSSZ}(run_,bt_,pivot_recall_etc.). - Batch-id:
YYYY-MM-DD_kort-beskrivning(t.ex.2026-05-28_round6_locked). Auto-genererade default-id (typ2026-05-28_label_batch_115215) räknas som temporära och bör inte sparas i Git över tid.
Detta är obligatoriskt för att repot ska räknas som organiserat:
data/raw/MÅSTE använda:data/raw/{exchange}/{symbol}/{timeframe}/limit_{n}.csvdata/screenshots/MÅSTE använda:data/screenshots/{source}/{symbol}/{timeframe}/{filename}.pngexperiments/runs/MÅSTE använda:experiments/runs/{kind}/{YYYY-MM-DD}/{run_id}/därkind ∈ {experiment, stability}.- Indexfiler MÅSTE finnas och hållas uppdaterade:
data/raw/INDEX.mddata/screenshots/INDEX.mdexperiments/runs/INDEX.mddata/labels/INDEX.mdexperiments/label_review/INDEX.md
- README MÅSTE finnas i dessa mappar:
data/raw/,data/screenshots/,experiments/runs/,experiments/label_review/,data/labels/
config/settings.yamlär baseline (MÅSTE):- vikter sätts på principer, inte genom auto-optimering mot manuella ritningar.
- nya kandidater sparas i
config/variants/*.yamlmed premortem-motivering. config/variants/INDEX.mdska uppdateras när en ny variant läggs till.
- Varje ny modul i
src/fibengine/ska ha minst ett test itests/. - Strukturen speglar
src/fibengine/: tests för en sub-package läggs i samma sub-mapp (src/fibengine/backtest/runner.py→tests/backtest/test_backtest.py). Kärnmoduler undersrc/fibengine/core/testas itests/core/(src/fibengine/core/config.py→tests/core/test_config.py). - Filnamn:
test_<modulnamn>.py. - Inga
__init__.pyi tests-mapparna (pytest plockar upp dem rekursivt viatestpaths = ["tests"]ipyproject.toml). - Tester ska köra utan nätverk. Mocka CCXT/data där det behövs.
- Köras med
uv run pytest. Måste vara grönt innan commit. - Validate-gate: En Research-kandidat får inte promoted status utan reproducerbar validate-körning + gröna tester.
Detta är den mapp som lättast bloatar. Tydliga regler. Strukturen är:
experiments/
results/ ← jsonl-ledgers (append-only)
runs/ ← audit-mappar per körtyp/datum + INDEX
experiment/YYYY-MM-DD/run_...
stability/YYYY-MM-DD/bt_...
label_review/ ← versionerade label-checkpoints
experiments/results/ — append-only jsonl-ledgers, en rad per körning:
pivot_recall.jsonl— pivot-kvalitet vs labelsbacktests.jsonl— walk-forward stabilitet (Lager A)trade_backtests.jsonl— trade-ekonomi (Lager B)backtest_matrix.jsonl— sweep över symbol/timeframe för stabilitettrade_matrix.jsonl— sweep över symbol/timeframe för trade-ekonomileaderboard.jsonl— sammanfattning avpython -m fibengine.experiment-körningar
experiments/label_review/batches/<batch_id>/ — där batch_id följer §3:
metadata.jsonlabels_manifest.jsonnotes.mdINDEX.mdiexperiments/label_review/listar aktiva batchar.
experiments/runs/<kind>/<YYYY-MM-DD>/<run_id>/— per-körning audit. Behåll bara senaste 5–10 mest relevanta. Resten kan tas bort när jsonl-raderna räcker som spår.- Auto-genererade
label_review_*Z-mappar med mångaFigure_*.png— räknas som artefakter, inte källa. Får tas bort när de inte längre används. smoke-*,tmp-*,test-*batch-id — alltid temporära, ska bort efter användning.*.pngpå toppnivå i en label_review-mapp utan kontext — räknas som rester från manuellaplt.savefig. Får tas bort.
Skapas bara om man kör uv run python -m fibengine.labeling.batch --copy-labels.
Default är manifest-only. Använd --copy-labels sparsamt och bara för milstolpar.
- Detta är golden set / working copy. Sparas via
labeling.tool. - Kategoriserad struktur:
data/labels/{exchange}/{symbol}/{timeframe}.json. data/labels/INDEX.mdska hållas uppdaterad vid större tillägg (kan genereras fråniter_label_files()).- Inga manuella ändringar i JSON utan att labeln går igenom verktygets valideringar
(se
_label_warningsilabeling/tool.py):highochlowfår inte ligga på samma candle.- Ingen punkt får ligga inom
lookbackbarer från vänster eller höger edge.
- Vid större omlabling: skapa en
batchförst, så det går att gå tillbaka.
| Fil | Roll |
|---|---|
README.md |
Översikt + snabbstart |
REPO_POLICY.md |
Denna policy |
docs/FIB_BACKTEST_PLAN.md |
Backtest-roadmap (faser, status, kommandon) |
archive/ |
Allt arkiverat material; se archive/README.md + archive/INDEX.md |
pyproject.toml, uv.lock |
Beroenden |
Lägg inga nya markdown-dokument på toppnivå utan kategori. Skapa docs/
om det blir fler än 3 sådana.
- Inga dependencies utan motivering. Lägg till via
uv add ...såpyproject.tomlochuv.lockhålls samstämda.
Lokal check och CI ska matcha. Se docs/CONTRIBUTING.md.
uv sync --extra devuv run pre-commit run --all-files(ellerruff check,ruff format --check,pytest)- GitHub Actions:
.github/workflows/ci.yml
Installera hooks en gång: uv run pre-commit install.
- Nya tunga dependencies (UI, optimering, ML) ska kort dokumenteras i README:s beroendelista och i policy om de byter på arbetsflödet.
tmpär tillåtet.- Lägg tillfälliga skript/artefakter i
tmp/(inte på toppnivå). - Namnkonvention:
tmp_<beskrivning>.pyeller datums-prefix, t.ex.2026-05-28_tmp_sweep.py. - Om ett script blir långlivat eller återanvändbart: flytta in i
src/fibengine/...med riktigt namn och test.
Kör manuell repo housekeeping vid behov:
- Lista innehåll i
experiments/label_review/(endastbatches/,packs/ska ligga kvar). Flyttasmoke-*, rot-dubletter,label_review_*Zoch liknande tillarchive/experiments/label_review/; uppdateraarchive/INDEX.md. - Legacy
experiments/*.jsonlpå fel path →archive/experiments/ledgers/<datum>-…/; canonical ledger:experiments/results/. - Lista innehåll i
experiments/runs/. Behåll de senaste ~10. Resten kan tas bort när jsonl-raderna är tillräckliga (eller flytta tillarchive/experiments/runs/om ni versionerar dem). - Sök efter lösa
tmp_*.pyi repo-roten och flytta dem tilltmp/. - Inga stub-markdown på toppnivå efter flytt till
docs/— radera stub, länka canonical. - Kör
uv run pytestför att säkerställa att städningen inte tog något viktigt.
Premortem-tänk och reflektion är en obligatorisk del av arbetsflödet.
- Innan större ändring/tuning ska risk/hypotes vara uttryckt i
premortem/PREMORTEM.mdeller en ny reflektion. - Efter varje betydande körning/beslut (t.ex. ny batch av labels, ny vikt-tuning,
ny backtest-matris) ska minst en reflektion skrivas i
premortem/reflections/. - Filnamn i
premortem/reflections/MÅSTE följa:YYYY-MM-DD-<kort-beskrivning>.md - Reflektionen MÅSTE innehålla:
- Hypotes
- Scope (symbol/timeframe/data)
- Observationer (nyckelmetrics)
- Beslut
- Nästa steg
- Minst en ny reflektion per aktiv vecka där experiment körs.
Policyn ändras genom att uppdatera den här filen direkt. Vid större ändringar i struktur eller arbetsflöde: uppdatera först, sen flytta filerna. Aldrig tvärtom.
Något får bara klassas som trusted engine behavior när alla punkter är uppfyllda:
- Ursprunglig kandidat finns i Research-spåret (t.ex. principmotiverad
config/variants/). - Validate-evidens finns (relevanta körningar i
experiments/results//experiments/runs/stability/). uv run pytestär grönt.- Kort reflektion i
premortem/reflections/dokumenterar beslutet. - Först därefter får ändringen in i Promotion-ytan (t.ex.
config/settings.yaml).