Five-harness development framework (v2, 27 Oct)¶
This page is the as-designed view of how Money Marche engineering works. It merges two pictures:
- Atul's concept (Gemini image, 26 Oct). It is kept as a reference, not as the as-built state:
- MMDEP-PM's as-built view (v1, 27 Oct).
The decision (TD-072): take Atul's five harnesses as the frame (Design, Code, Testing, Research, Work), with one Orchestration core underneath. Each component carries its real status from the tech-stack register (adopt / trial / hold), so the picture never claims more than what runs. The editable source is the Mermaid diagram below. It is a text file in the repository, so it is versioned, reviewable and drawn on GitHub and on the docs site. Image files are for concepts only.
flowchart LR
A([Atul and Ajay: goals, business answers])
subgraph O[Orchestration core]
O1[MMDEP Actions: for-atul issues and panel]
O2[Routing and allocation: who does what, escalation ladder]
O3[Execution: laptop runner now, server from S3]
O4[Access isolation: data classes, keys per environment]
end
subgraph D[1 · Design harness: pre-flight]
D1[Claude Design, ChatGPT projects, MMDEP Assistant] --> D2[Overall, phase and sprint designs; LLD with V/S/C/D/L]
D2 --> D3[Ready issues: routing block and scope paths]
end
subgraph C[2 · Code harness: unattended]
C1[Aider with free/cheap models, Ollama for client data] --> C2[Change limited to scope paths]
end
subgraph T[3 · Testing harness: quality gates]
T1[CI: pytest with coverage, ruff, bandit, pip-audit, design check]
T2[Live checks: API, NAV duplicates and gaps, staging parity, SEO crawl]
end
subgraph R[4 · Research harness: knowledge]
R1[Knowledge extraction from chats] --> R3[(docs/knowledge)]
R2[GitLab snapshots, AMFI/AMC sources] --> R3
end
subgraph W[5 · Work harness: operations]
W1[Business flows: renewal cadence, lead routing]
W2[Systems of record: CRM, website, accounting]
end
A <--> O1
D3 --> C1
C2 --> T1
T1 -->|green| M[(Repositories, merge by risk)]
T1 -->|red twice| O2
M --> T2
T2 --> D1
R3 --> D1
M -->|release with Atul's approval| W
W --> T2
D2 -->|business question| O1
O --> D & C & T & R & W
What each harness holds: Atul's concept against what we run¶
Status: adopt = in use or decided; trial = being tried this sprint or next; hold = not now, with the reason; legal = legal check before build (TD-030).
| Harness | Component (concept) | Status | Notes |
|---|---|---|---|
| Design | Claude, ChatGPT projects | adopt | Claude Design and MMDEP-PM; ChatGPT project agents; MMDEP Assistant for low/medium-risk design |
| Design | Deterministic state machines | adopt (practice) | Every workflow with states (lead, renewal, NAV ingest run) gets a Mermaid stateDiagram in its LLD |
| Design | DBML schema (dbdiagram.io) | hold | Mermaid erDiagram in the LLD does the same inside the repository, at ₹0, with no extra tool |
| Design | OpenAPI spec | adopt | The ingest-routes LLD already writes the routes into the OpenAPI file |
| Design | Excalidraw | trial | For rough sketches in discussion. Anything that becomes a design is redrawn in Mermaid |
| Design | Penpot | hold | UI design tool; revisit when a UI designer joins. WPDev works from the live site |
| Code | Aider + Ollama | adopt | Aider runs in the code harness. Ollama is on the LAN, firewalled, for client-data tasks |
| Code | LiteLLM proxy | trial (S3) | Goes on the server with SRV-1; one place for model keys and limits (B42) |
| Code | Repo slicing gateway | adopt (as built) | This is our routing block scope.paths plus the context pack: the model sees only what the issue allows |
| Code | Python, JavaScript | adopt | Plus PHP for WordPress (WPDev) |
| Testing | GitLab runner (host network) | adopt | Laptop runner; tests run where the code lives |
| Testing | ruff, pytest | adopt | |
| Testing | pytest --cov, bandit, pip-audit |
adopt (add) | ₹0. Added to the CI templates as a backlog item; reported first, not blocking, for 2 weeks |
| Testing | SEOnaut crawler | trial | WPDev's SEO report already uses a crawler; Lighthouse CI on the laptop runner |
| Testing | (missing in concept) live production checks | adopt | The collector: API routes, NAV duplicates and gaps, staging status |
| Research | "Air-gapped" knowledge bus | adopt, renamed | We aren't air-gapped (we use cloud models). What exists: knowledge extraction, GitLab snapshots, docs/knowledge. Client data stays local by data class |
| Research | Local vector DB (Chroma/Qdrant) | hold | When RAG is needed (medium horizon), pgvector in the server's Postgres: one database, not two |
| Research | RAG indexing | hold (medium horizon) | Facts for content and support; after the server |
| Research | Bhashini (Indian languages) | hold, legal | Useful for regional-language content and client messages; needs a use case and a terms check |
| Research | DPI open-banking feeds, Account Aggregator | hold, legal | Client financial data (data class client). Joining the AA network as a data user (FIU) needs a regulated status and consent flows: legal opinion first |
| Work | n8n workflow bus | trial (S3) | On the server; flows exported to git. Until then, Python jobs on the laptop |
| Work | Zoho CRM | adopt (current) | Connected; MCRM is the CRM project |
| Work | SuiteCRM | business decision | A second CRM would conflict with Zoho/MCRM. Which is the CRM of record? (raised to Atul) |
| Work | Strapi headless CMS | hold | The website is WordPress; no second CMS without a need |
| Work | ERPNext (accounting, rewards) | hold | No accounting project yet; a business decision when rewards or commission accounting starts |
| Core | Orchestration core, execution engine | adopt | MMDEP: routing, allocation, Actions, runner on the laptop, server from S3 |
| Core | Access isolation gateway | adopt (as built) | Data classes (public/indicative/internal/client), keys per environment (a staging key is refused on production), segregation (DR-008) |
| Core | India DPI connections (UPI, AA) | hold, legal | Not in the current phase; see Research |
Corrections to the concept image: the image text has errors that came from the image generator ("Eirmenprent and interrspace", "Brower session", the garbled subtitle). The Mermaid diagram above is the version to use.
Where it is weak today, and the fix in hand¶
- Orchestration core: inbox → panel copy happens only when Atul messages MMDEP-PM. Proposed fix: a 4-hourly panel sync (panel item SYNC-1).
- Code, testing and research harnesses depend on the laptop being on. SRV-1 (the server) removes that.
- Design → code: the hand-off is manual for ChatGPT LLDs. Fix: B36, LLD → ready issues.
- Testing: no coverage or security scans in CI yet. Fix: add pytest coverage, bandit and pip-audit (TD-072).
- Work harness: nothing automated yet; n8n arrives with the server. This is where revenue flows (renewals, leads) live, so it comes first after the server.