Skip to content

Meeting with Ajay — brief

1. Urgent: security (5 minutes)

  1. Rotate the /save-nav write token (runbook: docs/handovers/save-nav-token-rotation-runbook.md; Atul may already have done it). It is committed in plain text in mm-crons/lambda/navdata/readme.md. Store the new one as a secret. Deleting the line doesn't help, because it stays in git history.
  2. HTTPS only for write endpoints: the example calls http://api.moneymarche.com/save-nav.
  3. 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 moneymarche group. 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