Meeting with Ajay — brief¶
1. Urgent: security (5 minutes)¶
- Rotate the
/save-navwrite token (runbook:docs/handovers/save-nav-token-rotation-runbook.md; Atul may already have done it). It is committed in plain text inmm-crons/lambda/navdata/readme.md. Store the new one as a secret. Deleting the line doesn't help, because it stays in git history. - HTTPS only for write endpoints: the example calls
http://api.moneymarche.com/save-nav. - Ajay checks the backup scripts (
dbbackup/) and other config files for embedded credentials. They are not to be copied anywhere.
2. NAV data: is it current? (10 minutes)¶
- The TEA audit found NAV persistence stopped at 19 Aug 2026 with no alert. Ask whether it has resumed, and since when.
- Likely cause, from API !156: the MM-Cron producer doesn't check the HTTP status, sets no timeout and doesn't retry; the API commits in batches of 1,000 and can partly commit before a later batch fails. That explains silent partial failures.
- Decision needed: who fixes the producer (status checks, timeout, retry, replay safety), and when. This is the first job for the MM-Cron checks (
docs/design/mm-crons-agent-augmentation.md).
3. The review queue the agent left (20 minutes)¶
The agent working on API and MM-Cron commits under Ajay's GitLab account (devops_moneymarche). Open MRs: API 38, MM-Cron about 20. Most are documentation; none is merged. CI hasn't run since the GitLab compute quota ran out in September.
Start with the agent's own entry points:
| MR | What it is |
|---|---|
| API !160 (11 Oct) | API and MM-Crons engineering status register: workstreams, decisions, blockers, design references, questions for the legacy developer. The single entry point |
| MM-Cron !80 (10 Oct) | Legacy developer review checklist across API and MM-Cron |
| MM-Cron !75 (9 Oct) | Consolidated MM-Cron legacy review pack |
Code changes that need a decision (not just reading):
| MR | Change | Note |
|---|---|---|
| API !132 | Security fix: allowlist for sort fields in the v2 category product query (blocks arbitrary SQL in sort_by/sort_order) |
Prioritise |
| API !159 | Staging-only, read-only smoke test harness (stgapi only) |
Useful for the staging move and for the tools box |
| API !130, !123 | Query-safety test alignment; a GET / root endpoint |
Small |
| MM-Cron !71, !73 | Fail-closed staging destination policy; offline staging preflight guard | Protect production from staging runs |
Data and contract documents (review in a batch): API !155–!158 (staging data plane, route-to-table matrix, staging data population contract), !156 (the /save-nav contract above); MM-Cron !70, !72, !74, !76–!79 (sanitisation workflow, packaging manifest, sources and crons map, portfolio config coverage, NAV replay risks and writers, identity audit).
Older Release-C documents (21–28 Sep): API !128–!142, !150, !153. Ask Ajay whether to merge them in one batch, or close those that !160 supersedes.
Notable finding in API !155: the /product/<code>/holding route reads legacy tables (mm_product_holdings, mm_product_sectors), while MM-Cron writes portfolios to mm_data.mm_portfolio and mm_portfolio_items. Holdings shown to users may be stale. This needs an owner.
4. CI and the tools box (5 minutes)¶
- API CI has been blocked by the exhausted GitLab quota since September, which is why nothing has been tested or merged.
- Proposal: a GitLab runner on the new tools box, registered to the
moneymarchegroup. Runners we host don't use GitLab's minutes (A-25, to confirm). Ajay's agreement needed (he administers the group), plus a runner registration token from him or Atul.
5. Agent identity (3 minutes)¶
The agent's commits show as Ajay. Propose a separate GitLab agent account with the Developer role, so the history shows who did what, and agents can't merge to protected branches.
6. Staging and separation (5 minutes)¶
- Plan: copy staging WordPress to Bluehost as a test and fix what breaks (the API database dependency seen during the MMCLONE copy). API !158 describes the staging data contract.
- The production server hosts production, staging, development, both APIs, Mautic, SuiteCRM and MM-Cron together. Share the separation plan (tools box now; staging WordPress to Bluehost after the vacation).
7. Vacation cover (5 minutes)¶
- Ajay as the production emergency contact? Agree what he may do (restart services, restore from snapshot, roll back a deploy) and what waits for Atul.
- During the vacation: no merges or deployments by agents. The MM-Cron job register (MM-Cron plan v1.0 §5) can be built as documentation.
8. Decisions to record after the meeting¶
| Decision | Owner |
|---|---|
| Token rotated, HTTPS enforced | Ajay / Atul |
| NAV producer fix: owner and date | |
| Review order of the MR queue; batch-merge or close the September documents | Ajay |
| API !132 security fix: merge path (needs CI or a manual test) | Ajay |
| GitLab runner on the tools box: yes or no | Ajay |
| GitLab agent account | Atul |
| Emergency contact and limits | Atul |