Skip to content

Refactor Docker Compose for per-service and whole-suite testing #37

Closed

Description

@ckrough

Problem

The only compose file is apps/stacker/docker-compose.yml, and it still references pre-consolidation relative paths that broke during the Phase 2 monorepo consolidation:

  • retriever-api build context: ../retriever/backend (retriever's backend/ was flattened to the service root; correct path is now ../../services/retriever)
  • petdata-api build context: ../petdata (the top-level module dirs were removed; correct path is now ../../services/petdata)
  • env_file entries point at the same stale paths

There is also no way to bring up or test a single service in isolation: the compose file is portal-centric and couples all backends together under apps/stacker.

Desired outcome

Docker setup that supports both:

  1. Per-service: build, run, and test one service (petdata, retriever, or future biowriter) on its own.
  2. Whole-suite: bring up the full stack (Postgres/pgvector, all services, the portal's backends) with one command.

Possible direction (not prescriptive)

  • Move compose to a repo-level infra/ (or root) location so paths resolve cleanly across the monorepo, per the target layout in docs/plans/repo-restructure-and-rename.md.
  • Per-service compose files or compose profiles, with a top-level compose that composes them for the full suite.
  • Align with the tech-stack standard's "one-command local stack" goal (Phase 5 / ADR 0003).

Acceptance Criteria

  • A single service can be built and run in isolation via Docker (documented command).
  • The whole suite (db + services) comes up with one command.
  • All build contexts and env_file paths resolve correctly from the monorepo layout (no ../petdata / ../retriever/backend stale paths).
  • The approach is documented (README or infra/ docs) and consistent with the tech-stack standard's one-command local stack.

Notes

Activity

  1. added this to the Portal foundation milestone on Jun 19, 2026
  2. self-assigned this
    on Jun 24, 2026
  3. ckrough commented on Jun 24, 2026

    @ckrough
    MemberAuthor

    daedalus pipeline claimed

  4. added
    blockedBlocked: needs operator decision or unblocking
    on Jun 24, 2026
  5. ckrough commented on Jun 24, 2026

    @ckrough
    MemberAuthor

    daedalus pipeline: BLOCKED (spec contradicts code)

    The pipeline halted before implementation because the issue's premise no longer matches the repository. The conditions described here were fixed by the monorepo consolidation and follow-on work that landed after this issue was filed (it references PR #36 / Phase 3). Marking blocked for an operator decision rather than fabricating out-of-scope changes.

    Premise in the issue vs. current main:

    1. "The only compose file is apps/stacker/docker-compose.yml" with stale ../retriever/backend and ../petdata build contexts and retriever-api / petdata-api services.
      • Current main has four compose files, already reorganized per service:
        • services/retriever/docker-compose.yml (dev pgvector + Jaeger)
        • services/retriever/docker-compose.test.yml (ephemeral test DB, :5433)
        • services/petdata/docker-compose.test.yml (ephemeral test DB, :5434)
        • apps/stacker/docker-compose.yml (app database for the portal, :5433)
      • grep for ../petdata, ../retriever/backend, retriever-api, petdata-api across all compose files returns nothing.

    Acceptance criteria, current status:

    • AC3 (no stale build-context / env_file paths): satisfied. No stale paths remain anywhere.
    • AC2 (whole suite, one command): satisfied by make dev (Supabase + pgvector + migrations + services), make down to stop. Targets live in the root Makefile.
    • AC1 (single service in isolation, documented): substantially satisfied. Per-service compose files exist with usage documented in their header comments and in docs/local-development.md (manual make targets).
    • AC4 (documented, consistent with the one-command local stack): satisfied by docs/local-development.md.

    The "housekeeping aside" is also already done: the module:petbio label no longer exists.

    Residual ambiguity for the operator (not in the binding acceptance criteria):

    • services/petdata has no service Dockerfile (only a test-DB compose), so petdata cannot be built-and-run as a container in isolation the way retriever can (retriever has a Dockerfile). The current model runs services natively against dockerized datastores.
    • There is no single top-level / infra/ compose; the suite is composed via the Makefile, not a parent compose file. Both were listed in the issue only as "possible direction (not prescriptive)."

    Recommended operator action: close as already-resolved by the monorepo consolidation, OR re-scope to the two residual items above (petdata service Dockerfile and/or a top-level infra/ compose) if those are still wanted, then re-dispatch.

    Pipeline state: no branch work done, nothing committed, working tree clean (nothing to stash). Bindings followed: tracker=github, push_policy=gated, close_semantics=on-merge. Worktree: issue/37 at claude-worktrees/evermore-issue-37.

  6. ckrough commented on Jun 24, 2026

    @ckrough
    MemberAuthor

    Resolved by the monorepo consolidation (Phase 3) and follow-on work. The stale compose paths and retriever-api/petdata-api services this issue described no longer exist on main: four per-service compose files now exist, make dev/make down give whole-suite up/down, and per-service isolation is documented in docs/local-development.md. The one genuinely-missing artifact, a petdata service Dockerfile, is tracked separately in #8. The non-prescriptive 'top-level infra/ compose' idea is superseded by the Makefile-over-per-service-compose model. Closing as already-resolved; no code change needed.

  7. removed
    blockedBlocked: needs operator decision or unblocking
    on Jun 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

enhancementNew feature or requestmodule:platformCross-cutting platform / foundation

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions