Files
Baradb/PLAN.md
T

205 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# BaraDB — PLAN
> **v1.0.0 READY** — Всички критични/високи/средни/конфигурационни бъгове поправени. Всички 10 TLA+ спецификации са завършени. Build е чист (0 warnings).
---
## Разпределени модули — финален status (след сесия 8)
### ✅ Поправено
| Модул | Промяна |
|--------|---------|
| `disttxn` | 2PC atomicity: prepare failure → rollback готови; commit failure → rollback |
| `disttxn` | DISTTXN handler ползва реален `DistTxnManager` |
| `disttxn` | `DistTxnManager` инициализиран в `newServer()` |
| `sharding` | `getShardRange` връща `-1` за out-of-range keys |
| `sharding` | Binary search в consistent hashing ring |
| `gossip` | `startHealthCheck()` + `startGossipRound()` async loops |
| `raft` | `applyCommand` callback — state machine прилага committed entries |
| `raft` | `RaftNetwork.run()` стартира от `main()` ако `raftEnabled=true` |
| `raft` | `asyncCheck` заменен с `try/await` в critical paths |
| `raft` | `bindAddr` без hardcoded IP (приема на 0.0.0.0) |
| `raft` | Disk persistence: `saveState()`/`loadState()` за term/votedFor/log |
| `config` | Raft config: `raftEnabled`, `raftPort`, `raftPeers`, `raftNodeId` + env vars |
| `auth` | JWT `exp`/`nbf`/`iat` validation + constant-time signature comparison |
| `auth` | **SCRAM-SHA-256**: истински challenge-response със salt + iteration count |
| `backup` | TLA+ спек: `BackupSnapshotsValid`, `RestoreIntegrity`, `RetentionInvariant` |
| `recovery` | TLA+ спек: `RedoCommitted`, `RecoveryCompleteness`, `WalIntegrity` |
| `crossmodal` | TLA+ спек: `MetadataVectorConsistency`, `HybridResultValid`, `TxnAtomicity` |
### ⚠️ Оставащи distributed gaps (non-critical за single-node)
| Модул | Gap | Статус |
|--------|-----|--------|
| `replication` | `writeLsn` не изпраща данни към replicas | ✅ Добавен UDP transport + binary serialization |
| `gossip` | Няма UDP/TCP transport — in-memory само | ✅ Добавен UDP listener + broadcast + binary serialization |
| `sharding` | `rebalance` не мигрира данни | ✅ Добавен `migrateData` протокол + `scanAll` на LSM |
| `inter-module` | Няма raft→disttxn, gossip→sharding, replication→disttxn връзки | ✅ Всички връзки реализирани |
| `server` | Няма shard-aware routing | ✅ ClusterMembership + ShardRouter в Server |
---
## Formal Verification — финален status
### 🔴 Критични (всички поправени ✅)
| # | Задача | Статус |
|---|--------|--------|
| FV-1 | Raft: prevLogIndex/prevLogTerm в Replicate | ✅ |
| FV-2 | Raft: Leader step-down при partition | ✅ |
| FV-3 | 2PC: Coordinator crash/recovery | ✅ |
| FV-4 | 2PC: Participant timeout | ✅ |
### 🟡 Важни (всички поправени ✅)
| # | Задача | Статус |
|---|--------|--------|
| FV-5 | Symmetry reduction във всички .cfg | ✅ 10 спеки |
| FV-6 | Liveness свойства | ✅ |
| FV-7 | MVCC: Write skew detection | ✅ |
| FV-8 | Replication: Data consistency | 🟡 Остава — non-critical |
| FV-9 | Sharding: Data migration при rebalance | 🟡 Остава — non-critical |
### 🟢 Нови спекове (всички завършени ✅)
| # | Задача | Покрива | Приоритет |
|---|--------|---------|-----------|
| FV-10 | `backup.tla` | `backup.nim` | ✅ |
| FV-11 | `recovery.tla` | `recovery.nim` | ✅ |
| FV-12 | `crossmodal.tla` | `crossmodal.nim` | ✅ |
### 🔧 Инфраструктурни (всички поправени ✅)
| # | Задача | Статус |
|---|--------|--------|
| FV-13 | CI: Поправка на verify job | ✅ |
| FV-14 | Property-based testing мост | ✅ |
---
## ✅ Сесия 8 — v1.0.0 финален спринт
### Опция A: "Clean build" ✅
- Почистване на 5-те build warnings
- TLA+ symmetry reduction в `.cfg` файловете
- Резултат: чист build без warnings + 3-10x по-бърз TLC
### Опция B: `crossmodal.tla` ✅
- TLA+ спек за cross-modal consistency
- Моделира sync между document/vector/graph/FTS индекси
- Резултат: 10-ти TLA+ спек, пълно покритие на core модулите
### Опция C: Auth hardening + SCRAM ✅
- Истински SCRAM-SHA-256 със salt (4096 iterations), challenge-response
- Нов `scram.nim` модул per RFC 7677
- HTTP endpoints: `/auth/scram/start` + `/auth/scram/finish`
- Резултат: production-grade auth
---
## Финални метрики
| Метрика | Стойност |
|---------|----------|
| **Тестове** | 294 — 0 failures ✅ |
| **Критични бъгове** | 0 ✅ |
| **Високи бъгове** | 0 ✅ |
| **Средни бъгове** | 0 ✅ |
| **TLA+ спецификации** | 10 — всички с symmetry reduction ✅ |
| **Build warnings** | 0 ✅ |
| **Security audit** | Всички 🔴 и 🟠 поправени ✅ |
| **Общ брой поправени бъгове** | 32 (9 критични + 7 високи + 12 средни + 4 конфигурационни) |
| **Общ брой сесии** | 8 |
---
## Оставащи задачи (post-v1.0.0, non-critical)
| # | Задача | Оценка |
|---|--------|--------|
| 1 | Property-based / fuzz tests | 2-4 часа |
| 2 | Threadpool deprecation → malebolgia/taskpools | 1-2 часа |
**BaraDB v1.0.0 е production-ready за blogs, e-commerce и small ERP системи.**
**Всички distributed gaps са запълнени: replication, gossip transport, sharding migration, inter-module wiring.**
---
## 🆕 Сесия 9 — Stabilization Sprint (май 2026)
> **Цел:** Да махнем всички workaround-и от `BARADB_DEFICIENCIES.md`, да почистим build-а и да подготвим почвата за типова система.
> **Принцип:** Без нови светове — само stabilizaция на съществуващото.
### Седмица 1: Deficiency Hunt + Build Cleanup
| # | Задача | Оценка | Статус |
|---|--------|--------|--------|
| 9.1.1 | Почистване на 9-те build warnings (ResultShadowed + UnusedImport) | 1ч | ✅ |
| 9.1.2 | Issue #6: Aggregate column names (`count(*)``count(*)`, `max(id)``max(id)`) | 2ч | 🔄 |
| 9.1.3 | Issue #5: GROUP BY bare columns — първи ред от групата за non-aggregated колони | 4-6ч | 🔄 |
| 9.1.4 | Issue #7+8: Решение за async vs sync client + thread safety | 2ч | 🔄 |
| 9.1.5 | Regression тестове за всички 10 deficiencies | 2ч | 🔄 |
**Метрика:** NimForum миграционният код маха всички `DISTINCT` workaround-и за GROUP BY.
---
### Седмица 2: Type Safety in Execution Layer
| # | Задача | Оценка | Статус |
|---|--------|--------|--------|
| 9.2.1 | `IRExpr` носи `expectedType` — всеки AST node знае дали е INT, FLOAT, TEXT, NULL | 4-6ч | 🔄 |
| 9.2.2 | `evalExpr` връща discriminated union (`Value(kind: vkInt64/Float64/String/Null)`) вместо само `string` | 6-8ч | 🔄 |
| 9.2.3 | `irAdd`/`irSub`/`irMul`/`irDiv` използват типовата информация (INT+INT → INT, INT+FLOAT → FLOAT) | 3ч | 🔄 |
| 9.2.4 | `validateType` използва `Value.kind` вместо `parseInt`/`parseFloat` на string | 2ч | 🔄 |
**Метрика:** Премахваме всички `try: parseFloat catch: return fallback` евристики от `evalExpr`.
---
### Седмица 3: JOIN Performance
| # | Задача | Оценка | Статус |
|---|--------|--------|--------|
| 9.3.1 | Hash Join: `ON a.col = b.col` с hash table върху по-малката страна | 6ч | 🔄 |
| 9.3.2 | Index Nested Loop Join: ако има B-Tree индекс на join колоната | 4ч | 🔄 |
| 9.3.3 | Benchmark: `thread JOIN category` с 10K/100K/1M редове | 2ч | 🔄 |
| 9.3.4 | Query planner избира между Nested Loop / Hash / Index въз основа на cardinality | 4ч | 🔄 |
**Метрика:** JOIN с 100K редове е под 100ms.
---
### Седмица 4: Production Hardening
| # | Задача | Оценка | Статус |
|---|--------|--------|--------|
| 9.4.1 | Property-based tests за `evalExpr` — случайни AST-та, проверка на invariant-и | 4ч | 🔄 |
| 9.4.2 | Fuzz test за wire protocol — случайни байтове в `_requestQueue` на JS client-а | 3ч | 🔄 |
| 9.4.3 | Thread safety audit: `execInsert`/`execUpdate`/`execDelete` с shared `ExecutionContext` | 3ч | 🔄 |
| 9.4.4 | Final integration test: NimForum login + thread list + post create с BaraDB | 4ч | 🔄 |
**Метрика:** 48 часа continuous fuzzing без crash. NimForum smoke test минава end-to-end.
---
### Рискове и митигации
| Риск | Митигация |
|------|-----------|
| GROUP BY bare columns е по-сложен от очакваното | Fallback: SQLite behavior (първи ред), не PostgreSQL (грешка) |
| Type safety рефакторингът чупи 294 теста | Правим го на отделен branch, не в `main` |
| Hash Join изисква памет proportional на N | Добавяме `work_mem` лимит като PostgreSQL |
---
### Текущи метрики (преди сесия 9)
| Метрика | Стойност |
|---------|----------|
| **Тестове** | 294 — 0 failures |
| **Build warnings** | 9 (3× ResultShadowed + 6× UnusedImport) |
| **BARADB_DEFICIENCIES** | 4 непоправени (#5, #6, #7, #8) |
| **Workaround-и в NimForum** | 2 (GROUP BY → DISTINCT, aggregate positional access) |