Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .cursor/skills/SKILL-GRAPH.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

**Audience:** model. Wire SSOT: [memnet-format](memnet-format/SKILL.md) and `docs/grammar/gql-wire-profile.md`. Do **not** treat this file as the session graph.

This folder **vendors** the MemNet stack. Hatch **0.19.4** (last PyPI **`memnet-llm==0.19.3`** until upload). Cue then `pin_map`; `find` if ego unknown. **GQL only.** Package SemVer `a.b.c` (claim / usage-method revision / same-method cut): `docs/ROADMAP.md`. Do not invent 0.20.
This folder **vendors** the MemNet stack. Hatch and PyPI are both **0.19.4** (`memnet-llm==0.19.4`). Cue then `pin_map`; `find` if ego unknown. **GQL only.** Package SemVer `a.b.c` (claim / usage-method revision / same-method cut): `docs/ROADMAP.md`. Do not invent 0.20.

## Routing

Expand Down
2 changes: 1 addition & 1 deletion .cursor/skills/memnet-reference/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ Repo skill for **building** MemNet in **this** repository. Doctrine SSOT is `doc

This checkout **vendors** agent skills under `.cursor/skills/` (core: `memnet-use` + MCP/format/nested/multitask). Load those when **using** MemNet; load **this** skill only when changing the engine, generic MCP, grammar, product SysML, or packaging.

**Product:** Hatch **0.19.4** (CLI `memnet`). PyPI **`memnet-llm==0.19.3`** until 0.19.4 upload. Version map: `docs/ROADMAP.md`. Shape: `docs/SHAPE.md`. **1.0** = 0.5–0.8 claimed (do not tag from this skill).
**Product:** Hatch and PyPI are both **0.19.4** (CLI `memnet`; `memnet-llm==0.19.4`). Version map: `docs/ROADMAP.md`. Shape: `docs/SHAPE.md`. **1.0** = 0.5–0.8 claimed (do not tag from this skill).

**`a.b.c` (ROADMAP law).** `a` = claim / generation (`0` = 1.0 unclaimed; `1` = claim of 0.5–0.8). `a` moves only if the contract breaks (Recall=`pin_map` / Commit=`mutate`, GraphElement identity, GQL-only wire). `b` = usage-method revision (new required loop step, new product tool, cue/outline/identity law, new goldfish verb). Historical extras **0.10–0.19** were `b`. N-server (#47) is not a `b`. `c` = same-method cut (honesty, leftover naming, docs/skills, wheel/tag, caps, façade, faster same `cue → pin_map → mutate`). Efficiency on the current loop is **`0.19.c`**, not `0.20`. Do not invent a 0.20 extra. Do not claim 1.0.

Expand Down
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ LLM hub for this system repo. Prefer in-repo skills and docs over ad-hoc inventi

## Mission

**MemNet** (Net of Memory) is **mission working memory** — a session graph (GQL **node**/vertex, **edge**/relationship, **property**) **between** LLM call pipelines and data search, not the corpus and not GraphRAG. Agents read a bounded **live pin map** each turn and write in the same **GQL (openCypher-shaped)** family — redefined **Write = display** via shaped subgraph emit ([`docs/grammar/gql-wire-profile.md`](docs/grammar/gql-wire-profile.md)). In-session recall is **serial**: kind/keyword cue, then `pin_map` neighbourhood. Primary read: MCP `pin_map` / CLI `query pin-map`; leftover `query_warm` / `query warm` are leftover aliases. Aims (MN-REQ-00): save wall-clock time and tokens while keeping factual accuracy. Aids **system**, **programme**, **software**, **firmware**, **hardware**, and **documentation**. Transport: **in-process first** (single-agent; TCP fallback). **Multitask** requires TCP serve or streamable-http MCP — see Multitask policy below. This repo is **engine + generic memnet-mcp** only — novel-writer dropped. Repo product **0.19.4** (Hatch SSOT); last published PyPI **`memnet-llm==0.19.3`** until 0.19.4 is uploaded. **1.0** = 0.5–0.8 claimed (unclaimed). See `README.md`, [`docs/SHAPE.md`](docs/SHAPE.md), and `docs/grammar/`.
**MemNet** (Net of Memory) is **mission working memory** — a session graph (GQL **node**/vertex, **edge**/relationship, **property**) **between** LLM call pipelines and data search, not the corpus and not GraphRAG. Agents read a bounded **live pin map** each turn and write in the same **GQL (openCypher-shaped)** family — redefined **Write = display** via shaped subgraph emit ([`docs/grammar/gql-wire-profile.md`](docs/grammar/gql-wire-profile.md)). In-session recall is **serial**: kind/keyword cue, then `pin_map` neighbourhood. Primary read: MCP `pin_map` / CLI `query pin-map`; leftover `query_warm` / `query warm` are leftover aliases. Aims (MN-REQ-00): save wall-clock time and tokens while keeping factual accuracy. Aids **system**, **programme**, **software**, **firmware**, **hardware**, and **documentation**. Transport: **in-process first** (single-agent; TCP fallback). **Multitask** requires TCP serve or streamable-http MCP — see Multitask policy below. This repo is **engine + generic memnet-mcp** only — novel-writer dropped. Repo product **0.19.4** (Hatch SSOT and PyPI **`memnet-llm==0.19.4`**; [#148](https://github.com/chouswei/MemNet/pull/148) nickname-off-`pin_map` honesty `c` is published). **1.0** = 0.5–0.8 claimed (unclaimed). See `README.md`, [`docs/SHAPE.md`](docs/SHAPE.md), and `docs/grammar/`.

## Where to look

Expand Down
7 changes: 4 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ This project uses Semantic Versioning as **interpreted for MemNet**: package `a.
## [0.19.4] - 2026-09-04

