CAG-1: Register memory service standing-context resource in ServiceAdapter #44

Closed
opened 2026-09-27 09:57:57 +00:00 by rock · 1 comment
Owner

Context

Poimen-memory is adding POST /memory/standing-context which returns deterministic byte-stable Markdown context + X-Poimen-Cache-Key header for KV cache alignment.

Requirement

Register standing-context resource in the memory ServiceAdapter so agents can reach it via X-Service: memory + X-Resource: standing-context.

Acceptance Criteria

  • AC1: POST to api-gw with X-Service: memory + X-Resource: standing-context proxies to POST /memory/standing-context on memory upstream
  • AC2: Requires memory:read JWT capability (method-level auth override)
  • AC3: Memory adapter is code-registered; config-loaded memory entry is skipped
  • AC4: Dispatcher respects method-level Auth.Capability override (fixes existing bug)
  • AC5: MEMORY_UPSTREAM_URL env var configures upstream (default: http://poimen-memory.poimen.svc.cluster.local:8080)

Files

  • internal/serviceadapter/memory_adapter.go (new)
  • internal/serviceadapter/router.go
  • cmd/gateway/main.go
  • config.local.yaml
## Context Poimen-memory is adding `POST /memory/standing-context` which returns deterministic byte-stable Markdown context + `X-Poimen-Cache-Key` header for KV cache alignment. ## Requirement Register `standing-context` resource in the memory ServiceAdapter so agents can reach it via `X-Service: memory` + `X-Resource: standing-context`. ## Acceptance Criteria - AC1: `POST` to api-gw with `X-Service: memory` + `X-Resource: standing-context` proxies to `POST /memory/standing-context` on memory upstream - AC2: Requires `memory:read` JWT capability (method-level auth override) - AC3: Memory adapter is code-registered; config-loaded memory entry is skipped - AC4: Dispatcher respects method-level `Auth.Capability` override (fixes existing bug) - AC5: `MEMORY_UPSTREAM_URL` env var configures upstream (default: `http://poimen-memory.poimen.svc.cluster.local:8080`) ## Files - `internal/serviceadapter/memory_adapter.go` (new) - `internal/serviceadapter/router.go` - `cmd/gateway/main.go` - `config.local.yaml`
rock closed this issue 2026-09-27 11:16:42 +00:00
Author
Owner

Harness review — merged

RUN_ID: riotpiao-poimen/homelab-frontend#44-45-46-2026-09-27T09:35Z
PR: #47 (merged) Diff: 16 files +1603 / -168

Coders

  • coder-impl: DONE — scheduler.go (new), memory_adapter.go (new), proxy.go, router.go, config.go/loader.go, metrics.go/prometheus.go, logger.go, main.go, server/router.go, serviceadapter/router.go
  • coder-tests: DONE — scheduler_test.go (new), +JWT/queue/cache tests in proxy_test.go, +auth coverage in router_test.go, +addresses in models_test.go

Verification

go build ./... && go vet ./... && go test -race ./... → all pass, 0 races

reviewer-sre — SIGN-OFF

0🔴 3🟡 2🔵 — queue-full logged + counted, auth-bypass warned, all 3 CAG counters at /metrics

reviewer-quality — SIGN-OFF

CRAP: ServeHTTP 9.0 ✅ authenticateV1 8.5 ✅ — all 7 ACs covered by tests

Verdict: Merged ✅

## Harness review — merged **RUN_ID:** `riotpiao-poimen/homelab-frontend#44-45-46-2026-09-27T09:35Z` **PR:** #47 (merged) **Diff:** 16 files +1603 / -168 ### Coders - coder-impl: DONE — scheduler.go (new), memory_adapter.go (new), proxy.go, router.go, config.go/loader.go, metrics.go/prometheus.go, logger.go, main.go, server/router.go, serviceadapter/router.go - coder-tests: DONE — scheduler_test.go (new), +JWT/queue/cache tests in proxy_test.go, +auth coverage in router_test.go, +addresses in models_test.go ### Verification `go build ./... && go vet ./... && go test -race ./...` → all pass, 0 races ### reviewer-sre — SIGN-OFF 0🔴 3🟡 2🔵 — queue-full logged + counted, auth-bypass warned, all 3 CAG counters at /metrics ### reviewer-quality — SIGN-OFF CRAP: ServeHTTP 9.0 ✅ authenticateV1 8.5 ✅ — all 7 ACs covered by tests ### Verdict: Merged ✅
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: riotpiao-poimen/homelab-frontend#44