Skip to content

Instantly share code, notes, and snippets.

@sam-saffron-jarvis
Last active April 7, 2026 20:50
Show Gist options
  • Select an option

  • Save sam-saffron-jarvis/a1a9ff984c352c6ce1ab8083e4303026 to your computer and use it in GitHub Desktop.

Select an option

Save sam-saffron-jarvis/a1a9ff984c352c6ce1ab8083e4303026 to your computer and use it in GitHub Desktop.

MemPalace critical review (repo audit + runnable demos)

Repo: https://github.com/milla-jovovich/mempalace
Commit reviewed: 1782628
Date: 2026-04-08

I cloned the repo, installed it in a fresh uv venv, ran the tests, built the package, and then ran a set of smoke tests and one fuller end-to-end example to validate the README and surface rough edges.

What passed

cd /root/source/mempalace
uv venv .venv
. .venv/bin/activate
uv pip install -e '.[dev]'
pytest -q
python -m build

Output:

.........                                                                [100%]
9 passed in 0.81s
...
Successfully built mempalace-3.0.0.tar.gz and mempalace-3.0.0-py3-none-any.whl

So: real project, installs fine, tests pass, builds fine. Not fake.


Short verdict

The core tool works, but the repo makes bigger claims than the code really earns.

The pattern that came up repeatedly:

  • decent working CLI core
  • thin test surface relative to the README swagger
  • architecture language that is more elaborate than the implementation
  • benchmark story that is not nearly as clean as the README presentation suggests
  • some very visible quality-control misses

Proper end-to-end example: 60 facts in one transcript

To show what the tool actually does when given a substantial amount of memory-like material, I created a synthetic transcript with 30 exchanges / 60 facts about a fictional founder and company.

The full transcript is included in this gist as nora_profile.md.

Ingest command

cd /root/source/mempalace
. .venv/bin/activate
PAL=/root/source/mempalace-review-artifacts/e2e-palace
rm -rf "$PAL"
mempalace --palace "$PAL" mine /root/source/mempalace-review-artifacts/e2e --mode convos --wing nora-demo
mempalace --palace "$PAL" status
mempalace --palace "$PAL" wake-up --wing nora-demo

Ingest output

=======================================================
  MemPalace Mine — Conversations
=======================================================
  Wing:    nora-demo
  Source:  /root/source/mempalace-review-artifacts/e2e
  Files:   1
  Palace:  /root/source/mempalace-review-artifacts/e2e-palace
───────────────────────────────────────────────────────

  ✓ [   1/1] nora_profile.md                                    +30

=======================================================
  Done.
  Files processed: 1
  Files skipped (already filed): 0
  Drawers filed: 30

  By room:
    technical            1 files

  Next: mempalace search "what you're looking for"
=======================================================

=======================================================
  MemPalace Status — 30 drawers
=======================================================

  WING: nora-demo
    ROOM: technical               30 drawers

=======================================================

What this shows immediately

Two things are true at once:

  1. It works: the transcript was chunked into 30 drawers and stored.
  2. The rooming is crude: all 30 facts — personal life, pricing, outages, roadmap, travel habits — got dumped into technical.

That is a decent demonstration of the repo in miniature. The core filing/search loop is real; the higher-level semantic organization is much flimsier than the README rhetoric.

Search examples that work

These are straight CLI runs against the mined 60-fact transcript.

1) Dog name

mempalace --palace "$PAL" search "What is Nora's dog's name?" --results 1
[1] nora-demo / technical
    Source: nora_profile.md
    Match:  0.426

    > What is Nora's birthday and pet?
    Nora was born on 14 February 1991 and her dog is a border collie named Basil.

2) Where she lives

mempalace --palace "$PAL" search "Where does Nora live?" --results 1
[1] nora-demo / technical
    Source: nora_profile.md
    Match:  0.239

    > Who is Nora Levin?
    Nora Levin is the founder of Northstar Labs and she lives in Hobart, Tasmania.

3) Database migration

mempalace --palace "$PAL" search "Which database replaced MongoDB?" --results 1
[1] nora-demo / technical
    Source: nora_profile.md
    Match:  -0.296

    > What stack does Lantern use now?
    Lantern moved from MongoDB to PostgreSQL and the API is written in Go.

Retrieval is correct. Presentation is still stupid: the result is right, but the printed match score is negative.

4) Payroll owner

mempalace --palace "$PAL" search "Who signs payroll?" --results 1
[1] nora-demo / technical
    Source: nora_profile.md
    Match:  0.253

    > Who are the executives and what do they do?
    Priya Shah is the COO and she signs payroll every second Tuesday.

5) Bug ownership

