You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
schemaVersion: requirement-record.v1revision: R1status: readypriority: P0productOwner: "@PeterGuy326"technicalOwner: "@waterbro-8"implementationOwner: "@waterbro-8"humanReviewOwner: "@Bindy-lbb"userOutcome: "An operator can start a mem server from a published artifact, and a pinned client passes its version/contract preflight without hand-editing build flags or an out-of-band admin grant."requirements: [REQ-001, REQ-002, REQ-003, REQ-004]acceptanceCriteria: [AC-001, AC-002, AC-003, AC-004]parent: nulldependencies: []supersedes: []lastDecisionAt: "2026-09-01T07:20:00Z"
Problem
mem publishes no installable server artifact, and the version coordinate it exposes is not the coordinate clients pin against. Together these make "connect digital-employee to mem" impossible for anyone who is not building from source.
No memd artifact..github/workflows/release.yml:75-141 builds exactly one target across six platforms: go build ./cmd/mem-mcp. server/cmd/memd, mem-migrate, mem-healthcheck and mem exist on disk but are never built or published by the release workflow. The only npm surface is @fullstack-ai-infra/mem-mcp@0.1.1 (npm/package.json:2-3), whose bin is mem-mcp — a MCP shell that connects to an already-running memd. So there is no supported way to install the server; today a server exists only if you build the Docker image.
Two incompatible version grammars.server/internal/api/api.go:53 declares var Version = "dev", overridden via -X ...api.Version=${VERSION} (server/Dockerfile:11-12), and docs/DEPLOYMENT.md:66 + :70 fill that ARG with a semver tag (export MEM_VERSION=0.1.1 → --build-arg VERSION="$MEM_VERSION"). The handler serves that value verbatim at /v1/version (api.go:211-213). Meanwhile digital-employee's adapter hard-requires the response to equal a 40-hex git revision — packages/core/src/mem-http-memory-adapter.ts:25-26 pins 4c714aa352f79f0080a24904668210d6c445ba10, and :450-457 throws contract_unsupported on any mismatch, before any capability check. Net effect: every documented deployment fails closed on every operation, and the release workflow cannot fix it even by accident, because it does not build the server binary at all.
REQ-001: the release workflow builds and publishes the server binaries — memd at minimum, plus the migration and healthcheck helpers the documented deployment already assumes — for darwin/arm64, darwin/amd64, linux/arm64, linux/amd64, as versioned release assets with checksums.
REQ-002: exactly one version coordinate is defined for client/server preflight and is written down. /v1/version (or /v1/capabilities) must expose the git revision and the semantic version and the contract version as distinct fields, so a client can pin a revision or accept a version range without inventing a third mechanism.
REQ-003: the value injected at build time satisfies REQ-002 for both build paths that exist — the release workflow and the Docker image. A binary produced by either path must be preflightable by a pinned client.
REQ-004: a documented, non-admin-juggling first-run path yields a reachable endpoint, a workspace, a token whose scopes cover both write and recall, and the corresponding grant; failure to satisfy any of these reports a named missing precondition rather than a generic connection error.
Acceptance criteria
AC-001: a clean checkout of a release tag produces the server assets listed in REQ-001; the workflow log and asset list are attached to that release, and go version -m on the asset shows the exact release commit.
AC-002: a running artifact built by the release path answers /v1/version with all three REQ-002 fields populated; a client pinning either the revision or the version range passes preflight against that same artifact. A test asserts both directions.
AC-003: docs/DEPLOYMENT.md and the release docs describe one version grammar, name the field that carries the git revision, and state what a client is allowed to pin. No step in the documented path requires hand-editing a build flag to become compatible.
AC-004: following only the REQ-004 path against a release artifact, a digital-employee adapter instance completes one write and one recall against that same artifact. Recorded as live evidence with the artifact version, not as a mocked test.
Non-goals
No embedded/single-file storage mode, no change to durable-context.v1 semantics, no hosted multi-tenant service, no Windows-specific work.
Open question blocking the desktop ask
org-workbench is being asked to ship an out-of-the-box installer with memory enabled. docs/DEPLOYMENT.md:18-21 offers two deployment profiles and neither is a single installable thing on macOS:
Single-node Compose runs Web, memd, Worker and a one-shot migration on one Linux host, with PostgreSQL, Redis and MinIO as local containers on named volumes. Workable, but it is a Linux host plus a compose stack, not something a .app can carry.
Multi-node Helm requires external PostgreSQL, Redis and S3-compatible storage, and the chart intentionally does not install them or their operators (docs/DEPLOYMENT.md:23-24), plus an explicit PostgreSQL URL / Redis URL / S3 configuration (:45).
So "out of the box" needs a product decision recorded as an ADR before REQ-001/REQ-004 can be called sufficient: either a supported single-machine topology the installer can reach and configure, or an installer that points at company-hosted memd. This issue does not assume an answer, and no amount of packaging work in mem alone makes an embedded-storage mode appear — that would be a storage-layer change, not a build change.
Problem
mempublishes no installable server artifact, and the version coordinate it exposes is not the coordinate clients pin against. Together these make "connect digital-employee to mem" impossible for anyone who is not building from source.Baseline:
origin/main=10d4bf7a48fd5ab0ce6fc67caa407a717f81830e.memdartifact..github/workflows/release.yml:75-141builds exactly one target across six platforms:go build ./cmd/mem-mcp.server/cmd/memd,mem-migrate,mem-healthcheckandmemexist on disk but are never built or published by the release workflow. The only npm surface is@fullstack-ai-infra/mem-mcp@0.1.1(npm/package.json:2-3), whosebinismem-mcp— a MCP shell that connects to an already-running memd. So there is no supported way to install the server; today a server exists only if you build the Docker image.server/internal/api/api.go:53declaresvar Version = "dev", overridden via-X ...api.Version=${VERSION}(server/Dockerfile:11-12), anddocs/DEPLOYMENT.md:66+:70fill that ARG with a semver tag (export MEM_VERSION=0.1.1→--build-arg VERSION="$MEM_VERSION"). The handler serves that value verbatim at/v1/version(api.go:211-213). Meanwhiledigital-employee's adapter hard-requires the response to equal a 40-hex git revision —packages/core/src/mem-http-memory-adapter.ts:25-26pins4c714aa352f79f0080a24904668210d6c445ba10, and:450-457throwscontract_unsupportedon any mismatch, before any capability check. Net effect: every documented deployment fails closed on every operation, and the release workflow cannot fix it even by accident, because it does not build the server binary at all./v1/durable-context/recallrequires a scope grant created by an admin (api.go:353-355). There is no first-run/bootstrap path that produces a workspace, a token and its grant as one unit;mem doctor(feat(cli): add mem doctor and first-run guidance that names the documented deploy/compose path #112) and the compose-first onboarding (docs(onboarding): make deploy/compose the primary onboarding path #109) point at the deploy directory but do not close this loop.Requirements
memdat minimum, plus the migration and healthcheck helpers the documented deployment already assumes — fordarwin/arm64,darwin/amd64,linux/arm64,linux/amd64, as versioned release assets with checksums./v1/version(or/v1/capabilities) must expose the git revision and the semantic version and the contract version as distinct fields, so a client can pin a revision or accept a version range without inventing a third mechanism.Acceptance criteria
go version -mon the asset shows the exact release commit./v1/versionwith all three REQ-002 fields populated; a client pinning either the revision or the version range passes preflight against that same artifact. A test asserts both directions.docs/DEPLOYMENT.mdand the release docs describe one version grammar, name the field that carries the git revision, and state what a client is allowed to pin. No step in the documented path requires hand-editing a build flag to become compatible.digital-employeeadapter instance completes one write and one recall against that same artifact. Recorded as live evidence with the artifact version, not as a mocked test.Non-goals
No embedded/single-file storage mode, no change to
durable-context.v1semantics, no hosted multi-tenant service, no Windows-specific work.Open question blocking the desktop ask
org-workbenchis being asked to ship an out-of-the-box installer with memory enabled.docs/DEPLOYMENT.md:18-21offers two deployment profiles and neither is a single installable thing on macOS:.appcan carry.docs/DEPLOYMENT.md:23-24), plus an explicit PostgreSQL URL / Redis URL / S3 configuration (:45).So "out of the box" needs a product decision recorded as an ADR before REQ-001/REQ-004 can be called sufficient: either a supported single-machine topology the installer can reach and configure, or an installer that points at company-hosted memd. This issue does not assume an answer, and no amount of packaging work in
memalone makes an embedded-storage mode appear — that would be a storage-layer change, not a build change.