Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
169 commits
Select commit Hold shift + click to select a range
22252c0
scaffold hexagonal layer dirs
EnjoyBacon7 Apr 21, 2026
cb573a2
add layer import guard
EnjoyBacon7 Apr 21, 2026
0e551e9
ci: run layer guard, lint, and unit tests on refactor branches
EnjoyBacon7 Apr 21, 2026
5bc8879
add refactoring decision log
EnjoyBacon7 Apr 21, 2026
e1cab32
docs: add strategy + workflow to docs/refactoring/, fix decision log …
andyne13 Apr 21, 2026
bf009dc
core: add generic Registry[T] pattern
andyne13 Apr 21, 2026
68915a3
core: add unified exception hierarchy
andyne13 Apr 21, 2026
d58f56e
shim: re-export exceptions from core for backward compatibility
andyne13 Apr 21, 2026
3e7af2f
cleanup: remove core/catalog/, update decision log
andyne13 Apr 21, 2026
8403080
core: add text sanitization utilities
andyne13 Apr 21, 2026
e10ac5d
core: add filename sanitization utilities
andyne13 Apr 21, 2026
7cefbcc
core: add external resource error detection
andyne13 Apr 21, 2026
fc11684
style: fix ruff lint errors in core/utils
andyne13 Apr 21, 2026
d29daa6
style: apply ruff formatting to core/utils
andyne13 Apr 21, 2026
9d99df6
core/models: add Chunk and ChunkType
andyne13 Apr 21, 2026
2908950
core/models: add Document, ProcessedDocument, TextBlock, ImageBlock
andyne13 Apr 21, 2026
04d26d0
core/models: add User, PartitionRole, UserPartition, OIDCSession
andyne13 Apr 21, 2026
1dead74
core/models: add DocumentRecord, IndexationJob, status enums
andyne13 Apr 21, 2026
c624abf
core/models: add RetrievalQuery, RetrievalResult, RetrievalResponse
andyne13 Apr 21, 2026
e3e85da
core/models: add Conversation, ContextualizedQuery, Prompt
andyne13 Apr 21, 2026
c56d02e
core/models: add __init__.py with convenience re-exports
andyne13 Apr 21, 2026
c056ba9
core/config: add ConfigMixin base class
andyne13 Apr 21, 2026
5296df4
core/config: add endpoint and chunking config schemas
andyne13 Apr 21, 2026
cbb3606
core/config: add retrieval, reranker, RAG, map-reduce, websearch config
andyne13 Apr 21, 2026
06ea987
core/config: add indexation pipeline config
andyne13 Apr 21, 2026
1466b2d
core/config: add infrastructure + auth config
andyne13 Apr 21, 2026
87831cf
core/config: add root Settings + config loader
andyne13 Apr 21, 2026
b87192c
shim: re-export config from core for backward compatibility
andyne13 Apr 21, 2026
8b173af
core/embeddings: add Embedder ABC + registry
andyne13 Apr 22, 2026
d5d084d
core/rerankers: add Reranker ABC + registry
andyne13 Apr 22, 2026
6cee93c
core/llm: add LLM ABC + registry
andyne13 Apr 22, 2026
f83445d
core/vlm: add VLM ABC + registry
andyne13 Apr 22, 2026
42607a3
core/vector_stores: add VectorStore ABC
andyne13 Apr 22, 2026
95260a6
core/chunking + core/indexing/parsers: add ABCs + registries
andyne13 Apr 22, 2026
c8ec2af
core/ports: add DocumentRepository ABC
andyne13 Apr 22, 2026
fabadcb
core/ports: add ChunkRepository ABC
andyne13 Apr 22, 2026
1fe7415
core/ports: add UserRepository ABC
andyne13 Apr 22, 2026
d22d664
core/ports: add JobRepository ABC
andyne13 Apr 22, 2026
add550d
core/ports: add PartitionRepository ABC
andyne13 Apr 22, 2026
62a2aff
core/ports: add ConversationRepository ABC
andyne13 Apr 22, 2026
c965bff
core/ports: add PromptRepository ABC
andyne13 Apr 22, 2026
66c20cc
core/ports: add EntityRepository ABC
andyne13 Apr 22, 2026
be9b041
core/ports: add TopicTagRepository ABC
andyne13 Apr 22, 2026
c0d858c
core/ports: add AuditLogRepository ABC
andyne13 Apr 22, 2026
97878b8
core/ports: add IdempotencyRepository ABC
andyne13 Apr 22, 2026
ec11f1a
core/ports: add ModelEndpointRepository ABC
andyne13 Apr 22, 2026
1a38d3e
core/ports: add PresetRepository ABC
andyne13 Apr 22, 2026
683922a
core/ports: add CatalogStore aggregate root
andyne13 Apr 22, 2026
f4d9f9c
core/ports: add __init__.py with convenience re-exports
andyne13 Apr 22, 2026
4528c71
style: use relative imports within core/, fix review feedback
andyne13 Apr 22, 2026
eb61643
core/models: extend User with password_hash, add ApiKey + TokenPayload
andyne13 Apr 22, 2026
c799c04
core/ports: extend UserRepository for 3 auth modes, add OIDCSessionRe…
andyne13 Apr 22, 2026
175481d
fix: rename api.py -> main.py to resolve package collision with api/ …
Ahmath-Gadji Apr 24, 2026
7ac00f6
fix(core/config): backfill allow_filterless_fallback retriever shim
Ahmath-Gadji Apr 24, 2026
3eab2f0
core/prompts: add pure builders + disk template loader (5C)
EnjoyBacon7 Apr 29, 2026
6a3b508
core/chunking: add markdown utils + RecursiveSplitter (5B)
EnjoyBacon7 Apr 29, 2026
49f5fdc
core/retrieval: add retriever strategies, pipeline, RRF, searcher por…
EnjoyBacon7 Apr 29, 2026
246d763
phase-5: add bookkeeping (decision log + FORWARD_PORT_LOG) + ruff format
EnjoyBacon7 Apr 29, 2026
4808294
test(core/prompts): cover contextualization, query rewriter, template…
EnjoyBacon7 May 5, 2026
8f7fa7c
refactor(phase-5.15): convert legacy chunker/retriever/prompts to shi…
EnjoyBacon7 May 5, 2026
f170bf7
docs(decision-log): record phase-5 deviations on text-splitter dep an…
EnjoyBacon7 May 5, 2026
53b42f5
refactor(core/utils): extend ValidationError, add decode_bytes, extra…
Ahmath-Gadji May 5, 2026
8ff0a1b
refactor(core/models): ImageBlock contract + Document.as_temporary_file
Ahmath-Gadji May 5, 2026
d1ef981
refactor(core/indexing): add text/image preprocessors, validators, co…
Ahmath-Gadji May 5, 2026
097ac2d
feat(core/indexing/parsers): native parsers (text, html, md, image, d…
Ahmath-Gadji May 5, 2026
12a4c53
feat(parsers/pdf): OpenAI VLM PDF parser (core facade + services/infe…
Ahmath-Gadji May 5, 2026
f431d05
feat(parsers): Marker + local-Whisper Ray-backed parsers
Ahmath-Gadji May 5, 2026
3f5e71c
refactor(compat): re-export shims for moved utilities
Ahmath-Gadji May 5, 2026
1b68dfa
docs(refactoring): log Phase 5D decisions
Ahmath-Gadji May 5, 2026
c4e4b92
test(core/indexing): cover preprocessors, validators, docx/doc/audio …
Ahmath-Gadji May 6, 2026
7a1f3ac
refactor(core/indexing/parsers): register concrete parsers with parse…
Ahmath-Gadji May 6, 2026
82be5db
refactor(loaders): adapter shims onto core parsers + runtime fixes
Ahmath-Gadji May 6, 2026
86a920d
refactor(core/chunking): consolidate chunker shim onto core domain ob…
Ahmath-Gadji May 6, 2026
2ed6c89
Merge pull request #355 from linagora/refactor/phase-5-core-domain-final
EnjoyBacon7 May 7, 2026
a9cfe8f
chore(6A): fast-unlock stubs for downstream tasks 6B, 6C
Ahmath-Gadji May 7, 2026
1c53913
refactor(inference): extract distributed semaphore to services/infere…
EnjoyBacon7 May 7, 2026
5539e74
refactor(6A): implement resilience layer — retry + circuit breaker
Ahmath-Gadji May 7, 2026
2a8be72
refactor(inference): add healthcheck utility to services/inference (p…
EnjoyBacon7 May 7, 2026
158229c
refactor(inference): add vLLM client adapters for LLM, embedder, VLM …
EnjoyBacon7 May 7, 2026
5ab5e8d
refactor(inference): add Infinity + OpenAI reranker adapters (phase 6C)
EnjoyBacon7 May 7, 2026
303622c
refactor(di): add inference registration entry point (phase 6G)
EnjoyBacon7 May 7, 2026
a3ff2c3
refactor(compat): re-export shims for new inference adapters (phase 6H)
EnjoyBacon7 May 7, 2026
89c0453
fix(A): collapse redundant circuit breaker exclusion helper + wire in…
Ahmath-Gadji May 11, 2026
2647915
refactor(6B): rework vLLM/reranker clients and type LLM ABC returns a…
Ahmath-Gadji May 11, 2026
68db54c
fix: rrf single-list identity return and exclude LLMParsingError from…
Ahmath-Gadji May 11, 2026
28a7100
fix(6): address CodeRabbit review feedback
Ahmath-Gadji May 11, 2026
ef3ccc2
Merge pull request #375 from linagora/refactor/phase-6-inference-adap…
Ahmath-Gadji May 11, 2026
d2f0e60
chore: quick start phase 7
Ahmath-Gadji May 12, 2026
159fac1
refactor(7A.1): add asyncpg ConnectionManager and metadata-only schema
EnjoyBacon7 May 12, 2026
a035cc7
refactor(7A.4): move Alembic migrations to services/persistence/migra…
EnjoyBacon7 May 12, 2026
8314579
docs(sql-migration): point alembic paths at services/persistence/migr…
EnjoyBacon7 May 12, 2026
3a85bb2
docs(refactoring): log phase 7A.1 decisions
EnjoyBacon7 May 12, 2026
b177f95
refactor(7B): add MilvusVectorStore + log Phase 7B decisions
Ahmath-Gadji May 12, 2026
146c403
refactor(7A.4): nest Postgres alembic under services/persistence/migr…
Ahmath-Gadji May 12, 2026
82f0aab
refactor(7A.4): move Milvus migrations to services/persistence/migrat…
Ahmath-Gadji May 12, 2026
41c0f18
docs(refactoring): log Phase 7A.4 unified migrations namespace decisions
Ahmath-Gadji May 12, 2026
8e5f56a
test(7F): cover MilvusVectorStore — unit (pure logic) + live integration
Ahmath-Gadji May 13, 2026
4951cda
refactor(7A.2): add asyncpg repository implementations
EnjoyBacon7 May 13, 2026
9d93773
refactor(7A.3): add PostgresStore composite over the asyncpg repos
EnjoyBacon7 May 13, 2026
a0e5682
refactor(7E): wire storage adapters through ServiceContainer
EnjoyBacon7 May 13, 2026
d9eb6d0
test(7F): add integration suite for the asyncpg persistence layer
EnjoyBacon7 May 13, 2026
2158512
refactor(7E): wire create_vector_store to MilvusVectorStore
EnjoyBacon7 May 13, 2026
df56f8c
docs(refactoring): reconcile Phase 7B §1 with hybrid_search now on th…
Ahmath-Gadji May 13, 2026
ba6d6bc
chore(format): apply ruff format to phase-7 surface
EnjoyBacon7 May 13, 2026
985c411
refactor(7C): introduce MilvusDB god-object shim delegating to stores
Ahmath-Gadji May 13, 2026
1aa36cf
docs(refactoring): log Phase 7C decision to keep PG provisioning in t…
Ahmath-Gadji May 13, 2026
4f63ade
fix(persistence): delete files explicitly when deleting a partition
Ahmath-Gadji May 13, 2026
260ad1a
fix(workers): await whisper ObjectRef directly instead of ray.get()
Ahmath-Gadji May 13, 2026
d1b20cf
fix(7F): use Loguru logger and guard Alembic upgrade in ConnectionMan…
EnjoyBacon7 May 18, 2026
a12b20a
fix(7C): make PostgresStore.initialize idempotent to stop per-request…
EnjoyBacon7 May 18, 2026
79afed0
refactor(7A.2): split partition memberships into their own repo
EnjoyBacon7 May 18, 2026
b091957
Merge pull request #393 from linagora/refactor/phase-7-storage-persis…
Ahmath-Gadji May 18, 2026
de42f86
fix(persistence): pass discrete connection kwargs to asyncpg and perc…
EnjoyBacon7 May 19, 2026
0235c37
refactor(8A.1): add AuthService, thin routers/auth.py
EnjoyBacon7 May 19, 2026
3c90ade
refactor(8A.2): add UserService, thin routers/users.py
EnjoyBacon7 May 19, 2026
67ddbf1
refactor(8B.1): add PartitionService, thin routers/partition.py, rest…
EnjoyBacon7 May 19, 2026
4c11798
refactor(8B.2): add WorkspaceService, thin routers/workspaces.py
EnjoyBacon7 May 19, 2026
e21a144
refactor(8C.1): add RetrievalService, thin routers/search.py
EnjoyBacon7 May 19, 2026
9c3c6cc
refactor(8C.2): add QueryService, thin routers/openai.py
EnjoyBacon7 May 19, 2026
a8fb5e3
refactor(8D): add IndexingService + JobService, thin routers/indexer.…
EnjoyBacon7 May 19, 2026
d198264
docs(8D.1): flag the components extract_temporal_fields shim debt for…
EnjoyBacon7 May 19, 2026
f87d4ed
refactor(8E): add ConversionService, thin routers/tools.py + extract.py
EnjoyBacon7 May 19, 2026
c8660d7
refactor(8F): verify orchestrator DI wiring, pull last Ray call out o…
EnjoyBacon7 May 19, 2026
683b69d
fix(8): make CI green — initialize container, auth gate order, keyles…
EnjoyBacon7 May 19, 2026
0c93538
fix(8C.1): restore file_id/partition/page in search response metadata
EnjoyBacon7 May 19, 2026
ce29990
docs(8): record the search metadata-shape CI fix in the decision log
EnjoyBacon7 May 19, 2026
18e8fd8
fix(8): address CodeRabbit review
EnjoyBacon7 May 19, 2026
4e3192e
fix(8): drop the container on startup-init failure so providers serve…
EnjoyBacon7 May 19, 2026
d8b2790
test(8): migrate oidc lifecycle test to phase-8 DI wiring
EnjoyBacon7 May 19, 2026
3d81910
refactor(auth): move OIDC helpers to service layer (#398)
hedhoud May 19, 2026
3ef1e50
feat(inference): add ollama provider flexibility (#395)
hedhoud May 19, 2026
dfd106c
style: format merged refactor files
hedhoud May 19, 2026
6bfa545
fix(tests): preserve logger escape helper in stubs
hedhoud May 19, 2026
470c30e
Merge pull request #396 from linagora/refactor/phase-8-service-layer
EnjoyBacon7 May 20, 2026
b85c415
refactor(workers): add phase 9 indexing stages
hedhoud May 20, 2026
8bdbefe
fix(workers): handle invalid stage rows consistently
hedhoud May 20, 2026
f2bc943
refactor(workers): compose indexing pipeline stages
hedhoud May 20, 2026
c2d1aa8
refactor(workers): add Phase 9.4 batch ingestion and result aggregation
hedhoud May 20, 2026
c43a6d7
refactor(workers): add Phase 9.5 task_state and IndexerWorker
hedhoud May 20, 2026
e1b3a85
fix(workers): address CodeRabbit review on Phase 9.4-9.5
hedhoud May 20, 2026
6f81c5f
refactor(workers): add Phase 9.6 Docling and DocSerializer actor moves
hedhoud May 20, 2026
0992885
fix(workers): address remaining CodeRabbit review on Phase 9.5
hedhoud May 20, 2026
86ae660
style(workers): format Docling worker module
hedhoud May 21, 2026
60f3bdd
test(workers): cover batch ingest pipeline summary
hedhoud May 21, 2026
7e7c3ee
refactor(routers): route partition checks through services
hedhoud May 21, 2026
016c2c3
fix(routers): remove stale ROLE_HIERARCHY import from partition router
hedhoud May 21, 2026
aba2736
refactor(routers): route task state reads through job service
hedhoud May 21, 2026
19ce118
refactor(retrieval): replace MilvusRayShim with VectorStoreSearcher
hedhoud May 21, 2026
de4b2bf
refactor(indexing): route uploads through worker pool
hedhoud May 22, 2026
619a8d4
style(workers): format indexer pool
hedhoud May 22, 2026
22e09ee
refactor(auth): remove vector actor from request path
hedhoud May 22, 2026
6d6930e
fix(auth): align user partition dict key with list_models expectation
hedhoud May 22, 2026
fbf1bb6
refactor(9E): remove dead serializer queue helper
hedhoud May 22, 2026
5e34edc
refactor(9E): remove legacy actor dependency globals
hedhoud May 22, 2026
6b30eb1
fix(9E): bootstrap postgres catalog database
hedhoud May 22, 2026
d14f945
fix(9E): seed admin token during container startup
hedhoud May 22, 2026
f6baf27
fix(9E): route file mutations through stores
hedhoud May 22, 2026
262eec3
refactor(9A): delete components/indexer/vectordb shims
hedhoud May 22, 2026
80522f2
style: ruff format backup.py and restore.py
hedhoud May 22, 2026
9250dbc
refactor(9E): import TaskStateManager from services.workers directly
hedhoud May 22, 2026
342f98f
refactor(9E): delete storage shims and dead legacy components
hedhoud May 22, 2026
4492aeb
refactor(9F): delete dead serialize_file helper from components/index…
hedhoud May 22, 2026
5004e9f
Merge main into phase 9 worker stages
hedhoud May 23, 2026
2981d43
fix tests import guards for router collection
hedhoud May 23, 2026
2929adb
refactor(9E): move worker_dispatcher into services/workers
EnjoyBacon7 May 26, 2026
5c66dde
refactor(9E): pull WhisperActor.remote() into a worker-side helper
EnjoyBacon7 May 26, 2026
0d812d0
refactor(9E): move actor bootstrap to services/workers/bootstrap.py
EnjoyBacon7 May 26, 2026
2ec8915
style(9E): ruff format after phase-9 cleanup
EnjoyBacon7 May 26, 2026
02831a4
test(api): expose mask_email in the OIDC lifecycle test's logger stub
EnjoyBacon7 May 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
49 changes: 49 additions & 0 deletions .env.ollama
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# LLM
BASE_URL=http://host.docker.internal:11434/v1
API_KEY=ollama
MODEL=qwen2.5:0.5b
LLM_SEMAPHORE=1
TIMEOUT=300

# VLM (Vision support)
VLM_BASE_URL=http://host.docker.internal:11434/v1
VLM_API_KEY=ollama
VLM_MODEL=qwen3-vl:2b
VLM_SEMAPHORE=1

# EMBEDDER
EMBEDDER_MODEL_NAME=dengcao/Qwen3-Embedding-0.6B:Q8_0
EMBEDDER_BASE_URL=http://host.docker.internal:11434/v1
EMBEDDER_API_KEY=ollama
MAX_MODEL_LEN=2048

# RAG CONFIG
RAG_MODE=SimpleRag
CONTEXTUAL_RETRIEVAL=false
RERANKER_ENABLED=false
MAX_OUTPUT_TOKENS=2048

# App Settings
# Docker Compose expands PWD from the shell; customize if your shell does not set it.
SHARED_ENV=${PWD}/.env.ollama
APP_PORT=8002
CHAINLIT_PORT=8090
DEFAULT_LANGUAGE=en-US
INDEXERUI_PORT=8060

# Chainlit conversation history (SQLAlchemy -> existing rdb PostgreSQL)
CHAINLIT_DATABASE_URL=postgresql+asyncpg://root:root_password@rdb:5432/chainlit
DATABASE_URL=postgresql://root:root_password@rdb:5432/chainlit
CHAINLIT_AUTH_SECRET=openrag_local_dev_secret_2026

# RAY & System
RAY_ENABLE_UV_RUN_RUNTIME_ENV=0
RAY_NUM_GPUS=0
RAY_DASHBOARD_PORT=8265
RAY_memory_usage_threshold=0.99
RAY_memory_monitor_refresh_ms=0
SUPER_ADMIN_MODE=true
AUTH_TOKEN=sk-1234
SAVE_UPLOADED_FILES=true
PDFLoader=PyMuPDFLoader
WHISPER_N_WORKERS=0
84 changes: 84 additions & 0 deletions .github/workflows/integration_tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
name: Integration tests

on:
push:
branches:
- main
- dev
- "refactor/hexagonal"
- "refactor/phase-**"
pull_request:

jobs:
milvus-integration:
runs-on: ubuntu-latest
timeout-minutes: 20

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Set up Docker Compose
uses: docker/setup-compose-action@v1
with:
version: v2.34.0

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.12"

- name: Install uv
run: |
curl -LsSf https://astral.sh/uv/install.sh | sh
echo "$HOME/.local/bin" >> $GITHUB_PATH

- name: Cache uv
uses: actions/cache@v4
with:
path: |
~/.cache/uv
key: uv-${{ runner.os }}-3.12-${{ hashFiles('**/pyproject.toml', '**/uv.lock') }}
restore-keys: |
uv-${{ runner.os }}-3.12-

- name: Install dependencies
run: uv sync

- name: Start Milvus stack
working-directory: tests/integration
run: docker compose up -d --wait --wait-timeout 180

- name: Verify Milvus reachable from host
run: |
for i in {1..30}; do
if curl -sf http://localhost:9091/healthz 2>/dev/null; then
echo "Milvus healthy after $i attempts"
break
fi
echo "Attempt $i/30 - waiting..."
sleep 2
done
curl -sf http://localhost:9091/healthz

- name: Run integration tests
env:
OPENRAG_TEST_VDB_HOST: localhost
OPENRAG_TEST_VDB_PORT: "19530"
run: uv run pytest tests/integration/ -m integration -v --tb=short

- name: Show logs on failure
if: failure()
working-directory: tests/integration
run: |
echo "=== Milvus Logs ==="
docker compose logs milvus --tail=200
echo "=== etcd Logs ==="
docker compose logs etcd --tail=50
echo "=== minio Logs ==="
docker compose logs minio --tail=50

- name: Cleanup
if: always()
working-directory: tests/integration
run: docker compose down -v
21 changes: 21 additions & 0 deletions .github/workflows/layer_guard.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
name: Layer guard

on:
push:
branches:
- "refactor/hexagonal"
- "refactor/phase-**"
pull_request:
branches:
- "refactor/hexagonal"

jobs:
layer-import-guard:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Run layer guard
run: python scripts/check_layer_imports.py
11 changes: 9 additions & 2 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,16 @@ name: Linting

on:
push:
branches: [ main, dev ]
branches:
- main
- dev
- "refactor/hexagonal"
- "refactor/phase-**"
pull_request:
branches: [ main, dev ]
branches:
- main
- dev
- "refactor/hexagonal"

jobs:
lint:
Expand Down
6 changes: 5 additions & 1 deletion .github/workflows/unit_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,11 @@ name: Unit tests

on:
push:
branches: [ main, dev ]
branches:
- main
- dev
- "refactor/hexagonal"
- "refactor/phase-**"
pull_request:

jobs:
Expand Down
6 changes: 3 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,9 @@ volumes/*
!volumes/.gitkeep # Keep the placeholder

# services
services/
services/*
!services/.gitkeep # Keep the placeholder
/services/
/services/*
!/services/.gitkeep # Keep the placeholder

*.csv
*.pkl
Expand Down
27 changes: 27 additions & 0 deletions FORWARD_PORT_LOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Forward Port Log

Tracks `dev` changes during MODE 2 isolation (Phases 5-9).
Each entry: what changed on `dev`, whether it was forward-ported or deferred
to the cutover re-implementation queue.

> Created retroactively at the start of Phase 5 (2026-04-29). The Phase 0-4
> Mode 1 work merged from `dev` cleanly so this log starts empty.

---

## Forward-ported (critical)

_Security fixes, data-loss bugs, production outages re-implemented against
the new architecture. Each entry pairs the dev commit with the refactor
commit so a reviewer can audit equivalence._

(none yet)

## Deferred to cutover (features)

_Non-critical changes that landed on `dev` during MODE 2. These will be
re-implemented directly in the new architecture during MODE 3 (Phases
10-12) or post-cutover. List the dev PR number / commit and the target
location in the new layout._

(none yet)
Loading
Loading