### Changed
- **Honesty `c` — nickname `id` off `pin_map` emit** — Shaped `pin_map` (outline, CueConflict, find hits, export) **MUST NOT** print nickname property `id` on nodes or edges. Same effect as `DROP_KEYS={id,hid}` on the wire text. Hid already stays off. Ranking still excludes nickname from the rank key ([#147](https://github.com/chouswei/MemNet/pull/147)). Cue / find / `match_nickname` MAY still look up a nickname the agent cues by — that is not identity and not emit. STM Prediction 3 generation half: RAW pin_map with nickname on wire failed under hid/CREATE-order/nickname permutation; canonical strip of `id`/`hid` passed. Package **0.19.4** patch on **0.19**. Numbered extras **0.10–0.19** unchanged. No 0.20 extra. `operatorCount` stays 2. Caps stay hard. Do not dump \(S\). Do not invent `rag_query`. **1.0** stays unclaimed. Git tag `v0.19.4` after merge.
- **Package identity 0.19.4** — Hatch / `project.toml` / `memnet.__version__` honesty cut on **0.19**. Last published PyPI wheel remains **`memnet-llm==0.19.3`** until upload.
- **Honesty `c` — nickname `id` off `pin_map` emit** — Shaped `pin_map` (outline, CueConflict, find hits, export) **MUST NOT** print nickname property `id` on nodes or edges. Same effect as `DROP_KEYS={id,hid}` on the wire text. Hid already stays off. Ranking still excludes nickname from the rank key ([#147](https://github.com/chouswei/MemNet/pull/147)). Cue / find / `match_nickname` MAY still look up a nickname the agent cues by — that is not identity and not emit. STM Prediction 3 generation half: RAW pin_map with nickname on wire failed under hid/CREATE-order/nickname permutation; canonical strip of `id`/`hid` passed. Package **0.19.4** patch on **0.19**. Numbered extras **0.10–0.19** unchanged. No 0.20 extra. `operatorCount` stays 2. Caps stay hard. Do not dump \(S\). Do not invent `rag_query`. **1.0** stays unclaimed. Published as **`memnet-llm==0.19.4`**. Git tag `v0.19.4` on the [#148](https://github.com/chouswei/MemNet/pull/148) merge (`1242c467`).
- **Package identity 0.19.4** — Hatch / `project.toml` / `memnet.__version__` honesty cut on **0.19**. Hatch and PyPI are both **0.19.4**; [#148](https://github.com/chouswei/MemNet/pull/148) nickname-off-`pin_map` honesty `c` is published.

## [0.19.3] - 2026-08-20

Expand Down Expand Up @@ -684,7 +684,8 @@ Initial public release.
- Caps are configurable via `MEMNET_MAX_*` env vars.
- Sessions live in process memory only. On `serve` restart, all sessions are gone unless saved via `session save`.

[Unreleased]: https://github.com/chouswei/MemNet/compare/v0.19.0...HEAD
[Unreleased]: https://github.com/chouswei/MemNet/compare/v0.19.4...HEAD
[0.19.4]: https://github.com/chouswei/MemNet/compare/v0.19.3...v0.19.4
[0.19.0]: https://github.com/chouswei/MemNet/compare/v0.9.0...v0.19.0
[0.9.0]: https://github.com/chouswei/MemNet/compare/v0.8.0...v0.9.0
[0.4.1]: https://github.com/chouswei/MemNet/compare/v0.4.0...v0.4.1
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@ MemNet sits **between** LLM call pipelines and data search (MN-REQ-00). Corpus l

This repo ships the engine + generic MCP only. **Product shape:** [`docs/SHAPE.md`](docs/SHAPE.md). **Pinned role:** working set of **a few technical documents** (atoms and locators, not PDF bytes) plus live `TSK`/`USR`/`MOD`, re-read fast. Tens of MiB typical; **hundreds of MiB still in role**; gigabytes = RAG/cabinet.

Package **`memnet-llm`** (CLI **`memnet`**). Python ≥ 3.11. Repo product **0.19.4**. Last published PyPI **`memnet-llm==0.19.3`** until 0.19.4 upload. **1.0** stays unclaimed. SemVer meaning (`a.b.c`): [`docs/ROADMAP.md`](docs/ROADMAP.md).
Package **`memnet-llm`** (CLI **`memnet`**). Python ≥ 3.11. Hatch and PyPI are both **0.19.4** (`memnet-llm==0.19.4`; [#148](https://github.com/chouswei/MemNet/pull/148) nickname-off-`pin_map` honesty `c`). **1.0** stays unclaimed. SemVer meaning (`a.b.c`): [`docs/ROADMAP.md`](docs/ROADMAP.md).

## Install + quick CLI

```bash
pip install memnet-llm
# or pin: pip install memnet-llm==0.19.3
# or pin: pip install memnet-llm==0.19.4
# optional extras (drivers only — not AgensGraph/Neo4j servers):
# pip install 'memnet-llm[mcp]'
# pip install 'memnet-llm[agensgraph]'
Expand Down
4 changes: 2 additions & 2 deletions docs/LLM-GUIDE.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# MemNet — Agent Playbook (for LLMs)

**Class:** developers — MemNet engine / MCP / GQL wire / agent operating doctrine. Index: [`docs/README.md`](README.md). Product shape: [`SHAPE.md`](SHAPE.md). **Product 0.19.4.** **1.0** = 0.5–0.8 claimed (unclaimed). Last PyPI **`memnet-llm==0.19.3`**. SemVer `a.b.c`: [`ROADMAP.md`](ROADMAP.md).
**Class:** developers — MemNet engine / MCP / GQL wire / agent operating doctrine. Index: [`docs/README.md`](README.md). Product shape: [`SHAPE.md`](SHAPE.md). **Product 0.19.4.** Hatch and PyPI are both **`memnet-llm==0.19.4`**. **1.0** = 0.5–0.8 claimed (unclaimed). SemVer `a.b.c`: [`ROADMAP.md`](ROADMAP.md).

**Dialect teach = GQL only** — [`grammar/gql-wire-profile.md`](grammar/gql-wire-profile.md). ADR: [`adr/ADR-001-gql-agent-wire.md`](adr/ADR-001-gql-agent-wire.md).
**M2 shipped:** engine/MCP accept openCypher-shaped GQL and emit shaped `pin_map`. Do **not** teach Layer / Tier A / `@TAG` pipe as agent wire.
Expand Down Expand Up @@ -66,7 +66,7 @@ Formal wire: [`grammar/gql-wire-profile.md`](grammar/gql-wire-profile.md).

| Mode | When | Setup |
|------|------|-------|
| **MCP in-process** | Cursor / local agents (**primary**) | Register `memnet-mcp` in `.cursor/mcp.json`; extra `[mcp]`. `pip install 'memnet-llm[mcp]'` (Hatch **0.19.4**; last PyPI **0.19.3**). **No** `memnet serve` |
| **MCP in-process** | Cursor / local agents (**primary**) | Register `memnet-mcp` in `.cursor/mcp.json`; extra `[mcp]`. `pip install 'memnet-llm[mcp]'` (Hatch + PyPI **0.19.4**). **No** `memnet serve` |
| **CLI + serve** | Scripts, TCP shared process | Terminal 1: `memnet serve`; Terminal 2: CLI with `MEMNET_SESSION` |
| **MCP streamable-http** | Remote shared graph | `memnet-mcp --transport streamable-http` on `:18766/mcp` |

Expand Down
8 changes: 4 additions & 4 deletions docs/ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@

**Audience:** product developers. Dialect teach = **GQL** ([`grammar/gql-wire-profile.md`](grammar/gql-wire-profile.md)). Product shape: [`SHAPE.md`](SHAPE.md). British English.

**Package now:** Hatch **0.19.4**. Numbered extras **0.10–0.19** are in this package (unchanged). PyPI **`memnet-llm==0.19.3`** is the last published wheel until 0.19.4 upload. GraphGlot parse front is on master (#109 @ 73a63c9b). Extra **0.14** claims `liveNeo4jClaimed=true`. **1.0** is still unclaimed (0.5–0.8).
**Package now:** Hatch and PyPI are both **0.19.4** (`memnet-llm==0.19.4`). Numbered extras **0.10–0.19** are in this package (unchanged). [#148](https://github.com/chouswei/MemNet/pull/148) nickname-off-`pin_map` honesty `c` is published. GraphGlot parse front is on master (#109 @ 73a63c9b). Extra **0.14** claims `liveNeo4jClaimed=true`. **1.0** is still unclaimed (0.5–0.8).

**Last updated:** 2026-09-04 (`a.b.c` law locked; package **0.19.4** honesty `c` — nickname `id` off `pin_map` emit; extras **0.10–0.19** unchanged; last PyPI **0.19.3** until upload; ranking honesty [#147](https://github.com/chouswei/MemNet/pull/147); do not claim **1.0**; do not invent a **0.20** extra).
**Last updated:** 2026-09-04 (`a.b.c` law locked; package **0.19.4** honesty `c` — nickname `id` off `pin_map` emit; extras **0.10–0.19** unchanged; Hatch + PyPI **0.19.4**; ranking honesty [#147](https://github.com/chouswei/MemNet/pull/147); do not claim **1.0**; do not invent a **0.20** extra).

Patch notes: [`../CHANGELOG.md`](../CHANGELOG.md). CHANGELOG still follows Keep a Changelog. This file is how MemNet **interprets** SemVer — not a silent switch to npm-strict major=breaking for 0.x extras.

Expand Down Expand Up @@ -99,8 +99,8 @@ Handoff = **session id** (+ cue / write scope). Peers **re-`pin_map`** from labe
| **0.7.0** | Live AgensGraph hydrate/flush; `liveCabinetClaimed=true`. Server not vendored. Fake + skip unless `MEMNET_AGENSGRAPH_URL` | **Shipped** (`v0.7.0`) |
| **0.8.0** | GQL-only **teach** + product **shape for people** (`SHAPE.md`, playbook, application-note contract, Multitask honesty). Docs only. **No** engine cut. Cabinet stays claimed | **Shipped** (`v0.8.0`) |
| **0.9.0** | Neo4j `DurableStoreAdapter` client (`memnet-llm[neo4j]`); factory both-URL rule; [`cabinet/neo4j-buffer.md`](cabinet/neo4j-buffer.md). Live round-trip claimed later as extra **0.14**. Cabinet extra, **not** a 1.0 gate | **Shipped** (`v0.9.0` era; extras later packaged as 0.19.0) |
| **0.10–0.19** | Numbered extras (table below). Each row is one `b` (usage-method revision). Same pattern as 0.9: **not** 1.0 gates | **Packaged** (Hatch **0.19.3**; extras first shipped as 0.19.0) |
| **1.0.0** | **Claim** of **0.5 + 0.6 + 0.7 + 0.8**. Shape mature for people. Not GraphRAG. Not cabinet-only. Not a new engine. This is `a=1` | **Claim when coordinator tags** — package / PyPI **0.19.3** does not claim 1.0 |
| **0.10–0.19** | Numbered extras (table below). Each row is one `b` (usage-method revision). Same pattern as 0.9: **not** 1.0 gates | **Packaged** (Hatch + PyPI **0.19.4**; extras first shipped as 0.19.0) |
| **1.0.0** | **Claim** of **0.5 + 0.6 + 0.7 + 0.8**. Shape mature for people. Not GraphRAG. Not cabinet-only. Not a new engine. This is `a=1` | **Claim when coordinator tags** — package / PyPI **0.19.4** does not claim 1.0 |
| **Later** | Grammar Open / hosted product / leftover ACL; N-server research (#47). GraphGlot parse-front is **shipped**. If **1.0 tags first**, remaining extras become **1.1, 1.2, …** with the same owns (`b` after the claim) | **Out** of 1.0 |

**1.0 MAY ship from 0.9** (claim only). **0.10+ MAY ship before 1.0** as extras (`b` on `a=0`). Do not wait for the other. User-pack GQL rewrite is **sibling** (`chouswei/cursor-user-skills`), not this repo.
Expand Down
2 changes: 1 addition & 1 deletion docs/SHAPE.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ Do not call MemNet a “shaped RAG” or a “shaped Cypher proxy”.

**0.8.0** is this shape **taught for people** in-repo: this file, GQL-only playbook, application-note contract, Multitask honesty (RSV + Path-B ingest shipped; full ACL modes still to-be).

**1.0.0** is **0.5 + 0.6 + 0.7 + 0.8** claimed — the shape is mature for people: one GQL dialect, goldfish `pin_map`, gated mutate, cue-then-shape (including find when there is no ego), optional **proven** cabinet so \(S\) can outlive a process. Not GraphRAG. Not cabinet-only. Map and **`a.b.c` law:** [`ROADMAP.md`](ROADMAP.md). **Honest install:** current package is **0.19.4** (extras 0.10–0.19; Neo4j client from 0.9; live claimed as extra **0.14**). Last published PyPI **`memnet-llm==0.19.3`** until 0.19.4 upload. Optional extras `[mcp]`, `[agensgraph]`, `[neo4j]` (drivers only). **1.0** stays unclaimed.
**1.0.0** is **0.5 + 0.6 + 0.7 + 0.8** claimed — the shape is mature for people: one GQL dialect, goldfish `pin_map`, gated mutate, cue-then-shape (including find when there is no ego), optional **proven** cabinet so \(S\) can outlive a process. Not GraphRAG. Not cabinet-only. Map and **`a.b.c` law:** [`ROADMAP.md`](ROADMAP.md). **Honest install:** Hatch and PyPI are both **0.19.4** (`memnet-llm==0.19.4`; extras 0.10–0.19; Neo4j client from 0.9; live claimed as extra **0.14**; [#148](https://github.com/chouswei/MemNet/pull/148) nickname-off-`pin_map` honesty `c` is published). Optional extras `[mcp]`, `[agensgraph]`, `[neo4j]` (drivers only). **1.0** stays unclaimed.

---

Expand Down
Loading