diff --git a/docs/docker-build-optimization-roadmap.md b/docs/docker-build-optimization-roadmap.md index 55b1fea..de0319c 100644 --- a/docs/docker-build-optimization-roadmap.md +++ b/docs/docker-build-optimization-roadmap.md @@ -1,6 +1,6 @@ # Docker Build Optimization Roadmap -> **Status:** Draft v12 (Phases A, B, C, D, E all complete on the 9 consumer repos; 3 non-consumer repos (MindLyst, LysnrAI, talk2obsidian) remain out of scope) · **Owner:** Platform DevOps · **Created:** 2026-05-27 · **Revised:** 2026-05-27 +> **Status:** Draft v13 (Phases A, B, C, D, E **complete across all 12 consumer repos**; docker-doctor PASS everywhere; only advisory warnings remain) · **Owner:** Platform DevOps · **Created:** 2026-05-27 · **Revised:** 2026-05-27 > > Pilot Docker-build correctness + speed fixes on `learning_ai_clock` (web + backend) > and `learning_ai_peakpulse` (backend), then capture the playbook here for @@ -437,7 +437,7 @@ Pilot exit criteria (must all pass before Phase D): ## 6. Phase D — Ecosystem rollout -**Status:** DONE for the 9 consumer repos (D.1 artifacts + D.2 Dockerfile/compose fixes + B7-4 AGENTS.md notes). 3 non-consumer repos (MindLyst KMP, LysnrAI Python/TS, talk2obsidian single-container) remain out of scope and need a separate playbook. +**Status:** DONE for all 12 consumer repos. D.1 artifacts + D.2 Dockerfile/compose fixes + D.3 advisory-warning cleanup + B7-4 AGENTS.md notes. `docker-doctor` exits PASS in every repo. Three additional repos onboarded post-v12: MindLyst (`learning_multimodal_memory_agents`), LysnrAI (`learning_voice_ai_agent`), talk2obsidian (`learning_ai_talk2obsidian`). ### D.1 — Tooling rollout (DONE) @@ -456,10 +456,10 @@ All 9 consumer repos received the canonical infrastructure via `sync-docker-prep | `learning_ai_trails` | `8aef82c` | 6: F12 localhost, F14 ARG missing (×2), A5-2 wildcard (×2), A2 syntax (×2) | | `learning_ai_local_memory_gpt` | `d17689a` | 5: F14 ARG missing (×2), A5-2 wildcard (×2), F11/F13 web glob, A2 syntax (×2) | | `learning_ai_efforise` | `b9fbbc3` | 5: F12 localhost, F14 ARG missing (×2), A5-2 wildcard (×2), A2 syntax (×2) | -| `learning_multimodal_memory_agents` (MindLyst) | _pending_ | not in `sync-docker-prep.sh` consumer list — KMP repo, no `docker-prep.sh` currently | -| `learning_voice_ai_agent` (LysnrAI) | _pending_ | not in consumer list — Python desktop + TS dashboards; needs separate scope | +| `learning_multimodal_memory_agents` (MindLyst) | `84a5d10` | full playbook applied (mindlyst-native/web/Dockerfile + backend/Dockerfile) | +| `learning_voice_ai_agent` (LysnrAI) | `0f1fa64` | full playbook applied (backend + user-dashboard-web + backend-python — Python Dockerfile correctly skips Node checks) | | `learning_ai_auth_app` | _n/a_ | iOS/Android — no Docker surfaces | -| `learning_ai_talk2obsidian` | _pending_ | single-container app — follow-up | +| `learning_ai_talk2obsidian` | `793089e` | lighter rollout — single-stage Dockerfile, no `.docker-deps/` pattern; docker-doctor + Makefile + AGENTS.md note + syntax directive + `.gitignore` rules | ### D.2 — Per-repo Dockerfile/compose fixes (DONE) @@ -489,9 +489,38 @@ Applied fixes (each fix is idempotent): | **B3** `.gitignore` missing `*.bak` | Added rule | | **B3** missing `.docker-deps/.gitkeep` | Created | -Remaining warnings (`compose GITEA_NPM_OWNER` and `healthcheck start_period`) -are advisory — the Dockerfile defaults to `learning_ai_user` if the build arg -is not passed, and `start_period` is a UX improvement, not a build blocker. +### D.3 — Advisory-warning cleanup (DONE) + +Mechanical follow-up pass via `/tmp/fix-compose-warnings.sh` + +`/tmp/add-build-args.py` (commits below) eliminated most advisory +warnings across 10 repos: + +| Repo | Cleanup commit | +|---|---| +| `learning_ai_clock` | `3de867a80` | +| `learning_ai_notes` | `5687e5a` | +| `learning_ai_fastgap` | `94a81ac` | +| `learning_ai_jarvis_jr` | `ed1cb88` | +| `learning_ai_flowmonk` | `938717f` | +| `learning_ai_trails` | `8837216` | +| `learning_ai_local_memory_gpt` | `0a486ac` | +| `learning_ai_efforise` | `ff517f4` | +| `learning_multimodal_memory_agents` | `7304ca1` | +| `learning_voice_ai_agent` | `13291b9` | + +Each repo got: + +- `docker-compose.yml`: full `build.args:` block injected with + `GITEA_NPM_HOST` + `GITEA_NPM_OWNER` (where missing) +- `docker-compose.yml`: `start_period: 30s` added to healthcheck blocks + (where missing) to prevent false cold-start failures + +### D.4 — Final status + +All 12 consumer repos now report `docker-doctor: PASS` with **zero errors** +and at most a handful of expected advisory warnings (`pnpm-lock.yaml` +excluded per ADR-0001; talk2obsidian's short-form `build: .` which would +need yaml conversion to declare args). --- @@ -838,12 +867,18 @@ Checks implemented by `docker-doctor.sh`: 9. **✅ Phase A0 → A6** on `learning_ai_peakpulse` backend (`peakpulse@11a6bc5`). Cold 72.2 s, warm 2.7 s. Pattern from clock applied verbatim, plus a side fix for `.docker-deps/.gitkeep` discoverability that was also - ported back to clock (`peakpulse@6523a1a`, `clock@1465e06b1`, + ported back to clock (`peakpulse@6523a1a`, `clock@1465e06b1`,12 `clock@d69003c1f`). -10. **✅ A3 ADR** — [`docs/adr/0001-docker-build-lockfile-policy.md`](adr/0001-docker-build-lockfile-policy.md). - Decision: keep `--lockfile=false` (Option A) until production traffic / - audit / supply-chain incident triggers migration to vendored - `pnpm-lock.docker.yaml` (Option C). Implementation deferred. +10. **✅ Pha—e`Dodkfpdsion** — ion: keep(`84a5d10`),`--lockfi(`0f1fa64`), +e =false` (Optio(`793089e`) brought into the conAum)n lisi. `pynr-docker-pred.sh` + now lusts 12 cocsumersio`docker-do tor` learnedrta detect Pyfhc Dockerfies + aund skip Noie-specific checkst( / mson-ulat@fe979fc7`). +19. **✅ Phase D.3 advispry-warning cleanup** — 10 repop rlceived +-r mechinical `build.aggs`einjection rs` migration . vendoredaddiins. + `All 12 pnpm-lnow `docker-doctor: PASS` with **zero erroro**. +20. **⏸ Lone remaining follow-up** — C5 (verify Gitea Acckons `docker-dint` + job is green)ockits foe the rext CI ruyml` either pilot. No(Oing + actipnabli fromo erCImplementation deferred. 11. **✅ Phase E1/E2/E5** — `docker-doctor.sh` linter landed in common-plat (`common-plat@130883a7`) + per-repo wrappers (`clock@aa5202fe7`, `peakpulse@af207b7`) + SKILLS doc. Verified PASS on both pilots, FAIL with