mempalace --palace "$PAL" search "Which customer found the March CSV export bug?" --results 1
[1] nora-demo / technical
    Source: nora_profile.md
    Match:  0.434

    > Which customer found a bug and what bug was it?
    Fern Health found the March CSV export bug and the bug duplicated discount rows.

6) Outage duration

mempalace --palace "$PAL" search "How long did the May outage last?" --results 1
[1] nora-demo / technical
    Source: nora_profile.md
    Match:  0.334

    > What happened during the May outage?
    The May outage lasted 47 minutes and it started with a bad RabbitMQ rollout.

7) Conference talk title

mempalace --palace "$PAL" search "What conference talk is Nora giving?" --results 1
[1] nora-demo / technical
    Source: nora_profile.md
    Match:  0.529

    > What conference plans does Nora have?
    Nora is speaking at SaaS Down Under in July and her talk is titled Boring Systems Win.

8) Passport expiry

mempalace --palace "$PAL" search "When does Nora's passport expire?" --results 1
[1] nora-demo / technical
    Source: nora_profile.md
    Match:  0.315

    > What personal reminder matters before that conference?
    Before the conference Nora needs to replace her passport because it expires in November.

9) Object storage vendor

mempalace --palace "$PAL" search "Which cloud storage service do they use?" --results 1
[1] nora-demo / technical
    Source: nora_profile.md
    Match:  0.222

    > What cloud setup does the team use?
    Production runs on Fly.io and object storage lives in Cloudflare R2.

10) Rollout owner

mempalace --palace "$PAL" search "What customer support person owns the electronic prescriptions rollout?" --results 1
[1] nora-demo / technical
    Source: nora_profile.md
    Match:  0.032

    > What roadmap item is due in June and who owns it?
    Electronic prescriptions are due in June and Marta owns the rollout checklist.

11) Contract size

mempalace --palace "$PAL" search "What is the average annual contract?" --results 1
[1] nora-demo / technical
    Source: nora_profile.md
    Match:  0.061

    > What is the pricing model and average contract size?
    Lantern charges per store per month and the average annual contract is 42,000 Australian dollars.

12) Airline seat preference

mempalace --palace "$PAL" search "Which airline seat does Nora prefer?" --results 1
[1] nora-demo / technical
    Source: nora_profile.md
    Match:  0.472

    > What is her travel habit and favorite airline seat?
    Nora always takes handwritten notes on flights and prefers seat 12A whenever she can get it.

What the end-to-end example proves

This is the fairest read of the project I can give:

  • It can ingest a substantial chunk of semi-structured memory.
  • It can retrieve specific facts from that memory with useful reliability.
  • It returns verbatim source text, which is good.
  • It has almost no meaningful higher-order organization in this path beyond chunking + embeddings + metadata.
  • The UX polish is rough enough that even good retrieval often gets presented with nonsense scores or nonsense categorization.

What the end-to-end example also exposes

Wake-up is not very selective

The wake-up output for this 60-fact transcript is basically the first 15 stored chunks, because the usual miners do not assign meaningful importance/weight metadata.

## L1 — ESSENTIAL STORY

[technical]
  - > Who is Nora Levin? Nora Levin is the founder of Northstar Labs and she lives in Hobart, Tasmania.  (nora_profile.md)
  - > What is Nora's birthday and pet? Nora was born on 14 February 1991 and her dog is a border collie named Basil.  (nora_profile.md)
  - > Who is in Nora's family? Nora's partner is Eli Mercer and her younger sister is Tessa Levin.  (nora_profile.md)
  - > What does Nora drink and avoid? Nora drinks a flat white every morning and she cannot stand fennel.  (nora_profile.md)
  ...

That's not an “essential story” so much as “top of file until char budget runs out.”

Off-target search still looks ridiculous

mempalace --palace "$PAL" search "ukulele sexual compulsions high school reunion" --results 3
[1] nora-demo / technical
    Source: nora_profile.md
    Match:  -0.74

    > What does Nora drink and avoid?
    Nora drinks a flat white every morning and she cannot stand fennel.

[2] nora-demo / technical
    Source: nora_profile.md
    Match:  -0.806

    > What instruments and sports does Nora like?
    Nora plays the cello on Sundays and she swims at Sandy Bay twice a week.

Again: the retrieval engine returning something vaguely nearest-neighbor-like is normal. Printing negative match values is still crap.


Smaller repro demos

1) mempalace init --yes still prompts and crashes in non-interactive use

Command:

mempalace init /root/source/mempalace-review-artifacts/project --yes

Output:

  Scanning for entities in: /root/source/mempalace-review-artifacts/project
  Reading 2 files...
  No entities detected — proceeding with directory-based rooms.

=======================================================
  MemPalace Init — Local setup
=======================================================

  WING: project
  (2 files found, rooms detected from folder structure)

    ROOM: documentation
          Files from docs/
    ROOM: src
          Files from src/
    ROOM: backend
          Files from api/
    ROOM: general
          Files that don't fit other rooms

───────────────────────────────────────────────────────
  Review the proposed rooms above.
  Options:
    [enter]  Accept all rooms
    [edit]   Remove or rename rooms
    [add]    Add a room manually

  Your choice [enter/edit/add]:
Traceback (most recent call last):
...
EOFError: EOF when reading a line

That is a plain bug. If a flag says --yes, it should actually be non-interactive.


2) collection_name is configurable in config, but large parts of the app ignore it

Config says collection name is configurable:

# mempalace/config.py
@property
def collection_name(self):
    return self._file_config.get("collection_name", DEFAULT_COLLECTION_NAME)

I set:

{
  "palace_path": "/root/source/mempalace-review-artifacts/custom-palace",
  "collection_name": "custom_drawers"
}

Then mined a sample project with HOME pointed at that config.

Check:

configured_collection= custom_drawers
actual_collections= ['mempalace_drawers']

So the app advertises one collection, then writes to another.

Hardcoded call sites include:

  • mempalace/miner.py
  • mempalace/convo_miner.py
  • mempalace/searcher.py
  • mempalace/cli.py
  • mempalace/layers.py

This is not a cosmetic inconsistency. It means config compatibility is broken.


3) The graph/hall abstraction is barely present in normal mined data

The graph module says:

Nodes = rooms
Edges = shared rooms across wings (tunnels)
Edge types = halls (the corridors)

But ordinary mined items do not actually carry hall metadata.

Example metadata from normal convo mining:

meta[1] hall= None
{
  "added_by": "mempalace",
  "chunk_index": 0,
  "extract_mode": "exchange",
  "filed_at": "2026-04-08T06:25:49.816161",
  "ingest_mode": "convos",
  "room": "technical",
  "source_file": "/root/source/mempalace-review-artifacts/convos/chat1.md",
  "wing": "convos"
}

Graph build on the same mined data:

node_count= 1
edge_count= 0
technical halls= []

And the graph code really does depend on hall:

# mempalace/palace_graph.py
hall = meta.get("hall", "")
...
for hall in data["halls"]:
    edges.append(...)

So the README mythology about halls/tunnels is much stronger than the ordinary data path that actually feeds the graph.


4) CLI UX trap: --palace must come before the subcommand

This fails:

mempalace mine /root/source/mempalace-review-artifacts/project --palace /root/source/mempalace-review-artifacts/palace

Output:

usage: mempalace [-h] [--palace PALACE]
                 {init,mine,search,compress,wake-up,split,status} ...
mempalace: error: unrecognized arguments: --palace /root/source/mempalace-review-artifacts/palace

Only this works:

mempalace --palace /root/source/mempalace-review-artifacts/palace mine /root/source/mempalace-review-artifacts/project

Not fatal, but absolutely the kind of thing users trip on immediately.


5) Versioning is already inconsistent

Check:

pyproject= 3.0.0
__init__= 2.0.0

Files:

# pyproject.toml
version = "3.0.0"
# mempalace/__init__.py
__version__ = "2.0.0"

Small thing, but it signals release discipline is loose.


README claims vs code reality

6) README says wake-up is ~170 tokens; code comments say ~600-900

README:

This gives your local model ~170 tokens of critical facts

Code:

Layer 0: Identity       (~100 tokens)
Layer 1: Essential Story (~500-800)
Wake-up cost: ~600-900 tokens (L0+L1)

Those numbers do not sit cleanly together.


7) Benchmark code contains explicit benchmark-specific patching

This is the biggest credibility problem in the repo.

From benchmarks/longmemeval_bench.py:

Hybrid V4: hybrid_v3 + three targeted fixes for the final 3 misses.

Miss 1 — 'high school reunion' ...
Fix: Add memory/nostalgia patterns ...

Miss 2 — 'Rachel/ukulele' ...
Fix: Extract capitalized proper nouns from question; boost sessions containing them.

Miss 3 — 'sexual compulsions' ...
Fix: Extract quoted phrases from question; boost sessions containing exact quotes.

That is not a clean "general breakthrough" story. That is direct tuning against known misses.

You can call that practical engineering if you like. Fine. But then the README chest-beating needs to come down several notches.


8) Benchmark tooling also contains private/local assumptions

Examples:

# benchmarks/convomem_bench.py
# Bypass SSL for restricted environments
ssl._create_default_https_context = ssl._create_unverified_context

and:

# benchmarks/locomo_bench.py
keys_path = os.path.expanduser("~/.config/lu/keys.json")

That does not look like a clean, polished, publicly reproducible benchmark suite. It looks like a research notebook that escaped into the repo.


What is actually good here

To be fair:

  • the package installs and builds cleanly
  • the basic CLI flow is real
  • the core idea of storing verbatim memory and making it searchable is directionally good
  • the code is mostly readable
  • this is a real OSS tool, not vaporware

If the README were calmer and the benchmark claims were more honest, I would be a lot friendlier to it.


Bottom line

As a usable OSS memory tool: 7/10
As a rigorously presented benchmark/research story: 4/10

The repo is real. The swagger is doing too much work.


Bigger confusable end-to-end example: 62 drawers / 124 facts

I doubled the synthetic dataset and made it nastier: two founders, two companies, similar names, similar executives, similar incidents, similar timelines, similar product codenames.

Dataset file in this gist: nora_norah_confusables.md

It contains paired facts like:

  • Nora Levin / Norah Levene
  • Northstar Labs / Northlight Health
  • Priya Shah / Priya Singh
  • Jonas Reed / Jonah Reid
  • Hana Kim / Hannah Kim
  • Fern Health / Fearn Medical
  • Lantern / Atlas Green / Lattice / Atlas Grey
  • Fly.io + R2 / Render + S3
  • SvelteKit + RabbitMQ / Next.js + NATS

Ingest output

=======================================================
  MemPalace Mine — Conversations
=======================================================
  Wing:    confusable-demo
  Source:  /root/source/mempalace-review-artifacts/confusable-e2e
  Files:   1
  Palace:  /root/source/mempalace-review-artifacts/confusable-palace
───────────────────────────────────────────────────────

  ✓ [   1/1] nora_norah_confusables.md                          +62

=======================================================
  Done.
  Files processed: 1
  Files skipped (already filed): 0
  Drawers filed: 62

  By room:
    technical            1 files

=======================================================
  MemPalace Status — 62 drawers
=======================================================

  WING: confusable-demo
    ROOM: technical               62 drawers

Again, everything lands in technical. Personal facts, roadmap facts, board facts, outage facts, travel habits — all one bucket.

10 harder tests

These were aimed at disambiguation, multi-constraint retrieval, or mild multi-hop reasoning.

Hard test 1: disambiguate the two Priyas

Query:

mempalace --palace "$PAL" search "Which Priya signs payroll every second Tuesday?" --results 3

Top result:

[1] confusable-demo / technical
    Match:  0.119

    > Who is the COO at Northstar and what recurring task does she handle?
    Priya Shah is the COO at Northstar and she signs payroll every second Tuesday.

Verdict: pass. It distinguishes Priya Shah from Priya Singh.

Hard test 2: distinguish the two frontend/queue stacks

Query:

mempalace --palace "$PAL" search "Which company uses Next.js and NATS instead of SvelteKit and RabbitMQ?" --results 3

Top result:

[1] confusable-demo / technical
    Match:  0.101

    > What frontend and queue system does Northlight use?
    Northlight's dashboard uses Next.js and background jobs run through NATS.

Verdict: pass.

Hard test 3: security incident with overlapping Kim names

Query:

mempalace --palace "$PAL" search "Who rotated every key within 18 minutes after a GitHub leak?" --results 3

Top result:

[1] confusable-demo / technical
    Match:  0.332

    > What security incident happened at Northstar in January?
    An intern committed a test API key to GitHub and Hana rotated every key within 18 minutes.

Verdict: pass. Good discrimination between Hana and Hannah.

Hard test 4: founder + conference + expiring document

Query:

mempalace --palace "$PAL" search "Which founder speaking at SaaS Down Under has a passport expiring in November?" --results 3

Top result:

[1] confusable-demo / technical
    Match:  -0.275

    > What personal reminder matters for Nora before her conference?
    Before the conference Nora needs to replace her passport because it expires in November.

Verdict: partial. It got the passport fact, but did not retrieve the conference-title chunk that ties this to SaaS Down Under. That's a good example of the system being retrieval-only rather than a true synthesis layer.

Hard test 5: infrastructure migration with reason

Query:

mempalace --palace "$PAL" search "Which company left Heroku because noisy neighbors caused p95 latency spikes?" --results 3

Top result:

[1] confusable-demo / technical
    Match:  0.35

    > What old infrastructure did Northstar leave and why?
    Northstar left Heroku in 2024 because noisy neighbors caused p95 latency spikes.

Verdict: pass.

Hard test 6: product + codename + current stack

Query:

mempalace --palace "$PAL" search "What is the product that used Atlas Grey and now runs on MySQL with a Rust API?" --results 3

Top results:

[1] confusable-demo / technical
    Match:  0.205

    > What database and API stack does Northlight use now?
    Lattice moved from PostgreSQL to MySQL and the API is written in Rust.

[3] confusable-demo / technical
    Match:  -0.262

    > What is Northlight's flagship product and former codename?
    Northlight's flagship product is Lattice and its internal codename used to be Atlas Grey.

Verdict: partial. The answer is reconstructable from the top hits, but MemPalace itself is not doing that reconstruction. The user has to synthesize across results.

Hard test 7: distinguish Fern from Fearn

Query:

mempalace --palace "$PAL" search "Which customer reported the bug that duplicated discount rows?" --results 3

Top result:

[1] confusable-demo / technical
    Match:  0.302

    > Which bug did Fern Health report to Northstar?
    Fern Health reported the March CSV export bug and it duplicated discount rows.

Verdict: pass.

Hard test 8: ask for support owner via a different company attribute

Query:

mempalace --palace "$PAL" search "Who runs customer support for the company whose object storage lives in Cloudflare R2?" --results 3

Top results:

[1] confusable-demo / technical
    Match:  0.134

    > What cloud setup does Northstar run on?
    Northstar runs production on Fly.io and keeps object storage in Cloudflare R2.

Verdict: fail for end-user purposes. It retrieves the Cloudflare R2 chunk, but not the support-owner chunk. A human can infer the company and go search again; the system itself does not bridge the facts.

Hard test 9: beta customer + company HQ

Query:

mempalace --palace "$PAL" search "Which company has the noisiest beta customer Riverton Clinics and where is its main office?" --results 3

Top results:

[1] confusable-demo / technical
    Match:  0.323

    > Which customers matter most to Northlight?
    Northlight's largest customer is Fearn Medical and its noisiest beta customer is Riverton Clinics.

[3] confusable-demo / technical
    Match:  -0.178

    > What does Northlight Health build and where is its main office?
    Northlight Health builds software for radiology clinics and its main office is on King William Street in Adelaide.

Verdict: partial. Again, usable top hits, but no built-in composition of the answer.

Hard test 10: airline seat + pet with similar founders

Query:

mempalace --palace "$PAL" search "Which founder prefers seat 14F and what pet does she have?" --results 3

Top results:

[1] confusable-demo / technical
    Match:  0.031

    > What travel habit and airline seat does Norah prefer?
    Norah color-codes her itineraries and prefers seat 14F whenever possible.

Verdict: partial bordering on fail. It gets the seat fact but not the pet fact. Again, retrieval is local-chunk based.

Overall score on the 10 harder tests

  • Clean pass: 5
  • Partial / reconstructable from top hits: 4
  • Practical fail: 1

That is honestly not terrible for a tiny local vector-memory tool. It is also nowhere near the mystical “memory palace” framing in the README. The main CLI path is basically embed chunks, store chunks, vector-search chunks, print chunks.


How this works technically

This part is much less magical than the docs make it sound.

Main data path

At a high level, the normal CLI flow is:

  1. read files
  2. chunk them into text snippets (“drawers”)
  3. attach lightweight metadata (wing, room, source_file, chunk_index, timestamps)
  4. hand them to ChromaDB
  5. let Chroma embed and index the text
  6. query by embedding similarity later

That’s it. No hidden symbolic memory engine in the main path.

Where embedding happens

The key detail: MemPalace itself does not explicitly create embeddings in the normal CLI path. Chroma does.

Normal ingestion code looks like this:

# mempalace/miner.py
collection.add(
    documents=[content],
    ids=[drawer_id],
    metadatas=[...],
)

and in convo mode:

# mempalace/convo_miner.py
collection.add(
    documents=[chunk["content"]],
    ids=[drawer_id],
    metadatas=[...],
)

Notice what is not being passed: no embeddings= and no explicit embedding_function= on the collection.

The collection is created like this:

client = chromadb.PersistentClient(path=palace_path)
collection = client.get_collection("mempalace_drawers")
# or create_collection("mempalace_drawers")

So Chroma uses its default embedding function.

What Chroma is using by default here

I checked the installed chromadb package in this environment.

chromadb version: 1.5.6
DefaultEmbeddingFunction -> delegates to ONNXMiniLM_L6_V2
embedding dimension: 384

Specifically, Chroma's DefaultEmbeddingFunction says:

class DefaultEmbeddingFunction(EmbeddingFunction[Documents]):
    """Default embedding function that delegates to ONNXMiniLM_L6_V2."""

So in this setup, the normal MemPalace CLI path is relying on:

  • ChromaDB for storage + retrieval
  • ONNX MiniLM L6 v2 for embeddings
  • 384-dimensional vectors

That matters because the repo pitches a grand architecture, but the normal search path is mostly standard Chroma + default sentence embeddings.

Where query embedding happens

Search uses:

# mempalace/searcher.py
results = col.query(
    query_texts=[query],
    n_results=n_results,
    include=["documents", "metadatas", "distances"],
)

Passing query_texts= means Chroma embeds the query text using the same collection embedding function and returns nearest neighbors.

So both ingest and query-time embedding are happening inside Chroma, not in MemPalace's own code.

Project mining vs conversation mining

Project mining

mempalace/miner.py:

  • scans readable file extensions
  • skips common junk dirs like .git, node_modules, .venv
  • chunks by characters with:
    • CHUNK_SIZE = 800
    • CHUNK_OVERLAP = 100
    • MIN_CHUNK_SIZE = 50
  • room assignment uses:
    1. folder path match
    2. filename match
    3. keyword scoring
    4. fallback general

Conversation mining

mempalace/convo_miner.py:

  • prefers a >-quoted exchange format
  • makes one chunk from one user turn plus following assistant text
  • otherwise falls back to paragraph chunking
  • room assignment is crude topic keyword scoring over a few buckets:
    • technical
    • architecture
    • planning
    • decisions
    • problems
    • else general

That is why the synthetic examples collapse into technical so easily.

Wake-up is not a learned memory summary

mempalace/layers.py describes Layer 1 as selecting high-importance / recent drawers.

But in the normal mined path, drawer metadata is usually just:

  • wing
  • room
  • source_file
  • chunk_index
  • added_by
  • filed_at

The miners do not write meaningful importance, emotional_weight, or weight values.

So Layer 1 usually falls back to a default importance of 3 for every drawer, then takes the first MAX_DRAWERS = 15 after sorting by identical scores.

In practice, that means wake-up is often just a formatted slice of early-ingested chunks, not a genuinely selected “essential story”.

Main CLI search is not hybrid

The main search path is not BM25 + vector + rerank.

It is just Chroma similarity search with optional metadata filters:

  • wing
  • room

There is no mainline reranker, no explicit lexical fallback, no answer synthesis step, and no graph traversal in the normal CLI search.

That distinction matters because some of the benchmark code contains much fancier custom retrieval logic than the standard user-facing tool.

Why negative match scores happen

Search prints:

similarity = round(1 - dist, 3)

That assumes Chroma distance behaves like a nice bounded [0,1] similarity gap.

It doesn't necessarily. If distance is greater than 1, this turns into a negative “match” value.

So the bug is not that retrieval is impossible — it's that the repo is presenting raw or semi-raw distance as a user-friendly confidence score without calibrating it.

Important practical consequence

For ordinary use, MemPalace behaves much more like this:

a thin local RAG memory CLI on top of ChromaDB

than like this:

a deeply structured palace with rooms, halls, tunnels, closets, drawers, and meaningfully layered autobiographical recall

That doesn't make it worthless. It just makes the README theatrical.

Who is Nora Levin and where does she live? Nora Levin is the founder of Northstar Labs and she lives in Hobart, Tasmania.

Who is Norah Levene and where does she live? Norah Levene is the founder of Northlight Health and she lives in Launceston, Tasmania.

What are Nora and Norah's birthdays? Nora was born on 14 February 1991 and Norah was born on 19 February 1990.

What pets do Nora and Norah have? Nora has a border collie named Basil and Norah has a ragdoll cat named Pixel.

Who are Nora's close family members? Nora's partner is Eli Mercer and her younger sister is Tessa Levin.

Who are Norah's close family members? Norah's partner is Arun Das and her older brother is Theo Levene.

What morning drink and food aversion does Nora have? Nora drinks a flat white every morning and she cannot stand fennel.

What drink and food aversion does Norah have? Norah drinks long black coffee and she refuses coriander.

What hobbies do Nora and Norah have? Nora plays the cello on Sundays and swims at Sandy Bay twice a week.

What hobbies does Norah keep up with? Norah plays the clarinet on Fridays and rows on the Tamar River on weekends.

What travel habit and airline seat does Nora prefer? Nora takes handwritten notes on flights and prefers seat 12A whenever possible.

What travel habit and airline seat does Norah prefer? Norah color-codes her itineraries and prefers seat 14F whenever possible.

What does Northstar Labs build and where is its main office? Northstar Labs builds software for community pharmacies and its main office is on Collins Street in Melbourne.

What does Northlight Health build and where is its main office? Northlight Health builds software for radiology clinics and its main office is on King William Street in Adelaide.

What are the backup office and warehouse for Northstar? Northstar's backup office is in Wellington, New Zealand and its hardware warehouse is in Geelong.

What are the backup office and warehouse for Northlight? Northlight's backup office is in Christchurch, New Zealand and its device warehouse is in Prospect, Adelaide.

What is Northstar's flagship product and former codename? Northstar's flagship product is Lantern and its internal codename used to be Atlas Green.

What is Northlight's flagship product and former codename? Northlight's flagship product is Lattice and its internal codename used to be Atlas Grey.

What database and API stack does Northstar use now? Lantern moved from MongoDB to PostgreSQL and the API is written in Go.

What database and API stack does Northlight use now? Lattice moved from PostgreSQL to MySQL and the API is written in Rust.

What frontend and queue system does Northstar use? Northstar's dashboard uses SvelteKit and background jobs run through RabbitMQ.

What frontend and queue system does Northlight use? Northlight's dashboard uses Next.js and background jobs run through NATS.

What auth and observability tools does Northstar use? Northstar handles customer auth with Auth0 and ships traces to Honeycomb.

What auth and observability tools does Northlight use? Northlight handles customer auth with WorkOS and ships traces to Datadog.

What cloud setup does Northstar run on? Northstar runs production on Fly.io and keeps object storage in Cloudflare R2.

What cloud setup does Northlight run on? Northlight runs production on Render and keeps object storage in Amazon S3.

What old infrastructure did Northstar leave and why? Northstar left Heroku in 2024 because noisy neighbors caused p95 latency spikes.

What old infrastructure did Northlight leave and why? Northlight left ECS Fargate in 2023 because costs drifted upward and cold starts hurt image processing jobs.

What compliance target and backup schedule does Northstar follow? Northstar is aiming for SOC 2 Type II and it takes encrypted backups every six hours.

What compliance target and backup schedule does Northlight follow? Northlight is aiming for ISO 27001 and it takes encrypted backups every four hours.

Who is the COO at Northstar and what recurring task does she handle? Priya Shah is the COO at Northstar and she signs payroll every second Tuesday.

Who is the COO at Northlight and what recurring task does she handle? Priya Singh is the COO at Northlight and she signs vendor approvals every first Monday.

Who leads engineering and support at Northstar? Jonas Reed leads engineering at Northstar and Marta Silva runs customer support.

Who leads engineering and support at Northlight? Jonah Reid leads platform engineering at Northlight and Mira Salvi runs customer success.

Who handles finance and security at Northstar? Owen Price is Northstar's finance controller and Hana Kim handles security reviews.

Who handles finance and security at Northlight? Omar Price is Northlight's finance controller and Hannah Kim handles security reviews.

Which customers matter most to Northstar? Northstar's largest customer is Fern Health and its noisiest beta customer is Riverstone Chemists.

Which customers matter most to Northlight? Northlight's largest customer is Fearn Medical and its noisiest beta customer is Riverton Clinics.

Which bug did Fern Health report to Northstar? Fern Health reported the March CSV export bug and it duplicated discount rows.

Which bug did Fearn Medical report to Northlight? Fearn Medical reported the April DICOM import bug and it dropped contrast labels.

Which public-sector contracts are pending? Northstar has a government pilot with Tasmania Health pending and Northlight has a hospital pilot with SA Health pending.

Who negotiates those pending contracts? Priya Shah is negotiating the Tasmania Health deal and Priya Singh is negotiating the SA Health deal.

What pricing model and average contract size does Northstar have? Northstar charges per store per month and its average annual contract is 42,000 Australian dollars.

What pricing model and average contract size does Northlight have? Northlight charges per clinic per month and its average annual contract is 58,000 Australian dollars.

What churn and renewal target does Northstar track? Northstar's gross churn last quarter was 1.8 percent and its renewal target is above 96 percent.

What churn and renewal target does Northlight track? Northlight's gross churn last quarter was 2.4 percent and its renewal target is above 94 percent.

What happened during Northstar's May outage? Northstar's May outage lasted 47 minutes and it started with a bad RabbitMQ rollout.

What happened during Northlight's June outage? Northlight's June outage lasted 63 minutes and it started with a bad NATS certificate rotation.

How did Northstar fix its outage and what rule came from the postmortem? Jonas fixed Northstar's outage by reverting queue config and the postmortem banned Friday infra deploys.

How did Northlight fix its outage and what rule came from the postmortem? Jonah fixed Northlight's outage by restoring the certificate chain and the postmortem required staged key rotations.

What security incident happened at Northstar in January? An intern committed a test API key to GitHub and Hana rotated every key within 18 minutes.

What security incident happened at Northlight in February? A contractor pasted a staging token into a ticket and Hannah rotated every affected token within 27 minutes.

What roadmap item is due in June for Northstar and who owns it? Electronic prescriptions are due in June for Northstar and Marta owns the rollout checklist.

What roadmap item is due in August for Northstar and what blocks it? Northstar's multi-store inventory feature is due in August and it depends on a new reconciliation service.

What roadmap item is due in July for Northlight and who owns it? Northlight's imaging annotations release is due in July and Mira owns the rollout checklist.

What roadmap item is due in September for Northlight and what blocks it? Northlight's clinic benchmarking release is due in September and it depends on a de-identification pipeline.

What conference plans does Nora have? Nora is speaking at SaaS Down Under in July and her talk is titled Boring Systems Win.

What conference plans does Norah have? Norah is speaking at HealthTech Adelaide in August and her talk is titled Quiet Software, Clear Images.

What personal reminder matters for Nora before her conference? Before the conference Nora needs to replace her passport because it expires in November.

What personal reminder matters for Norah before her conference? Before the conference Norah needs to renew her driver's licence because it expires in October.

Which board member advises Northstar and what does he obsess over? Northstar advisor Marcus Vale obsesses over pharmacy gross margin and store-level retention.

Which board member advises Northlight and what does she obsess over? Northlight advisor Marcia Vail obsesses over radiologist throughput and scan turnaround time.

Who is Nora Levin? Nora Levin is the founder of Northstar Labs and she lives in Hobart, Tasmania.

What is Nora's birthday and pet? Nora was born on 14 February 1991 and her dog is a border collie named Basil.

Who is in Nora's family? Nora's partner is Eli Mercer and her younger sister is Tessa Levin.

What does Nora drink and avoid? Nora drinks a flat white every morning and she cannot stand fennel.

What instruments and sports does Nora like? Nora plays the cello on Sundays and she swims at Sandy Bay twice a week.

What is her travel habit and favorite airline seat? Nora always takes handwritten notes on flights and prefers seat 12A whenever she can get it.

What company does she run and where is the main office? Northstar Labs builds software for community pharmacies and the main office is on Collins Street in Melbourne.

What is the backup office and warehouse location? The backup office is in Wellington, New Zealand and the hardware warehouse is in Geelong.

What is the company's main product and old codename? The flagship product is called Lantern and its internal codename used to be Atlas Green.

What stack does Lantern use now? Lantern moved from MongoDB to PostgreSQL and the API is written in Go.

What frontend and queue system does the product use? The dashboard frontend uses SvelteKit and background jobs run through RabbitMQ.

What authentication and observability tools are in place? Customer auth is handled by Auth0 and traces are shipped to Honeycomb.

What cloud setup does the team use? Production runs on Fly.io and object storage lives in Cloudflare R2.

What was the old infrastructure and why was it dropped? They left Heroku in 2024 because noisy neighbors caused p95 latency spikes.

What compliance and backup schedule does the company follow? Northstar Labs is aiming for SOC 2 Type II and it takes encrypted backups every six hours.

Who are the executives and what do they do? Priya Shah is the COO and she signs payroll every second Tuesday.

Who leads engineering and support? Jonas Reed leads engineering and Marta Silva runs customer support.

Who handles finance and security? The finance controller is Owen Price and security reviews go through Hana Kim.

What customers matter most right now? Their largest customer is Fern Health and the noisiest beta customer is Riverstone Chemists.

Which customer found a bug and what bug was it? Fern Health found the March CSV export bug and the bug duplicated discount rows.

Which contract is pending and who negotiates it? A government pilot with Tasmania Health is pending and Priya is negotiating it.

What is the pricing model and average contract size? Lantern charges per store per month and the average annual contract is 42,000 Australian dollars.

What is the churn and renewal target? Gross churn last quarter was 1.8 percent and the renewal target is above 96 percent.

What happened during the May outage? The May outage lasted 47 minutes and it started with a bad RabbitMQ rollout.

What fixed the outage and what was the postmortem rule? Jonas fixed the outage by reverting the queue config and the postmortem banned Friday infra deploys.

What security incident happened in January? In January an intern committed a test API key to GitHub and Hana rotated every key within 18 minutes.

What roadmap item is due in June and who owns it? Electronic prescriptions are due in June and Marta owns the rollout checklist.

What roadmap item is due in August and what dependency blocks it? Multi-store inventory arrives in August and it depends on a new reconciliation service.

What conference plans does Nora have? Nora is speaking at SaaS Down Under in July and her talk is titled Boring Systems Win.

What personal reminder matters before that conference? Before the conference Nora needs to replace her passport because it expires in November.

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