InsuranceBot / 70-docs /60-decisions /ADR-024-triple-mirror-code-and-data.md
rohitsar567's picture
refactor: KI-047 β€” bucket reorg (Option A safe subset)
e2d09f9
|
Raw
History Blame Contribute Delete
3.19 kB
# ADR-024: Triple-mirror β€” HuggingFace + GitHub + local for both code and data
**Status:** Locked
**Date:** 2026-05-14
## Context
The project's working state must be resilient against:
1. **HF Space outage** β€” production deploy down.
2. **HF Dataset corruption / accidental deletion** β€” entire RAG corpus lost.
3. **Local Mac failure** β€” work-in-progress code lost.
4. **GitHub repo nuked** β€” public mirror lost.
Single-point-of-failure on any one layer is unacceptable.
## Decision
**Mirror both code and data across three layers.** Two GitHub repos parallel two HuggingFace artifacts.
| Layer | Code | Data |
|---|---|---|
| **HuggingFace** | Space `rohitsar567/InsuranceBot` (Docker) | Dataset `rohitsar567/insurance-bot-data` |
| **GitHub** | Repo `rohitsar567/insurance-sales-bot` | Repo `rohitsar567/insurance-sales-bot-data` (Git LFS) |
| **Local Mac** | `~/Developer/Insurance Sales Bot/` working tree | `~/Developer/Insurance Sales Bot/rag/_hf_dataset_backup/` (gitignored) |
## Alternatives considered
| Mirror count | Why rejected |
|---|---|
| Single layer (HF only) | HF Space outage = product down + no backup of code state. |
| Two layers (HF + local) | Local Mac failure or theft = irrecoverable. |
| Two layers (HF + GitHub) | GitHub LFS bandwidth cap (1 GB/month free) is exposed to every external reviewer clone. |
## Push fan-out pattern
The code repo has two remotes:
```
origin β†’ huggingface.co/spaces/rohitsar567/InsuranceBot (HF Space)
github β†’ github.com/rohitsar567/insurance-sales-bot
```
`git push origin main && git push github main` after every commit. Sync verification: `git rev-list --count main...origin/main` and same for `github/main`; both must equal 0.
The data repo (`insurance-sales-bot-data`) on GitHub uses Git LFS for files >50 MB (the 157 MB chroma.sqlite3 and the 87 MB IRDAI master circular PDF).
## End-user runtime path (important)
External users hitting the live bot **never touch GitHub**. The runtime path is:
```
End user β†’ HF Space (Docker container with data pre-baked at build time
via snapshot_download from HF Dataset)
```
GitHub is for code mirror + offline backup. GitHub LFS bandwidth is only consumed by manual clones (operator on a new Mac, reviewer inspecting the repo).
## Consequences
**Positive:**
- Three independent failure domains; any one outage doesn't lose the project.
- Sarvam reviewers can inspect code on GitHub (the polished read-only surface).
- HF reviewers can run the live demo.
- Operator can rebuild the entire dataset from local backup if HF Dataset is ever lost.
**Negative:**
- Push fan-out is two commands instead of one.
- Three sets of credentials (HF token, GitHub PAT, local file system).
**Mitigations:**
- A shell alias / git hook can collapse the dual push to one command if it becomes friction.
- Tokens stored in `.git/config` (one-time setup per machine).
## Revisit at scale
- Add `git push origin main github main` as a single composite remote (`git remote add all` with two pushurls) so one command pushes to both.
- For data, automate "HF Dataset commit β†’ GitHub LFS sync" via a GitHub Action triggered by HF webhook.