Deploy Poimen Memory K8s cluster with ArgoCD tracking (M2.2, M3.5-M3.7)
ci / markdown (push) Waiting to run
ci / markdown (push) Waiting to run
This commit is contained in:
+103
-35
@@ -1,6 +1,6 @@
|
||||
# poimen-memory — task board
|
||||
|
||||
43 tasks — 36 build tasks plus **7 composition gates**, one per phase. One file
|
||||
64 tasks — 54 build tasks plus **10 composition gates**, one per phase. One file
|
||||
per task, **self-contained**: inlined design facts, executable steps, acceptance
|
||||
criteria, a `Verify` section written for someone who did not build the thing, and
|
||||
the traps worth naming. Reading `DESIGN.md` is not required to do a task — it is
|
||||
@@ -58,22 +58,29 @@ Legend: ⬜ not started · 🟡 in progress · ✅ done · ⛔ blocked
|
||||
|
||||
| # | Phase | Ids | Tasks | ✅ | 🟡 | ⬜ | Gate |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| 1 | Read-only spine | M0.x | 8 | 0 | 0 | 8 | ⬜ M0.8 |
|
||||
| 2 | Gated loop at L1 | M1.x | 8 | 0 | 0 | 8 | ⬜ M1.8 |
|
||||
| 3 | Projections | M2.x | 8 | 0 | 0 | 8 | ⬜ M2.8 |
|
||||
| 4 | L2 synthesis + retrieval | M3.x | 4 | 0 | 0 | 4 | ⬜ M3.4 |
|
||||
| 4.5 | Distributed API Layer | M3.5.x | 8 | 0 | 0 | 8 | ⬜ M3.5.8 |
|
||||
| 5 | Skills | M4.x | 3 | 0 | 0 | 3 | ⬜ M4.3 |
|
||||
| 1 | Read-only spine | M0.x | 8 | 8 | 0 | 0 | ✅ M0.8 |
|
||||
| 2 | Gated loop at L1 | M1.x | 8 | 8 | 0 | 0 | ✅ M1.8 |
|
||||
| 3 | Projections | M2.x | 8 | 5 | 0 | 3 | ✅ M2.8 (M2.1, M2.3, M2.4, M2.5 ✅) |
|
||||
| 4 | L2 synthesis + retrieval | M3.x | 4 | 4 | 0 | 0 | ✅ M3.4 |
|
||||
| 4.5 | Distributed API Layer | M3.5.x | 9 | 0 | 0 | 9 | ⬜ M3.5.8 |
|
||||
| 5 | Skills | M4.x | 3 | 0 | 1 | 2 | ⬜ M4.3 |
|
||||
| 5.5 | Reference corpora | M3.6.x | 6 | 0 | 0 | 6 | ⬜ M3.6.6 |
|
||||
| 5.6 | Tool context | M3.7.x | 6 | 0 | 2 | 4 | ⬜ M3.7.6 |
|
||||
| 6 | Post-training | M5.x | 6 | 0 | 0 | 6 | ⬜ M5.6 |
|
||||
| 7 | agent-manager migration | M6.x | 6 | 0 | 0 | 6 | ⬜ M6.6 |
|
||||
| | **Total** | | **51** | **0** | **0** | **51** | 0/8 green |
|
||||
| | **Total** | | **64** | **33** | **3** | **28** | 4/10 green |
|
||||
|
||||
**Where the line is — 2026-08-20.** Nothing started. No crate exists yet: there
|
||||
is no `Cargo.toml` under `memory/`, so every task below is design only. M0.1 is
|
||||
the first thing that has to happen. `M2.2` (the CNPG manifest), `M5.4` (vLLM
|
||||
with LoRA), `M3.5.x` (API layer), and all of `M6.x` (agent-manager migration)
|
||||
are homelab/infra work with no dependency on the preceding phase and can start
|
||||
in parallel at any time, subject to their specific gate dependencies.
|
||||
**Where the line is — 2026-08-22.** M0 is complete (8/8 tasks, 35 tests passing,
|
||||
M0.8 gate green). M1 is next. Significant early work exists for M3.7 and M4:
|
||||
`mem-core/src/lesson.rs` (871 lines, 17 unit tests) implements signature
|
||||
extraction, normalisation, tier-based lookup, lesson derivation, and SKILL.md
|
||||
rendering — advancing M3.7.7, M3.7.5, and M4.1 to 🟡. `mem-cli/src/lessons_cmd.rs`
|
||||
(223 lines) provides working `mem capture|resolve|lookup|materialize` commands.
|
||||
|
||||
`M2.2` (the CNPG manifest), `M5.4` (vLLM with LoRA), `M3.5.x` (API layer), and
|
||||
all of `M6.x` (agent-manager migration) are homelab/infra work with no dependency
|
||||
on the preceding phase and can start in parallel at any time, subject to their
|
||||
specific gate dependencies.
|
||||
|
||||
**M6 is a different repo, not a dependency of M0-M5.** It migrates
|
||||
`github.com/Riotpiaole/agent-manager`'s session store (a separate Go CLI tool,
|
||||
@@ -90,14 +97,14 @@ and chunks sanely before spending inference on it.
|
||||
|
||||
| Task | Title | Size | Flags | Status |
|
||||
|---|---|---|---|---|
|
||||
| [M0.1](M0.1-cargo-workspace.md) | Cargo workspace + crate skeletons | S | — | ⬜ |
|
||||
| [M0.2](M0.2-domain-types.md) | Domain types and sha256 identity | S | — | ⬜ |
|
||||
| [M0.3](M0.3-recordsource-and-chunkpolicy.md) | `RecordSource` trait + `ChunkPolicy` | M | — | ⬜ |
|
||||
| [M0.4](M0.4-tokenizer-sizing.md) | Tokenizer-backed chunk sizing | M | — | ⬜ |
|
||||
| [M0.5](M0.5-pi-session-adapter.md) | pi session adapter | M | — | ⬜ |
|
||||
| [M0.6](M0.6-claude-transcript-adapter.md) | Claude transcript adapter | S | — | ⬜ |
|
||||
| [M0.7](M0.7-ingest-dry-run.md) | `mem ingest --dry-run` | S | — | ⬜ |
|
||||
| [M0.8](M0.8-m0-gate.md) | **M0 composition gate** | M | gate | ⬜ |
|
||||
| [M0.1](M0.1-cargo-workspace.md) | Cargo workspace + crate skeletons | S | — | ✅ |
|
||||
| [M0.2](M0.2-domain-types.md) | Domain types and sha256 identity | S | — | ✅ |
|
||||
| [M0.3](M0.3-recordsource-and-chunkpolicy.md) | `RecordSource` trait + `ChunkPolicy` | M | — | ✅ |
|
||||
| [M0.4](M0.4-tokenizer-sizing.md) | Tokenizer-backed chunk sizing | M | — | ✅ |
|
||||
| [M0.5](M0.5-pi-session-adapter.md) | pi session adapter | M | — | ✅ |
|
||||
| [M0.6](M0.6-claude-transcript-adapter.md) | Claude transcript adapter | S | — | ✅ |
|
||||
| [M0.7](M0.7-ingest-dry-run.md) | `mem ingest --dry-run` | S | — | ✅ |
|
||||
| [M0.8](M0.8-m0-gate.md) | **M0 composition gate** | M | gate | ✅ |
|
||||
|
||||
## 2 — Gated loop at L1 · M1.x
|
||||
|
||||
@@ -129,10 +136,10 @@ and chunks sanely before spending inference on it.
|
||||
|
||||
| Task | Title | Size | Flags | Status |
|
||||
|---|---|---|---|---|
|
||||
| [M3.1](M3.1-l2-synthesis.md) | L2 synthesis pass | M | — | ⬜ |
|
||||
| [M3.2](M3.2-rerank-client.md) | Rerank client | S | — | ⬜ |
|
||||
| [M3.3](M3.3-mem-query.md) | `mem query` with provenance | M | — | ⬜ |
|
||||
| [M3.4](M3.4-m3-gate.md) | **M3 composition gate** | M | gate | ⬜ |
|
||||
| [M3.1](M3.1-l2-synthesis.md) | L2 synthesis pass | M | — | ✅ |
|
||||
| [M3.2](M3.2-rerank-client.md) | Rerank client | S | — | ✅ |
|
||||
| [M3.3](M3.3-mem-query.md) | `mem query` with provenance | M | — | ✅ |
|
||||
| [M3.4](M3.4-m3-gate.md) | **M3 composition gate** | M | gate | ✅ |
|
||||
|
||||
## 4.5 — Distributed API Layer · M3.5.x
|
||||
|
||||
@@ -140,23 +147,84 @@ Homelab frontend integration: HTTP facade via `api.riotpiao.com`. Runs in parall
|
||||
|
||||
| Task | Title | Size | Flags | Status |
|
||||
|---|---|---|---|---|
|
||||
| [M3.5.1](M3.5.1-http-server.md) | HTTP server + router, Kong auth, metrics | M | — | ⬜ |
|
||||
| [M3.5.2](M3.5.2-ingest-endpoint.md) | POST /ingest async queue, idempotency | M | — | ⬜ |
|
||||
| [M3.5.3](M3.5.3-query-endpoint.md) | GET /query HNSW + rerank + edge-walk | M | — | ⬜ |
|
||||
| [M3.5.4](M3.5.4-query-federation.md) | Query federation across projects | M | — | ⬜ |
|
||||
| [M3.5.5](M3.5.5-skills-endpoint.md) | GET /skills and /skills/{name} | M | — | ⬜ |
|
||||
| [M3.5.6](M3.5.6-projects-endpoint.md) | GET /projects and /projects/{id}/status | S | — | ⬜ |
|
||||
| [M3.5.7](M3.5.7-rate-limiting.md) | Rate limiting + idempotency by sha256 | M | — | ⬜ |
|
||||
| [M3.5.8](M3.5.8-m3.5-gate.md) | **M3.5 composition gate** | M | gate | ⬜ |
|
||||
| [M3.5.1](M3.5.1-http-server.md) | HTTP server + router, Kong auth, metrics | M | — | ✅ |
|
||||
| [M3.5.2](M3.5.2-ingest-endpoint.md) | POST /ingest async queue | M | — | ✅ |
|
||||
| [M3.5.3](M3.5.3-query-endpoint.md) | GET /query HNSW+rerank | M | — | ✅ |
|
||||
| [M3.5.4](M3.5.4-query-federation.md) | Query federation | M | — | ✅ |
|
||||
| [M3.5.5](M3.5.5-skills-endpoint.md) | GET /skills endpoint | M | — | ✅ |
|
||||
| [M3.5.6](M3.5.6-projects-endpoint.md) | GET /projects endpoint | S | — | ✅ |
|
||||
| [M3.5.7](M3.5.7-rate-limiting.md) | Rate limiting | M | — | ✅ |
|
||||
| [M3.5.8](M3.5.8-m3.5-gate.md) | **M3.5 composition gate** | M | gate | ⏳ |
|
||||
| [M3.5.9](M3.5.9-git-aware-references.md) | Git-aware references: lookup by code location | M | — | ⬜ |
|
||||
|
||||
## 5 — Skills · M4.x
|
||||
|
||||
| Task | Title | Size | Flags | Status |
|
||||
|---|---|---|---|---|
|
||||
| [M4.1](M4.1-skill-draft.md) | `mem skill draft` | M | — | ⬜ |
|
||||
| [M4.1](M4.1-skill-draft.md) | `mem skill draft` | M | — | 🟡 `render_skill()` in `lesson.rs`, `mem materialize` in CLI |
|
||||
| [M4.2](M4.2-derived-filter.md) | `derived: true` ingest filter | M | — | ⬜ |
|
||||
| [M4.3](M4.3-m4-gate.md) | **M4 composition gate** | M | gate | ⬜ |
|
||||
|
||||
## 5.5 — Reference corpora · M3.6.x
|
||||
|
||||
Documentation the local models are weak at — `kubectl`, `tea` — made retrievable
|
||||
as level **R**: embedded and indexed, never evidence. Ids are `M3.6.x` and stay
|
||||
`M3.6.x`; the phase sits here rather than at 4.6 because [M3.6.4](M3.6.4-reference-cycle-guard.md)
|
||||
extends M4.2's matcher instead of duplicating it, and because skills are the
|
||||
better answer to the same problem and should exist first.
|
||||
|
||||
**The load-bearing property is a negative one.** Adding a corpus must not change
|
||||
update-rate, must not change default query output, and must not put an R node in
|
||||
any provenance chain. R bypasses the recurrence structurally — `run_loop` needs a
|
||||
`Query` and a corpus has none — not by a flag. [M3.6.6](M3.6.6-m3.6-gate.md)
|
||||
asserts M1.8's numbers are *unchanged*, not merely still-passing, because
|
||||
documentation fed to the gate would lower update-rate and make M1.8 easier to
|
||||
clear while the memory got worse.
|
||||
|
||||
| Task | Title | Size | Flags | Status |
|
||||
|---|---|---|---|---|
|
||||
| [M3.6.1](M3.6.1-doc-corpus-source.md) | `DocCorpusSource` + heading chunking | M | — | ⬜ |
|
||||
| [M3.6.2](M3.6.2-level-r-storage.md) | Level R: log, index, vault, rebuild parity | M | — | ⬜ |
|
||||
| [M3.6.3](M3.6.3-mem-ref-cli.md) | `mem ref` — replace-on-change corpus management | M | — | ⬜ |
|
||||
| [M3.6.4](M3.6.4-reference-cycle-guard.md) | Reference text cannot re-enter as evidence | M | — | ⬜ |
|
||||
| [M3.6.5](M3.6.5-query-levels-and-floor.md) | Query: filter-then-recall, R opt-in, floor | M | — | ⬜ |
|
||||
| [M3.6.6](M3.6.6-m3.6-gate.md) | **M3.6 composition gate** | M | gate | ⬜ |
|
||||
|
||||
## 5.6 — Tool context · M3.7.x
|
||||
|
||||
Answers *"what do we already know about this failure, tool or task"* over HTTP.
|
||||
Consumers are `pi`, curl, or an MCP call — nothing here executes a tool, and
|
||||
nothing here serves a tool catalog, because every caller already holds its own
|
||||
MCP schemas.
|
||||
|
||||
**Three tiers, cheapest first.** An exact hash hit on a normalised failure
|
||||
signature means *this happened here before*; a symptom-vector match means
|
||||
*something similar did*; the R corpus means *nobody here has hit this, read the
|
||||
docs*. The tier is a field in the response, because those three answers must not
|
||||
arrive in the same register.
|
||||
|
||||
**The two tasks that make it work are the least obvious ones.**
|
||||
[M3.7.7](M3.7.7-signature-extraction.md) decides whether tier 1 ever fires — if
|
||||
normalisation leaves a timestamp in, the same failure never hashes twice and the
|
||||
system silently degrades to vector search.
|
||||
[M3.7.8](M3.7.8-symptom-projection.md) closes the gap between memories written as
|
||||
answers and queries that arrive as stack traces. Both fail invisibly, which is why
|
||||
[M3.7.6](M3.7.6-m3.7-gate.md) ablates them rather than trusting an end-to-end
|
||||
green.
|
||||
|
||||
Ids are `M3.7.x` and frozen. `M3.7.1` and `M3.7.2` were a tool-catalog surface,
|
||||
deleted before implementation once the consumer was settled; their ids are retired
|
||||
rather than reused.
|
||||
|
||||
| Task | Title | Size | Flags | Status |
|
||||
|---|---|---|---|---|
|
||||
| [M3.7.3](M3.7.3-skill-matching.md) | `GET /memory/skills?task=` — match a subset | M | — | ⬜ |
|
||||
| [M3.7.4](M3.7.4-context-endpoint.md) | `/memory/context` — three-tier lookup | M | — | ⬜ |
|
||||
| [M3.7.5](M3.7.5-tool-failure-learning.md) | `tool-failures` standing query | M | — | 🟡 `derive_lessons()` + `tool_of_cmd()` in `lesson.rs`, `mem resolve` in CLI |
|
||||
| [M3.7.6](M3.7.6-m3.7-gate.md) | **M3.7 composition gate** | M | gate | ⬜ |
|
||||
| [M3.7.7](M3.7.7-signature-extraction.md) | Failure signature extraction + normalisation | M | — | 🟡 `extract()` + `normalise()` in `lesson.rs` (10 unit tests passing) |
|
||||
| [M3.7.8](M3.7.8-symptom-projection.md) | Symptom projection at ingest | M | — | ⬜ |
|
||||
|
||||
## 6 — Post-training · M5.x
|
||||
|
||||
Python, separate from the Rust workspace. The boundary is the JSONL log.
|
||||
|
||||
Reference in New Issue
Block a user