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
31 changes: 31 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,37 @@ All notable changes to MeMesh are documented here.
append path gets the same content guard, so this dedup is now a property of
writing an observation at all, not just of these three hooks.

- **`memesh doctor` now says when an AI-backed feature has quietly stopped
working.** `llm_telemetry` recorded every Smart-Mode call but nothing read
it for a health signal — measured on a real graph, `guard_proposer` had
failed all 69 of its calls, every one, across the four days it ran between
2026-08-28 and 2026-09-01, invisible to doctor. A new zero-cost check
(`inspectLlmTelemetryHealth`, no `--probe`
gate) reads the last 7 days and warns when a flow's recent calls (≥3) all
failed; a shorter window than `memesh telemetry`'s 30-day default is
deliberate — a longer one blends in stale successes and hides a flow that
has been 100% broken all week. Silent (not a false PASS) when the table is
empty or a flow has never run; informational when calls exist and none are
100%-failing. New `doctor.msg.llm-telemetry.silent-failure` catalogue entry
in all 11 dashboard locales.

- **A split lesson no longer starts its life carrying its parent bucket's
stale recall history.** `splitFusedLessons` moves a fused `-other` bucket's
observations into their own entities but left `recall_hits`/`recall_misses`
on the now-empty, archived bucket forever — measured, 4 of 49 already-split
shells on a real graph still carried nonzero history (one at 3 hits / 61
misses), which `scripts/audit/measure-signals.mjs`'s unfiltered
`SUM(recall_hits) FROM entities` counts to this day. The bucket's rate is
itself an artifact of the fusion being repaired — a bucket fusing many
unrelated lessons gets injected broadly and cited rarely, which is not a
measurement of what any one lesson in it is worth — so it is not divided or
copied onto the successors (they correctly start at 0/0); the shell's own
counters are zeroed and the number is kept for forensic reading under
`metadata.retired_recall`. A new one-shot repair
(`repairFusedLessonShellHistory`) retires the history on shells already in
this state, and `scripts/audit/memory-invariants.mjs` gained
`split-lesson-shell-carries-no-recall-history` to keep it caught.

- **The Ollama host guard now rebuilds the request origin instead of forwarding
the configured string.** `resolveOllamaHost` used to validate a persisted
`llm.host` and then pass the same string to `fetch`, which left CodeQL alert
Expand Down
6 changes: 3 additions & 3 deletions dashboard/dist/index.html

Large diffs are not rendered by default.

22 changes: 22 additions & 0 deletions dashboard/src/lib/i18n.ts

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/core/doctor.d.ts.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

31 changes: 31 additions & 0 deletions dist/core/doctor.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion dist/core/doctor.js.map

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/db.d.ts.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion dist/db.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion dist/db.js.map

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions dist/storage/graph-repairs.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ export declare const ZERO_EDIT_RETRACT_KEY = "session_zero_edit_retract";
export declare const FUSED_LESSON_SPLIT_KEY = "fused_lesson_split";
export declare const ARCHIVED_FTS_ROWS_KEY = "archived_fts_rows";
export declare const ARCHIVED_VECTOR_ROWS_KEY = "archived_vector_rows";
export declare const FUSED_LESSON_SHELL_HISTORY_RESET_KEY = "fused_lesson_shell_history_reset";
export declare function dedupeObservations(db: MemeshDatabase): number;
export declare function bashWritesFiles(command: string): boolean;
export declare function retractZeroEditClaims(db: MemeshDatabase): number;
Expand All @@ -15,4 +16,5 @@ export declare function dropArchivedIndexRows(db: MemeshDatabase): {
ftsRows: number;
vectorRows: number;
};
export declare function repairFusedLessonShellHistory(db: MemeshDatabase): number;
//# sourceMappingURL=graph-repairs.d.ts.map
2 changes: 1 addition & 1 deletion dist/storage/graph-repairs.d.ts.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading