Skip to content

docs(onboarding): make deploy/compose the primary onboarding path #109

Closed

Description

@PeterGuy326
schemaVersion: requirement-record.v1
revision: R1
status: needs-design
priority: P1
productOwner: "@PeterGuy326"
technicalOwner: "unassigned"
userOutcome: "A first-time user takes deploy/compose as the documented primary path to a working mem (netdisk) instance, with the bare-metal development path clearly demoted to development-only and given WSL/Linux equivalence."
requirements:
  - REQ-001
  - REQ-002
  - REQ-003
acceptanceCriteria:
  - AC-001
  - AC-002
  - AC-003
parent: null
dependencies: []
supersedes: []
lastDecisionAt: null

User problem and observable outcome

Ops dogfood (2026-08-29): the bare-metal development path demands Go 1.25 / Python 3.11 / uv / protoc 34.1 / PostgreSQL@17+pgvector / MinIO / Ollama with macOS-brew-leaning docs and no WSL/Linux equivalents (ops machine satisfied none); meanwhile deploy/compose proved a fully working one-shot path — six services healthy, first-user registration and folder creation completed through the browser (localhost:8080, verifiable). Conclusion: the container path is the shortest time-to-value and should be the primary onboarding entry. Observations are evidence input; implementation truth belongs to Tech P9.

Observable outcome: README/onboarding leads with deploy/compose; bare-metal is demoted to a development-only section with platform-equivalent guidance; first-time guidance points at the container path.

Requirements

  • REQ-001: Onboarding repositioning — README and onboarding docs present deploy/compose as the primary entry (ops-verified one-shot: generate-env → compose up → register → folder creation); the verified closed loop is stated with evidence vocabulary.
  • REQ-002: Bare-metal demotion with equivalence — the bare-metal development path is demoted to development-only and gains WSL/Linux equivalence for every macOS-brew step (version pins explicit).
  • REQ-003: First-time guidance — doctor/first-run messaging points first-time users to the container path; onboarding runbook evidence recorded per ledger discipline (ops logs as input).

Acceptance criteria

  • AC-001: Docs fixture — README/onboarding lead with the container path; bare-metal section demoted and version-pinned with WSL/Linux equivalents.
  • AC-002: Runbook evidence — the container-path closed loop (up → register → folder creation) is evidenced on a clean environment.
  • AC-003: Guidance fixture — first-time messaging points at the container path; no bare-metal-first instruction remains in the primary flow.

Non-goals and forbidden shortcuts

  • No removal of the bare-metal development path (development use retained).
  • No compose topology or service changes.

Lifecycle, status, priority, blockers, and open decisions

  • status=needs-design; priority P1; technicalOwner unassigned (docs-heavy; assign at implementation kickoff).
  • Blockers: none.
  • Open decision: whether doctor-level container-path detection belongs here or in a shared doctor surface (coordinate with the doc environment-readiness issue if tech adjudicates a shared tooling home).

Evidence plan

  • Docs fixtures plus container-path runbook evidence; ops deploy logs (mem_deploy.log / mem_assess.txt) as evidence input.

Decisions

  • DEC-MEM-109-001 (2026-08-29T02:26:00Z): issue created per founder-approved dogfood intake (2026-08-29); ops deploy logs are evidence input; implementation truth belongs to Tech P9.

Revision history

  • R1 (2026-08-29T02:26:00Z): initial record created per founder-approved draft C (dogfood P1 container-first onboarding).

Activity

  1. waterbro-8 commented on Aug 30, 2026

    @waterbro-8
    Collaborator

    裁决摘要(技术 P9)

    REQ-003 拆,不砍:已按 requirement-decision.v1 移入新 issue #112(mem doctor / first-run 指引面)。#109 收窄为纯文档 issue。取证基线:main @ 419a420。

    schemaVersion: requirement-decision.v1
    canonicalIssue: "https://github.com/fullstack-ai-infra/mem/issues/109"
    previousRevision: R1
    resultingRevision: R2
    decisionType: narrowing
    oldDecision: "technicalOwner=unassigned; requirements=[REQ-001 docs repositioning, REQ-002 bare-metal demotion with WSL/Linux equivalence, REQ-003 doctor/first-run guidance pointing at the container path]; acceptanceCriteria=[AC-001, AC-002, AC-003 first-time messaging fixture]; openDecision='whether doctor-level container-path detection belongs here or in a shared doctor surface'"
    newDecision: "technicalOwner=@waterbro-8 (independent reviewer @PeterGuy326 or @Bindy-lbb); requirements=[REQ-001, REQ-002]; acceptanceCriteria=[AC-001, AC-002]; REQ-003 and AC-003 move verbatim to https://github.com/fullstack-ai-infra/mem/issues/112 at R1, which this issue now names as a non-blocking downstream dependency; the shared-doctor-surface question is answered there as 'shared surface, own issue'; the record is retyped docs-only (type:docs, area:docs)."
    reason: "REQ-003 asked for a CLI surface that does not exist anywhere in this repository: the strings 'doctor' and 'first-run' have zero occurrences at main @ 419a420, so it is net-new Go code with its own output contract and tests. Mixing it into a README/onboarding rewrite breaks the readiness gate rule that an issue be small enough for one reviewable PR or be split into linked issues (docs/maintainers/triage.md), and it is why this docs-repositioning issue still carries type:feature."
    impact: "#109 becomes a documentation-only change that can be validated by reading the rendered tree, unblocked by any code work. Nothing is cancelled: first-run guidance still owns an issue, an owner, requirements and ACs at #112, at P2, and #112 depends on this issue rather than the reverse, so the P1 docs delivery cannot be gated by the P2 CLI surface."
    approver: "@PeterGuy326"
    decidedAt: "2026-08-30T06:17:00Z"

    Owner

    • technicalOwner: "@waterbro-8" — owns the docs change and its evidence packet.
    • Independent approval must come from @PeterGuy326 or @Bindy-lbb (.github/CODEOWNERS): AGENTS.md step 6 forbids author self-approval, and the technical owner is the author here.

    What #109 keeps, with the scope sharpened against the actual tree

    Verified so the ACs are checkable rather than aspirational:

    • The premise is confirmed at E2. The bare-metal path is brew-shaped and has no Linux/WSL equivalent written down: docs/RUN_LOCAL.md:24 tells the user to install PostgreSQL + pgvector via brew, and scripts/dev_up.sh:31,117,208 resolve BREW_PREFIX and otherwise die with brew install ... instructions. README.md:181 (开发环境) lists Go 1.25 / Python 3.11 / uv / protoc 34.1 / Docker as prerequisites with no platform notes.
    • The gap is README-level, not deployment-doc-level. docs/DEPLOYMENT.md:99 already documents a "Single-node Compose" profile, and deploy/compose/ carries generate-env.sh plus an eight-service compose.yaml (postgres, redis, minio, minio-init, migrate, worker, memd, web). What is missing is exactly what the ops dogfood hit: README.md:231 快速开始 tells a first-time visitor to run ./scripts/dev_up.sh, i.e. the bare-metal path, and never mentions deploy/compose.
    • Therefore REQ-001's deliverable is a reorder plus one pointer, not a second deployment manual. Rule for the PR: README leads with the container path in a few commands and links docs/DEPLOYMENT.md for the profile detail; duplicating compose prose into README is refused, because the two would drift and DEPLOYMENT.md is the owner of that content.
    • REQ-002's list is now enumerable (so AC-001 is objectively checkable): the brew-shaped steps to give a Linux/WSL equivalent are the PostgreSQL+pgvector install, the MinIO binary fetch, and the setsid/keg-only path resolution in dev_up.sh — with version pins stated per platform, and with the macOS path still first-class (non-goal: no removal of the bare-metal path).

    Suggested labels (needs a maintainer — this account cannot write)

    waterbro-8 has no body/label write rights upstream (PATCH issue and POST labels both 403, admin required). Please @PeterGuy326: retype type:feature → type:docs, add area:docs, add evidence:e2-source (source-level premise above; the ops clean-environment container runbook required by AC-002 is what raises it to E3), and set the lifecycle label once the record is at R2. priority:p1 and the user outcome are unchanged by this revision.

    —— 技术 P9

  2. PeterGuy326 commented on Sep 1, 2026

    @PeterGuy326
    CollaboratorAuthor
    schemaVersion: requirement-decision.v1
    canonicalIssue: "https://github.com/fullstack-ai-infra/mem/issues/109"
    previousRevision: R1
    resultingRevision: R2
    resultingStatus: ready
    decisionType: narrowing-and-acceptance-contract
    approver: "@PeterGuy326"
    decidedAt: "2026-09-01T02:54:08Z"

    R2 owner decision — docs-only, Compose-first onboarding

    This comment is the effective product-owner R2 decision. It supersedes earlier proposed R2 wording that was not posted by the product owner. The delivery contract is ready; it is not a PR approval or merge authorization.

    Approved scope

    • README and onboarding documentation lead with the documented Compose path: generate-env → compose up → register → create a folder.
    • Bare-metal remains available only as a development path. Each prerequisite and platform-specific step must state explicit version pins and usable WSL/Linux equivalents alongside the existing macOS guidance.
    • An E3 clean-host run must demonstrate the full four-step closed loop above and record reproducible evidence.

    Boundaries and non-goals

    This is a documentation-only change. It does not authorize changes to runtime behavior, a doctor or first-run CLI surface, Compose topology, Docker behavior, service configuration, or model defaults. The doctor/first-run capability remains exclusively in #112.

    Implementation may now be planned against R2 with normal independent review, required CI, and merge evidence still required.

  3. sun-970 commented on Sep 8, 2026

    @sun-970
    Contributor

    Review notes

    The R2 narrowing looks sound. A few observations:

    1. REQ-001 scope is well-bounded. The README currently points first-time users at ./scripts/dev_up.sh (line 231) with zero mention of deploy/compose. The fix is a reorder + a pointer to docs/DEPLOYMENT.md, not duplicate prose. Good — duplication would drift.

    2. REQ-002 checklist is concrete and verifiable. The three brew-shaped steps (PostgreSQL+pgvector, MinIO binary, setsid/keg-only resolution in dev_up.sh) are enumerable, so AC-001 can be objectively checked. Suggest formatting the per-platform version pins as a table for easy scanning.

    3. AC-002 evidence bar is appropriate. A clean-host runthrough of the full four-step closed loop (generate-env → compose up → register → folder creation) with reproducible logs is a reasonable acceptance threshold. Consider recording the session as an asciinema cast or timestamped log snippet so future reviewers can verify without re-running the full stack.

    4. Label housekeeping is still pending. The issue still carries type:feature — per the R2 decision it should be type:docs + area:docs. @PeterGuy326, could you update the labels when you get a chance?

    No blockers from my side. The dependency chain (#109 docs → #112 doctor CLI surface) is correctly ordered so P1 delivery is not gated by P2 CLI work.

  4. wadrzl commented on Sep 8, 2026

    @wadrzl

    Issue #109 Verification (2026-09-08)

    Baseline: origin/main read today. R2 scope (REQ-003/AC-003 moved to #112). No open PR targets this issue; PRs #126, #148 (docs) and #131 (doctor, retargeted to #112) all closed without merge.

    Requirements (R2 scope)

    Req Status Evidence
    REQ-001 (README leads with deploy/compose) ❌ NOT DONE README.md:231 快速开始 still tells first-time users to run ./scripts/dev_up.sh (bare-metal). deploy/compose is never mentioned in that section; production Compose/Helm appears only as a side note at line 259.
    REQ-002 (Bare-metal demotion + WSL/Linux equivalence) ❌ NOT DONE docs/RUN_LOCAL.md is entirely brew/macOS-oriented. No platform-equivalence table. The MinIO curl example uses linux-amd64 URLs but is presented as a fallback, not as a peer platform path. scripts/dev_up.sh resolves BREW_PREFIX and dies with brew instructions otherwise.

    Acceptance criteria (R2 scope)

    AC Status
    AC-001 (README leads with container path; bare-metal demoted + version-pinned WSL/Linux table) ❌ README still bare-metal-first; no platform table exists
    AC-002 (E3 clean-host container runbook: generate-env → compose up → register → folder creation) ❌ No clean-environment evidence attached to any closed or open PR

    Closed PRs — what they attempted and why they did not land

    Adjacent state

    Summary

    0/2 requirements met. 0/2 ACs met (R2 scope). Three attempts closed without merge; no open successor. The docs change itself is small (README reorder + one platform table) but has not cleared review. Owner @waterbro-8 is recorded; no label housekeeping done (still type:feature, should be type:docs per R2).

  5. waterbro-8 commented on Sep 17, 2026

    @waterbro-8
    Collaborator

    Organization-branch PR: #215.

    README now leads with deploy/compose (generate-env → compose up --wait → register at localhost:8080). Bare-metal dev_up.sh is a development-only subsection. docs/RUN_LOCAL.md adds Ubuntu/Debian and WSL2 equivalents for the brew-only steps.

    AC-003 first-run messaging already names deploy/compose on main via mem doctor (#112). Compose closed-loop on a clean host is NOT VERIFIED in this environment (no Docker daemon). Previous fork #148 remains closed. No merge.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    priority:p1Important after the immediate critical pathtype:featureA new user-facing capability

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions