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
Copy file name to clipboardExpand all lines: CHANGELOG.md
+72-1Lines changed: 72 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,7 +6,75 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
7
7
---
8
8
9
-
## [Unreleased] — v3.3.0 (on develop)
9
+
## [3.3.1] — 2026-04-16
10
+
11
+
### New Features
12
+
13
+
**Multi-language entity detection** — lexical patterns (person verbs, pronouns, dialogue markers, project verbs, stopwords, candidate character classes) now live in the optional `entity` section of each locale JSON under `mempalace/i18n/<lang>.json`. Every public function in `entity_detector` accepts a `languages=` tuple and unions patterns across enabled locales. Default stays `("en",)` so existing English-only callers are unchanged. (#911)
14
+
15
+
-**Five new fully-supported locales** with CLI strings, AAAK compression instructions, and entity-detection patterns:
16
+
- Brazilian Portuguese `pt-br` (#156)
17
+
- Russian `ru` (#760)
18
+
- Italian `it` (#907)
19
+
- Hindi `hi` (#773)
20
+
- Indonesian `id` (#778)
21
+
-**`MempalaceConfig.entity_languages`** — persistent palace-level language selection; `MEMPALACE_ENTITY_LANGUAGES` env override; `mempalace init --lang en,pt-br` flag that saves to `~/.mempalace/config.json` (#911)
22
+
-**Per-language `candidate_pattern`** — non-Latin scripts register their own character class, so names like `João`, `Инна`, `राज` are no longer silently dropped by the ASCII-only default (#911)
23
+
-**VSCode devcontainer** matching the CI environment (#881)
24
+
-`MEMPAL_VERBOSE` env toggle — developers see diaries surfaced in chat while the default remains silent (#871)
25
+
-`created_at` timestamps included in search results (#846)
26
+
27
+
### Bug Fixes
28
+
29
+
**i18n / Unicode**
30
+
31
+
- Script-aware word boundaries for combining-mark scripts — Python's `\b` fails on Devanagari vowel signs (`ा ी ु`), Arabic, Hebrew, Thai, Tamil, Khmer etc., truncating names like `अनीता` → `अनीत` and making person-verb patterns never fire. Locales now declare an optional `boundary_chars` field and the i18n loader expands `\b` into a script-aware lookaround boundary (#932)
32
+
- Case-insensitive BCP 47 language code resolution — `--lang PT-BR`, `zh-cn`, `Pt-Br` previously fell through to English silently; now resolve to the canonical locale file via lowercase matching, with the entity-pattern cache keyed on the canonical form so casing variations share one cache entry (#928)
33
+
- Wire i18n candidate patterns into `miner._extract_entities_for_metadata()`, `palace.build_closet_lines()`, and `entity_registry.extract_unknown_candidates()` — three code paths that still hardcoded ASCII-only `[A-Z][a-z]{2,}` and silently missed Cyrillic, accented Latin, and non-Latin entity metadata tags (#931)
34
+
- Explicit `encoding="utf-8"` on `Path.read_text()` calls across entity_registry, instructions_cli, split_mega_files, and onboarding tests — prevents Windows GBK (and other non-UTF-8) locales from corrupting UTF-8 files (#946, #776)
35
+
-`ko.json``status_drawers` used `{drawers}` instead of `{count}`, showing the raw template string instead of the number (#758)
36
+
- Move `test_i18n.py` from inside the installed package into `tests/` so pytest actually collects it; remove the `sys.path.insert` hack (#758)
37
+
-`Dialect.from_config()` defaulted to `current_lang()` (module-global) when config had no `lang` key — replaced with explicit `"en"` fallback for determinism (#758)
38
+
39
+
**Other**
40
+
41
+
- Guard `KnowledgeGraph.close()` and `query_relationship`/`timeline`/`stats` methods with the instance lock to prevent concurrent-access corruption (#887, #884)
42
+
- Replace invalid `{"decision": "allow"}` with `{}` in hook responses — the string wasn't a valid decision value and triggered schema warnings (#885)
43
+
-`entity_registry.research()` defaults to local-only — previously made outbound Wikipedia HTTPS requests without explicit user opt-in; callers now must pass `allow_network=True` (#811)
44
+
- Precompact hook no longer blocks compaction when it fails or takes too long (#856, #858, #863)
45
+
- Redirect stdout to stderr during MCP server import so library logging can't corrupt the JSON-RPC channel (#225, #864)
46
+
-`mempalace init` auto-adds per-project files to `.gitignore` in git repositories so users don't accidentally commit `mempalace.yaml` / `entities.json` (#185, #866)
47
+
- Searcher guards against empty ChromaDB query results that previously raised on edge-case corpora (#195, #865)
48
+
- Return empty status instead of an error on a cold-start palace with no drawers yet (#830, #831)
49
+
- Restrict file permissions on sensitive palace data (#814)
50
+
- Slack transcript importer writes a provenance header and preserves speaker IDs (#815)
51
+
- Allow `mempalace mine` to run in directories without a local `mempalace.yaml` and surface the missing-yaml warning on stderr (#604)
52
+
- Security hook injection fix (#812)
53
+
- Save hook auto-mines transcripts even when `MEMPAL_DIR` is unset (#840)
54
+
- Pin the Pages custom domain via a shipped `CNAME` in the deploy artifact (#877)
55
+
- Version drift safeguard — sync pyproject + `version.py` + README badge in one place (#876)
56
+
- Deploy docs workflow now runs on `develop` only, preventing accidental main-branch deploys (#845)
57
+
58
+
### Improvements
59
+
60
+
- Regex compilation optimization for entity extraction — pre-compile per-entity pattern sets once and cache by `(name, languages)` tuple, so multi-language callers don't thrash the cache (#880)
61
+
- Knowledge-graph value sanitization now preserves natural punctuation (commas, colons, parentheses) that commonly appears in KG subject/object values (#873)
62
+
63
+
### Documentation
64
+
65
+
- Clarify that `mempalace init` requires a `<dir>` argument in CLI help text (#210, #862)
66
+
- Domain name and specific impostor sites called out in the scam-alert section (#869)
67
+
- Tightened `SECURITY.md` with a real version-support policy and the GHPVR-only reporting channel (#810)
68
+
- Fixed stale `pyproject.toml` URLs (#853)
69
+
- v4 planning prep (#852)
70
+
71
+
### Internal
72
+
73
+
-`palace_graph` tunnel helper test coverage (#908)
74
+
75
+
---
76
+
77
+
## [3.3.0] — 2026-04-13
10
78
11
79
### New Features
12
80
- Closet layer — a compact searchable index of pointers to verbatim drawers, enabling fast topical lookup without reading all content (#788)
@@ -41,6 +109,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
41
109
- Add `docs/CLOSETS.md` — closet layer overview
42
110
- Fix stale `milla-jovovich/*` org URLs in website and plugin manifests (#787)
43
111
- Fix remaining stale org URLs in contributor docs (#808)
112
+
- Rewrite `README.md` and `mempalaceofficial.com` benchmark pages to remove category-error cross-system comparisons (R@5 retrieval recall had been listed next to competitor QA accuracy under one column), remove the retracted "+34% palace boost" claim from the surfaces where it had remained, replace the `100%` Haiku-rerank headline with the honest held-out `98.4%` R@5, drop the LoCoMo `100%` top-50 row (retrieval-bypass artefact), and fix the broken `aya-thekeeper/mempal` reproduction URL (#875)
113
+
- Add `docs/HISTORY.md` as the canonical home for corrections, retractions, and public notices; move the 2026-04-07 "Note from Milla & Ben" and the 2026-04-11 impostor-domain notice out of `README.md`
114
+
- Add v3.3.0 reproduction result JSONLs and the deterministic `seed=42` 50/450 LongMemEval split under `benchmarks/` — every BENCHMARKS.md claim reproduces exactly
44
115
45
116
### Internal
46
117
- Add test coverage for `mine_lock`, closets, entity metadata, BM25, and diary
Copy file name to clipboardExpand all lines: CONTRIBUTING.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -82,7 +82,7 @@ If you're planning a significant change, open an issue first to discuss the appr
82
82
-**Verbatim first**: Never summarize user content. Store exact words.
83
83
-**Local first**: Everything runs on the user's machine. No cloud dependencies.
84
84
-**Zero API by default**: Core features must work without any API key.
85
-
-**Palace structure matters**: Wings, halls, and rooms aren't cosmetic — they drive a 34% retrieval improvement. Respect the hierarchy.
85
+
-**Palace structure is scoping, not magic**: Wings, halls, and rooms act as metadata filters in the underlying vector store. They keep retrieval predictable when a palace holds many unrelated projects or people. Respect the hierarchy — but don't present it as a novel retrieval mechanism.
0 commit comments