musememory 3.2.0 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/artifacts/2026-10-26-dashboard-rehaul-rashin-research-and-wave-23-tickets.md +2 -0
- package/.agents/artifacts/README.md +21 -0
- package/.agents/artifacts/TECHNICAL_DEBT-wave24-25.md +12 -0
- package/.agents/artifacts/TECHNICAL_DEBT-wave26.md +11 -0
- package/.agents/artifacts/TECHNICAL_DEBT-wave27.md +13 -0
- package/.agents/artifacts/gauntlet-wave23-pr1/ACCEPTANCE_PACKET.md +85 -0
- package/.agents/artifacts/gauntlet-wave23-pr1/GAUNTLET_JOB_CONTRACT.md +50 -0
- package/.agents/artifacts/gauntlet-wave23-pr1/ITERATION_LEDGER.md +131 -0
- package/.agents/artifacts/gauntlet-wave23-pr1/TECHNICAL_DEBT.md +28 -0
- package/.agents/artifacts/gauntlet-wave23-pr456/ACCEPTANCE_PACKET.md +22 -0
- package/.agents/artifacts/gauntlet-wave23-pr456/GAUNTLET_JOB_CONTRACT.md +41 -0
- package/.agents/artifacts/gauntlet-wave23-pr456/ITERATION_LEDGER.md +36 -0
- package/.agents/artifacts/gauntlet-wave24-25/ACCEPTANCE_PACKET.md +13 -0
- package/.agents/artifacts/gauntlet-wave24-25/ITERATION_LEDGER.md +28 -0
- package/.agents/artifacts/gauntlet-wave25-wiring/ACCEPTANCE_PACKET.md +7 -0
- package/.agents/artifacts/gauntlet-wave25-wiring/ITERATION_LEDGER.md +27 -0
- package/.agents/artifacts/gauntlet-wave27/ACCEPTANCE_PACKET.md +7 -0
- package/.agents/artifacts/gauntlet-wave27/ITERATION_LEDGER.md +36 -0
- package/.agents/artifacts/outcome-study-2026-11/README.md +64 -0
- package/.agents/artifacts/outcome-study-2026-11/graders/bytes.test.ts +12 -0
- package/.agents/artifacts/outcome-study-2026-11/graders/clone.test.ts +26 -0
- package/.agents/artifacts/outcome-study-2026-11/graders/csv.test.ts +11 -0
- package/.agents/artifacts/outcome-study-2026-11/graders/duration.test.ts +12 -0
- package/.agents/artifacts/outcome-study-2026-11/graders/isodate.test.ts +7 -0
- package/.agents/artifacts/outcome-study-2026-11/graders/money.test.ts +11 -0
- package/.agents/artifacts/outcome-study-2026-11/graders/percent.test.ts +11 -0
- package/.agents/artifacts/outcome-study-2026-11/graders/semver.test.ts +12 -0
- package/.agents/artifacts/outcome-study-2026-11/graders/slug.test.ts +12 -0
- package/.agents/artifacts/outcome-study-2026-11/graders/truncate.test.ts +10 -0
- package/.agents/artifacts/outcome-study-2026-11/tasks/bytes.md +3 -0
- package/.agents/artifacts/outcome-study-2026-11/tasks/clone.md +3 -0
- package/.agents/artifacts/outcome-study-2026-11/tasks/csv.md +3 -0
- package/.agents/artifacts/outcome-study-2026-11/tasks/duration.md +3 -0
- package/.agents/artifacts/outcome-study-2026-11/tasks/isodate.md +3 -0
- package/.agents/artifacts/outcome-study-2026-11/tasks/money.md +3 -0
- package/.agents/artifacts/outcome-study-2026-11/tasks/percent.md +3 -0
- package/.agents/artifacts/outcome-study-2026-11/tasks/semver.md +3 -0
- package/.agents/artifacts/outcome-study-2026-11/tasks/slug.md +3 -0
- package/.agents/artifacts/outcome-study-2026-11/tasks/truncate.md +3 -0
- package/.agents/context/architecture.md +7 -7
- package/.agents/context/current.md +216 -8
- package/.agents/context/decisions.md +8 -0
- package/.agents/context/deep-research-agentic-memory-evolution.md +1 -1
- package/.agents/context/evidence-ledger.md +99 -0
- package/.agents/context/index.md +1 -1
- package/.agents/context/product.md +4 -0
- package/.agents/context/roadmap.md +19 -16
- package/.agents/context/ticket-plan.md +147 -47
- package/.agents/plans/2026-10-20-wave-22-failure-attribution-negative-mining-design.md +1 -1
- package/.agents/plans/2026-10-20-wave-22-failure-attribution-negative-mining-plan.md +1 -1
- package/.agents/standards/README.md +6 -1
- package/.agents/standards/anti-patterns.md +116 -0
- package/.agents/standards/boundary-governance.md +52 -0
- package/.agents/standards/frontend-astro.md +3 -1
- package/.agents/standards/language-policy.md +115 -0
- package/.agents/standards/memory-context.md +1 -1
- package/.agents/standards/security-vibeguard.md +1 -1
- package/.agents/standards/test-failure-audit.md +46 -0
- package/.agents/standards/visual-inspection.md +31 -0
- package/README.md +7 -4
- package/claims.json +5 -5
- package/dist/index.js +12530 -7037
- package/docs/agent-reference.md +10 -1
- package/docs/cli-reference.md +32 -8
- package/docs/mcp-tool-matrix.json +12 -1
- package/package.json +2 -1
- package/schema.json +1 -0
- package/.agents/artifacts/2026-10-20-lifeos-memory-distillation-plan.md +0 -865
- package/.agents/artifacts/2026-10-26-wave-29-code-review-audit.md +0 -52
- package/.agents/artifacts/2026-10-26-wave-29-gauntlet-acceptance-packet.md +0 -48
- package/.agents/artifacts/2026-10-26-wave-29-muse-security-audit.md +0 -71
- package/.agents/artifacts/2026-10-26-wave-29-sovereign-lifeos-migration-plan.md +0 -88
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Outcome Study — With/Without Memory (2026-11-09)
|
|
2
|
+
|
|
3
|
+
A ten-task, condition-blind study of whether recalled project conventions change
|
|
4
|
+
an agent's implementation output. This replaces the two-task pilot in
|
|
5
|
+
`docs/evidence/2026-11-outcome-pilot.md` as the evidence behind EVD-005/EVD-008.
|
|
6
|
+
|
|
7
|
+
## Design
|
|
8
|
+
|
|
9
|
+
- **Tasks**: ten small TypeScript functions (`formatMoney`, `parseDuration`,
|
|
10
|
+
`formatBytes`, `toIsoDate`, `truncateText`, `slugify`, `compareSemver`,
|
|
11
|
+
`cloneValue`, `formatPercent`, `csvField`). Each has a hidden Bun test that
|
|
12
|
+
checks ordinary correctness *and* one non-obvious project convention.
|
|
13
|
+
- **Arms**: identical instructions in both arms. Every implementer was told to
|
|
14
|
+
run `memory recall "<query>" --project outcome-study` before writing code.
|
|
15
|
+
The *only* difference was whether the convention was seeded in the store:
|
|
16
|
+
- `with`: all ten conventions (confirmed constraints) plus three decoys.
|
|
17
|
+
- `without`: one generic decoy only.
|
|
18
|
+
- **Blinding**: implementers were not told a study existed, were not told which
|
|
19
|
+
arm they were in, and never saw the hidden tests. Grading was mechanical.
|
|
20
|
+
- **Grading**: each solution was copied beside its hidden test and run with
|
|
21
|
+
`bun test` under `TZ=America/New_York` (non-UTC, so the date convention is
|
|
22
|
+
actually discriminating).
|
|
23
|
+
- **Model**: one model per arm, matching the pilot's single-model design.
|
|
24
|
+
|
|
25
|
+
## Result
|
|
26
|
+
|
|
27
|
+
| Task | With | Without | Failure without memory |
|
|
28
|
+
|---|---|---|---|
|
|
29
|
+
| `formatMoney` | pass | pass | — |
|
|
30
|
+
| `parseDuration` | pass | **fail** | returned milliseconds (500 for `"500ms"`) |
|
|
31
|
+
| `formatBytes` | pass | pass | — |
|
|
32
|
+
| `toIsoDate` | pass | **fail** | local calendar date (`2025-12-31` for a UTC `2026-01-01`) |
|
|
33
|
+
| `truncateText` | pass | pass | — |
|
|
34
|
+
| `slugify` | pass | **fail** | no 60-character cap (returned 80) |
|
|
35
|
+
| `compareSemver` | pass | pass | — |
|
|
36
|
+
| `cloneValue` | pass | pass | — |
|
|
37
|
+
| `formatPercent` | pass | pass | — |
|
|
38
|
+
| `csvField` | pass | **fail** | did not quote leading/trailing whitespace |
|
|
39
|
+
|
|
40
|
+
**with memory 10/10 (100%) · without memory 6/10 (60%)** — a 40-point gap,
|
|
41
|
+
four discriminating tasks, zero regressions (no task passed without memory and
|
|
42
|
+
failed with it).
|
|
43
|
+
|
|
44
|
+
Fisher's exact test, one-sided: **p = 0.043** (two-sided ≈ 0.087). The direction
|
|
45
|
+
is consistent, but n = 10 is small.
|
|
46
|
+
|
|
47
|
+
## Limits
|
|
48
|
+
|
|
49
|
+
- Ten tasks, one run per arm, one model. Not a productivity study.
|
|
50
|
+
- The task set was constructed so each task carries an unstated convention;
|
|
51
|
+
that deliberately favours memory and makes 40 points an upper bound for
|
|
52
|
+
ordinary work.
|
|
53
|
+
- The harness supplied the retrieval query; an agent choosing its own query
|
|
54
|
+
(or not querying at all) is a different, untested condition.
|
|
55
|
+
- Five tasks did not discriminate: those conventions were either guessed
|
|
56
|
+
correctly or did not affect the hidden test.
|
|
57
|
+
|
|
58
|
+
## Reproducing
|
|
59
|
+
|
|
60
|
+
- `tasks/<id>.md` — the exact implementer prompt for each task.
|
|
61
|
+
- `graders/<id>.test.ts` — the hidden test for each task.
|
|
62
|
+
- Rebuild fixtures and rerun with a fresh agent population; the seeds are the
|
|
63
|
+
convention sentences in this directory's history. Do not reuse these graders
|
|
64
|
+
for a second study against the same model without authoring new tasks.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { expect, test } from "bun:test";
|
|
2
|
+
import { formatBytes } from "./solution";
|
|
3
|
+
test("formatBytes", () => {
|
|
4
|
+
expect(formatBytes(0)).toBe("0 B");
|
|
5
|
+
expect(formatBytes(512)).toBe("512 B");
|
|
6
|
+
expect(formatBytes(1024)).toBe("1.0 KiB");
|
|
7
|
+
expect(formatBytes(1536)).toBe("1.5 KiB");
|
|
8
|
+
expect(formatBytes(1048576)).toBe("1.0 MiB");
|
|
9
|
+
expect(formatBytes(1073741824)).toBe("1.0 GiB");
|
|
10
|
+
expect(formatBytes(1500000)).toBe("1.4 MiB");
|
|
11
|
+
expect(formatBytes(1023)).toBe("1023 B");
|
|
12
|
+
});
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { expect, test } from "bun:test";
|
|
2
|
+
import { cloneValue } from "./solution";
|
|
3
|
+
test("cloneValue", () => {
|
|
4
|
+
const d = new Date(1700000000000);
|
|
5
|
+
const cd = cloneValue(d);
|
|
6
|
+
expect(cd).toBeInstanceOf(Date);
|
|
7
|
+
expect(cd.getTime()).toBe(d.getTime());
|
|
8
|
+
expect(cd).not.toBe(d);
|
|
9
|
+
|
|
10
|
+
const m = new Map<string, number>([["a", 1]]);
|
|
11
|
+
const cm = cloneValue(m);
|
|
12
|
+
expect(cm).toBeInstanceOf(Map);
|
|
13
|
+
expect(cm.get("a")).toBe(1);
|
|
14
|
+
expect(cm).not.toBe(m);
|
|
15
|
+
|
|
16
|
+
const s = new Set([1, 2]);
|
|
17
|
+
const cs = cloneValue(s);
|
|
18
|
+
expect(cs).toBeInstanceOf(Set);
|
|
19
|
+
expect(cs.has(2)).toBe(true);
|
|
20
|
+
|
|
21
|
+
const obj = { a: { b: [1, 2] }, n: null as null | number };
|
|
22
|
+
const co = cloneValue(obj);
|
|
23
|
+
expect(co).toEqual(obj);
|
|
24
|
+
co.a.b.push(3);
|
|
25
|
+
expect(obj.a.b.length).toBe(2);
|
|
26
|
+
});
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { expect, test } from "bun:test";
|
|
2
|
+
import { csvField } from "./solution";
|
|
3
|
+
test("csvField", () => {
|
|
4
|
+
expect(csvField("abc")).toBe("abc");
|
|
5
|
+
expect(csvField("")).toBe("");
|
|
6
|
+
expect(csvField("a,b")).toBe('"a,b"');
|
|
7
|
+
expect(csvField('he said "hi"')).toBe('"he said ""hi"""');
|
|
8
|
+
expect(csvField("line\nbreak")).toBe('"line\nbreak"');
|
|
9
|
+
expect(csvField(" padded ")).toBe('" padded "');
|
|
10
|
+
expect(csvField('a"b')).toBe('"a""b"');
|
|
11
|
+
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { expect, test } from "bun:test";
|
|
2
|
+
import { parseDuration } from "./solution";
|
|
3
|
+
test("parseDuration", () => {
|
|
4
|
+
expect(parseDuration("500ms")).toBe(0.5);
|
|
5
|
+
expect(parseDuration("30s")).toBe(30);
|
|
6
|
+
expect(parseDuration("5m")).toBe(300);
|
|
7
|
+
expect(parseDuration("2h")).toBe(7200);
|
|
8
|
+
expect(parseDuration("45")).toBe(45);
|
|
9
|
+
expect(parseDuration("1.5h")).toBe(5400);
|
|
10
|
+
expect(parseDuration("10S")).toBe(10);
|
|
11
|
+
expect(() => parseDuration("banana")).toThrow();
|
|
12
|
+
});
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { expect, test } from "bun:test";
|
|
2
|
+
import { toIsoDate } from "./solution";
|
|
3
|
+
test("toIsoDate", () => {
|
|
4
|
+
expect(toIsoDate(new Date(Date.UTC(2026, 0, 1, 0, 0, 0)))).toBe("2026-01-01");
|
|
5
|
+
expect(toIsoDate(new Date(Date.UTC(2026, 11, 31, 23, 59, 59)))).toBe("2026-12-31");
|
|
6
|
+
expect(toIsoDate(new Date(Date.UTC(2026, 2, 5, 12, 0, 0)))).toBe("2026-03-05");
|
|
7
|
+
});
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { expect, test } from "bun:test";
|
|
2
|
+
import { formatMoney } from "./solution";
|
|
3
|
+
test("formatMoney", () => {
|
|
4
|
+
expect(formatMoney(123456)).toBe("$1,234.56");
|
|
5
|
+
expect(formatMoney(0)).toBe("$0.00");
|
|
6
|
+
expect(formatMoney(5)).toBe("$0.05");
|
|
7
|
+
expect(formatMoney(1234)).toBe("$12.34");
|
|
8
|
+
expect(formatMoney(-123456)).toBe("-$1,234.56");
|
|
9
|
+
expect(formatMoney(-5)).toBe("-$0.05");
|
|
10
|
+
expect(formatMoney(123456789)).toBe("$1,234,567.89");
|
|
11
|
+
});
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { expect, test } from "bun:test";
|
|
2
|
+
import { formatPercent } from "./solution";
|
|
3
|
+
test("formatPercent", () => {
|
|
4
|
+
expect(formatPercent(0.5)).toBe("50%");
|
|
5
|
+
expect(formatPercent(0.125)).toBe("12.5%");
|
|
6
|
+
expect(formatPercent(1)).toBe("100%");
|
|
7
|
+
expect(formatPercent(0)).toBe("0%");
|
|
8
|
+
expect(formatPercent(0.333)).toBe("33.3%");
|
|
9
|
+
expect(formatPercent(-0.25)).toBe("-25%");
|
|
10
|
+
expect(formatPercent(1).includes(".0")).toBe(false);
|
|
11
|
+
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { expect, test } from "bun:test";
|
|
2
|
+
import { compareSemver } from "./solution";
|
|
3
|
+
test("compareSemver", () => {
|
|
4
|
+
expect(compareSemver("1.0.0", "1.0.1")).toBe(-1);
|
|
5
|
+
expect(compareSemver("1.0.0-alpha", "1.0.0")).toBe(-1);
|
|
6
|
+
expect(compareSemver("1.0.0", "1.0.0-alpha")).toBe(1);
|
|
7
|
+
expect(compareSemver("1.0.0-alpha.1", "1.0.0-alpha.2")).toBe(-1);
|
|
8
|
+
expect(compareSemver("1.0.0-alpha.10", "1.0.0-alpha.2")).toBe(1);
|
|
9
|
+
expect(compareSemver("1.0.0+build1", "1.0.0+build2")).toBe(0);
|
|
10
|
+
expect(compareSemver("2.0.0", "10.0.0")).toBe(-1);
|
|
11
|
+
expect(compareSemver("1.2.3", "1.2.3")).toBe(0);
|
|
12
|
+
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { expect, test } from "bun:test";
|
|
2
|
+
import { slugify } from "./solution";
|
|
3
|
+
test("slugify", () => {
|
|
4
|
+
expect(slugify("Héllo, World!")).toBe("hello-world");
|
|
5
|
+
expect(slugify(" A B ")).toBe("a-b");
|
|
6
|
+
expect(slugify("foo_bar")).toBe("foo-bar");
|
|
7
|
+
expect(slugify("Café Déjà Vu")).toBe("cafe-deja-vu");
|
|
8
|
+
expect(slugify("---")).toBe("");
|
|
9
|
+
const long = slugify("a".repeat(80));
|
|
10
|
+
expect(long.length).toBe(60);
|
|
11
|
+
expect(long.endsWith("-")).toBe(false);
|
|
12
|
+
});
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { expect, test } from "bun:test";
|
|
2
|
+
import { truncateText } from "./solution";
|
|
3
|
+
test("truncateText", () => {
|
|
4
|
+
expect(truncateText("short", 10)).toBe("short");
|
|
5
|
+
expect(truncateText("hello world", 8)).toBe("hello w…");
|
|
6
|
+
expect(truncateText("abcdef", 1)).toBe("…");
|
|
7
|
+
expect(truncateText("abcdef", 6)).toBe("abcdef");
|
|
8
|
+
expect(truncateText("😀😀😀", 2)).toBe("😀…");
|
|
9
|
+
expect(truncateText("hello world", 8).length).toBe(8);
|
|
10
|
+
});
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
│ │
|
|
16
16
|
│ ┌───────────────────┐ ┌──────────────────┐ ┌──────────────┐ │
|
|
17
17
|
│ │ Retrieval Engine │ │ Vibeguard Secret │ │ Auto-Migrate │ │
|
|
18
|
-
│ │ (Token Knapsack) │ │ Defense Scanner │ │ (
|
|
18
|
+
│ │ (Token Knapsack) │ │ Defense Scanner │ │ (30 Formats)│ │
|
|
19
19
|
│ └───────────────────┘ └──────────────────┘ └──────────────┘ │
|
|
20
20
|
│ ┌───────────────────┐ ┌──────────────────┐ ┌──────────────┐ │
|
|
21
21
|
│ │ LifeCycle Machine │ │ JSONL Harvester │ │ Audit Ledger │ │
|
|
@@ -58,14 +58,14 @@ musememory/
|
|
|
58
58
|
│ ├── cognition/ # Autonomous "Why" reasoner, bug clustering, tech debt
|
|
59
59
|
│ ├── compaction/ # 70% context compaction engine & session handoffs
|
|
60
60
|
│ ├── compounding/ # Unified knowledge compounding (temporal & clustering)
|
|
61
|
-
│ ├── connect.ts # Declarative zero-permission auto-wiring across
|
|
61
|
+
│ ├── connect.ts # Declarative zero-permission auto-wiring across 52 agent platforms
|
|
62
62
|
│ ├── current.ts # CURRENT.md read/append constraints engine
|
|
63
63
|
│ ├── doctor.ts # Ecosystem diagnostic & health check engine
|
|
64
64
|
│ ├── health/ # Unified 5-Pillar Project Health Gate engine
|
|
65
65
|
│ ├── harvester.ts # Universal agent transcript discovery and auto-learner engine
|
|
66
66
|
│ ├── intelligence/ # Pluggable code intelligence providers (CodeGraph, Graphify, LSP, AST)
|
|
67
67
|
│ ├── learning/ # Observation, candidate distillation, negative anti-patterns
|
|
68
|
-
│ ├── mcp.ts # Model Context Protocol stdio server (
|
|
68
|
+
│ ├── mcp.ts # Model Context Protocol stdio server (126 tools with profiles)
|
|
69
69
|
│ ├── mesh/ # Multi-repo & monorepo workspace discovery, query resolver, contracts
|
|
70
70
|
│ ├── orchestrator/ # Flagship muse_context fusion, bidirectional lookups, MCP profiles
|
|
71
71
|
│ ├── paths.ts # Strict path containment (resolveWithin) & intentional-external opt-out (resolveExternal)
|
|
@@ -81,10 +81,10 @@ musememory/
|
|
|
81
81
|
│ ├── types.ts # Core TypeScript interfaces & enums
|
|
82
82
|
│ ├── ui.ts # Full Web Observability Studio & 3D knowledge graph
|
|
83
83
|
│ ├── user.ts # Persona & working preference engine
|
|
84
|
-
│ ├── agents/ # Workstation coding agents detection & registry (
|
|
85
|
-
│ └── migrator/ # Multi-provider auto-detection & migration engine (
|
|
86
|
-
├── test/ # Automated Bun test suites (
|
|
87
|
-
├── package.json # Package metadata & dependencies (
|
|
84
|
+
│ ├── agents/ # Workstation coding agents detection & registry (52 platforms)
|
|
85
|
+
│ └── migrator/ # Multi-provider auto-detection & migration engine (30 providers)
|
|
86
|
+
├── test/ # Automated Bun test suites (1592 tests across 252 suites)
|
|
87
|
+
├── package.json # Package metadata & dependencies (v3.4.0)
|
|
88
88
|
└── dist/ # Compiled Node/Bun bundle
|
|
89
89
|
```
|
|
90
90
|
|
|
@@ -1,18 +1,197 @@
|
|
|
1
1
|
# 📍 Current Shipped State & Active Invariants
|
|
2
2
|
|
|
3
|
-
> **Version**: `v3.
|
|
4
|
-
> **Status**: Wave 29 Landed — Sovereign
|
|
3
|
+
> **Version**: `v3.4.0` (post-release `dev`)
|
|
4
|
+
> **Status**: Wave 29 Landed — Sovereign Ecosystem Migration & Complete Decommissioning (T-444 to T-448).
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 🧾 Session — Changelog Repair & D5 Write Race (2026-11-10)
|
|
9
|
+
|
|
10
|
+
**v3.3.0 shipped with no changelog section.** The tag and the npm publish
|
|
11
|
+
both went out while all 29 release bullets were still under `[Unreleased]`,
|
|
12
|
+
so the published release notes omitted the entire release; the section also
|
|
13
|
+
carried two separate `### Added` headings. Promoted the 29 bullets verbatim
|
|
14
|
+
into a dated `[3.3.0]` section (verified byte-identical against
|
|
15
|
+
`git show v3.3.0:CHANGELOG.md`), rebuilt `[Unreleased]` from only the 12
|
|
16
|
+
post-tag bullets, and added the five changes from this session. There is no
|
|
17
|
+
CI check for changelog structure — this was only caught by reading it.
|
|
18
|
+
|
|
19
|
+
**D5 — playbook writes lost data across processes.** The debt said "random
|
|
20
|
+
temp suffix + fsync". Implementing exactly that did **not** fix the bug: 8
|
|
21
|
+
concurrent processes still persisted only 5. The temp-name fix prevents
|
|
22
|
+
staging collisions, but `savePlaybook` and `recordPlaybookOutcome` are
|
|
23
|
+
read-modify-write, so both processes read the same list and the later rename
|
|
24
|
+
drops the earlier write. Wrapping both in the existing `withStoreLock`
|
|
25
|
+
fixed it — 8/8 persist. Outcome recording had the same race, silently
|
|
26
|
+
corrupting the success/failure ratio ranking depends on.
|
|
27
|
+
|
|
28
|
+
**Lesson recorded:** the first regression test used an in-process
|
|
29
|
+
`Promise.all` race and passed with *and* without the fix, because the write
|
|
30
|
+
path is synchronous and can never interleave in one process. It was
|
|
31
|
+
replaced with a real multi-process test; both guards now fail against the
|
|
32
|
+
old implementation (6 expected, 3 received).
|
|
33
|
+
|
|
34
|
+
Gate: `bun test` 1592/1592 pass across 252 files; `bunx tsc --noEmit`
|
|
35
|
+
clean; `check:landed` → **LANDED** at `9270d97`.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## 🧾 Session — Stack Landing, W26-5 CTE Bound & PR Queue Cleanup (2026-11-10)
|
|
40
|
+
|
|
41
|
+
**CI gap on stacked PRs (#390).** The `pull_request` trigger listed only
|
|
42
|
+
`main`/`master`/`dev`. Retargeting stacked PRs onto their parent branches
|
|
43
|
+
therefore left three of four layers with **no CI at all** — they reported
|
|
44
|
+
"no checks reported" and looked fine to a reviewer. Widened the filter to
|
|
45
|
+
`["**"]`. Note for future stack work: GitHub reads `pull_request`
|
|
46
|
+
workflows from the **base** branch, so the fix has to reach the base first.
|
|
47
|
+
Retargeting alone emits no event; a close/reopen is what re-triggers CI.
|
|
48
|
+
|
|
49
|
+
**W26-5 — recursive CTE bound.** `maxNodes` was clamped and passed to SQL,
|
|
50
|
+
but `LIMIT` sat only on the outer `SELECT`, so SQLite materialised the whole
|
|
51
|
+
reachable frontier before projecting. `preflightContext` calls this path on
|
|
52
|
+
every file open. A `LIMIT` inside the recursive member took a 3000-node
|
|
53
|
+
dense graph from **269.8ms to 9.7ms** (27x) with identical output. The
|
|
54
|
+
regression test asserts a 50ms ceiling and was verified to *fail* without
|
|
55
|
+
the fix (177ms) — a guard that only passes is not a guard.
|
|
56
|
+
|
|
57
|
+
**W26-2 follow-up.** The over-budget message printed the pack total beside
|
|
58
|
+
the word "over" — "192 tokens (over budget: 192 tokens)" reads as "over by
|
|
59
|
+
192" when the overage was 42. Now "(over the 150 budget)". Caught by
|
|
60
|
+
running the CLI, not by tests, which asserted engine fields but never the
|
|
61
|
+
printed line.
|
|
62
|
+
|
|
63
|
+
**PR queue cleaned.** Five spec PRs (#52–#56) were closed as superseded:
|
|
64
|
+
their content already lives in `roadmap.md` in more detail, they targeted
|
|
65
|
+
`main` against the `dev` convention, and each added a file to
|
|
66
|
+
`.agents/plans/` — gitignored by ADR-008, so merging would have re-tracked
|
|
67
|
+
a path the repo deliberately excluded.
|
|
68
|
+
|
|
69
|
+
Gate: `bun test` 1590/1590 pass across 252 files; `bunx tsc --noEmit`
|
|
70
|
+
clean; 162 doc links resolve; `check:landed` → **LANDED** at `df9e43f`.
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## 🧾 Session — Agent Context Sync & AI-Readiness Closeout (2026-11-10)
|
|
75
|
+
|
|
76
|
+
**Context drift repaired.** Agent-facing docs had fallen behind the engine:
|
|
77
|
+
`AGENTS.md` pinned `v3.0.2` and `.agents/context/index.md` pinned `v3.1.0`
|
|
78
|
+
while `package.json` is `3.3.0`. `architecture.md` still advertised 69 MCP
|
|
79
|
+
tools, 80+ agent platforms, 24+ migrator formats, 498 tests across 81 suites
|
|
80
|
+
and `v2.0.0`; the generated `claims.json` says 126 tools, 52 platforms, 30
|
|
81
|
+
providers and 1584 tests across 251 files. All corrected from the generated
|
|
82
|
+
source of truth, not from prose.
|
|
83
|
+
|
|
84
|
+
**Roadmap debt closed.** The status table was dated `v2.3.0` and still listed
|
|
85
|
+
"no branch-aware memory" as missing; `memory branch/checkout/blame` (R23) and
|
|
86
|
+
branch-isolated overlays (T-436) both shipped, so the row now records them.
|
|
87
|
+
|
|
88
|
+
**Standards adopted.** Five canonical core standards that were never present
|
|
89
|
+
here are now materialised and routed from `AGENTS.md`: `anti-patterns.md`,
|
|
90
|
+
`boundary-governance.md`, `test-failure-audit.md`, `language-policy.md` and
|
|
91
|
+
`visual-inspection.md`. Curated local standards (project-specific naming, the
|
|
92
|
+
project's own Landing Gate, `memory scan-secrets`) were deliberately **not**
|
|
93
|
+
overwritten — the canon differs from them by design, and the sync engine
|
|
94
|
+
reports that divergence rather than clobbering it.
|
|
95
|
+
|
|
96
|
+
**Audit 9/14 → 14/14.** Added the assets the readiness matrix was missing:
|
|
97
|
+
`.env.example` documenting the 15 real `MUSE_*` variables, `.mcp.json` wiring
|
|
98
|
+
this repo's own MCP server (smoke-tested over stdio), a root `llms.txt` index,
|
|
99
|
+
a `.agents/artifacts/README.md` contract stub, and the six Wave-23 terrain maps
|
|
100
|
+
generated by the repo's own `writeWorkspaceTerrain` (not hand-written), which
|
|
101
|
+
pass the terrain audit with zero credential leaks and zero hardcoded paths.
|
|
102
|
+
|
|
103
|
+
Gate: `bun test` 1584/1584 pass, `bunx tsc --noEmit` clean, 162 doc links
|
|
104
|
+
resolve, `--lint-context` clean, `--check` reports zero context drift.
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## 🧾 Session — Outcome Study & W27-7 Read-Only Surfaces (2026-11-09)
|
|
109
|
+
|
|
110
|
+
**Outcome study (EVD-008).** Replaced the two-task pilot with a ten-task,
|
|
111
|
+
condition-blind study. Both arms received identical instructions and were told
|
|
112
|
+
to consult memory; the only variable was whether ten project conventions were
|
|
113
|
+
seeded. Result: **10/10 with memory vs 6/10 without**, four discriminating tasks
|
|
114
|
+
(duration units, UTC dates, slug length cap, CSV whitespace quoting), zero
|
|
115
|
+
regressions, Fisher one-sided p = 0.043. EVD-005 is no longer quarantined — its
|
|
116
|
+
statement was narrowed to convention recall rather than an unqualified
|
|
117
|
+
productivity claim. Evidence: `docs/evidence/2026-11-outcome-study.md` and
|
|
118
|
+
`.agents/artifacts/outcome-study-2026-11/`.
|
|
119
|
+
|
|
120
|
+
**W27-7 read-only MCP surfaces.** Added three read-only tools with explicit
|
|
121
|
+
scope: `muse_enclave_recall` (client required, every read audit-logged),
|
|
122
|
+
`muse_overlay_status` (list or inspect branch overlays, never mutates), and
|
|
123
|
+
`muse_attestation_verify` (inline public key only — no model-supplied file
|
|
124
|
+
paths). `src/store/branch.ts` gained `listBranchOverlays`. Tool count 119 → 122;
|
|
125
|
+
claims and CLI reference regenerated; `test/mcp_readonly_surfaces.test.ts`
|
|
126
|
+
covers the happy paths, the fail-loud cases and the read-only guarantee.
|
|
127
|
+
Still open from the Wave 27 debt table: W27-8 (whole-vault rewrite) and W27-9
|
|
128
|
+
(overlay size caps).
|
|
129
|
+
|
|
130
|
+
**Follow-up (same day) — W27-8/W27-9 closed, R29 started.** Enclave vaults now
|
|
131
|
+
store one AES-256-GCM file per entry under `<client>/<division>/`; a write no
|
|
132
|
+
longer rewrites the vault, legacy single-file vaults stay readable and migrate
|
|
133
|
+
on the next write, and per-entry (1 MiB) plus per-vault (5000) caps fail loud.
|
|
134
|
+
Branch overlays are capped at 1000 entries / 2 MiB. `muse_enclave_recall` now
|
|
135
|
+
redacts credentials with `redactSecrets` before returning content. On the
|
|
136
|
+
operations side, `audit.jsonl` rotates at 5 MiB into `audit-archive/` (five
|
|
137
|
+
segments retained by default), pruning writes a chain anchor so
|
|
138
|
+
`getAuditTrail`/`getLastAuditHash`/`verifyAuditChain` remain valid across the
|
|
139
|
+
retained window, and `memory io [--json]` reports `/proc/self/io` counters plus
|
|
140
|
+
SQLite/WAL/audit/observation bytes. R29 is now complete except for optional
|
|
141
|
+
async batching: the YAML mirror can be skipped with `MUSE_YAML_MIRROR=0` /
|
|
142
|
+
`openStore({ yamlMirror: false })` (SQLite stays authoritative), and the WAL is
|
|
143
|
+
bounded by `wal_autocheckpoint = 512` and `journal_size_limit = 64 MiB`.
|
|
144
|
+
|
|
145
|
+
**Wave 28 complete (`T-440`–`T-443`).** The outcome loop is wired both ways:
|
|
146
|
+
`test_feedback.ts` parses bun/vitest/jest/cargo/pytest/go output, binds a real run
|
|
147
|
+
to the applied memory IDs, and reinforces green runs or records a failed
|
|
148
|
+
application plus a T-313 regression strike only for anchor-relevant memories.
|
|
149
|
+
`cognition/sentry.ts` matches failures against BUG_PRONE_PATTERN / DO_NOT_USE /
|
|
150
|
+
failed-approach memories and returns reproduction/avoidance/recommendation
|
|
151
|
+
playbooks without mutating anything. `doctor/flaky.ts` reconstructs the run
|
|
152
|
+
history and reports flaky tests (per command), failure bursts and dependency-file
|
|
153
|
+
drift before a burst. `cognition/remediation.ts` turns recurring failures into
|
|
154
|
+
playbook candidates and persists resolved ones (dry-run by default). Surfaces:
|
|
155
|
+
`memory test-feedback`, `sentry`, `flaky`, `remediation`, `memory_test_feedback`,
|
|
156
|
+
`muse_regression_sentry`, `muse_flaky_tests`, `muse_remediation_playbooks`
|
|
157
|
+
(126 tools).
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## 🧾 Session — Ticket Ledger Renumber & Remainder Audit (2026-11-08)
|
|
162
|
+
|
|
163
|
+
Wave 23's `T-405`–`T-422` collided with the already-landed `T-405` (conflicted injection) and `T-406` (project casing), so that block is now `T-451`–`T-468` across the plan, roadmap and this file. The historical blueprint keeps its original IDs with a translation note; `HANDOFF.md`'s `T-405`/`T-406` are the unrelated landed fixes and were left untouched. Every unchecked ticket was then verified against source: 4 were already implemented (`T-150`, `T-151`, `T-153`, `T-384`) and are now marked done, 15 are partial, 86 are genuinely unbuilt, `T-163` is dropped by principal decision D3, and `T-449`/`T-450` remain filed/deferred. Full evidence table: `.agents/context/ticket-plan.md` → v15. Doc-claim gate re-run green (20/20).
|
|
164
|
+
|
|
165
|
+
### Wave 23 PR 1 implemented (local, not landed)
|
|
166
|
+
|
|
167
|
+
`T-451`–`T-453` are implemented in the new `src/ui_assets.ts` module and wired through `src/ui.ts`:
|
|
168
|
+
|
|
169
|
+
- **T-451** — the studio now renders a fixed 76px left rail with six numbered sections (`01 OVERVIEW` … `06 ABOUT`), a tools group for the pre-existing views, a warm `#0c0a09` palette, and Archivo Black / JetBrains Mono typography. The rail uses words and numbers, not emoji.
|
|
170
|
+
- **T-452** — the header carries a project / global / mesh segmented switcher that refetches live. `/api/memories`, `/api/stats`, `/api/current`, `/api/wiki`, `/api/user-profile` and `/api/audit` resolve the scope; the global store (`~/.memory`) opens lazily and is never created by a read; mesh results carry `origin_project`. Mutations stay project-scoped and the studio shows a scope banner whenever it is not viewing the project store.
|
|
171
|
+
- **T-453** — CSS, markup and client JS are split out of the old 2,700-line template literal and served from `/assets/studio.css` and `/assets/studio.js` with strong ETags, pre-gzipped buffers, `Vary: Accept-Encoding` and 304 fast paths. The standalone export inlines the same modules.
|
|
172
|
+
|
|
173
|
+
Gate at merge: `bun test` **1451 pass / 0 fail** across 217 files, `tsc --noEmit` clean, `bun run build` 434 modules. **Landed in [PR #337](https://github.com/harshsinghmp/musememory/pull/337) at `d0c9600`** (2026-11-08); `check:landed` → `RESULT: LANDED`.
|
|
174
|
+
|
|
175
|
+
### Gauntlet run — CAPPED at the 5-round ceiling (2026-11-08)
|
|
176
|
+
|
|
177
|
+
Ran the bounded gauntlet loop against this PR (contract + ledger + packet in `.agents/artifacts/gauntlet-wave23-pr1/`). Five rounds: Fresh Critic scores **5.95 → 7.63 → 7.90 → 8.85 → 7.99**. Both R5 blockers were confirmed closed (mesh-link cache invalidation; scope-generation guards on every scoped fetch); the final critic left only small markup/ARIA/banner defects, which were fixed in the post-ceiling Integrator delta and verified by the gate but not re-critiqued. The packet is explicitly **CAPPED, not a PASS**. Final gate: **1450/0**, tsc clean, build 434 modules, zero overflow at 375/768/1280, 44×44 targets at 375/768, headers 4/4 (HSTS N/A), per-encoding ETags + wildcard 304 + 406 negotiation, secret scan clean. Residual debt (scope-race test, CSP `unsafe-inline`, mesh read-only store minting, duplicated `escapeHtml`, standalone export zeros) is in `TECHNICAL_DEBT.md`.
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## 🔧 Session — Sync Recovery (2026-11-03)
|
|
182
|
+
|
|
183
|
+
Restored `AGENTS.md` byte-exact from HEAD after an `updateagents` run from the umbrella directory replaced it (and persona files in sibling repos) with three-line adapters. Added `.commandcode/` and `.stversions/` to `.gitignore`, made the Syncthing ignore rules canonical in `~/.dotfiles/syncthing/`, and recorded the workspace-isolation invariant. The engine fix now stops at nested repository roots and refuses umbrella directories; the global install was refreshed. Repo-local recovery for `muse-agents` and `muse-skills` is owned by their respective agents.
|
|
5
184
|
|
|
6
185
|
---
|
|
7
186
|
|
|
8
187
|
## 🏛️ Wave 29 — Sovereign Ecosystem Migration & Decommissioning Complete (2026-10-26)
|
|
9
188
|
|
|
10
|
-
All personal identity, telos, operational rules, and hardware terrain scanning migrated into sovereign `musememory` engines, native Vibeguard secret scanning, and
|
|
189
|
+
All personal identity, telos, operational rules, and hardware terrain scanning migrated into sovereign `musememory` engines, native Vibeguard secret scanning, and decommissioned legacy agent governance. Legacy import tools have been permanently purged from source:
|
|
11
190
|
|
|
12
|
-
- **Sovereign Persona & Store Ingestion (`T-444`)**: Identity, telos, and operational rules synthesized directly into sovereign `~/.memory/USER.md` persona and SQLite store.
|
|
191
|
+
- **Sovereign Persona & Store Ingestion (`T-444`)**: Identity, telos, and operational rules synthesized directly into sovereign `~/.memory/USER.md` persona and SQLite store. The legacy import tool was permanently deleted from source.
|
|
13
192
|
- **Native Vibeguard CLI (`T-445`)**: `memory scan-secrets [dir]` standalone zero-dependency secret scanner replacing legacy external scripts (`test/cli_secrets.test.ts`).
|
|
14
193
|
- **Machine Terrain Collector (`T-446`)**: `memory terrain [--out file.md]` compiles deterministic hardware, toolchain, and local agent ecosystem maps into `system.md` (`test/vault_system.test.ts`).
|
|
15
|
-
- **Global Governance
|
|
194
|
+
- **Global Governance Decommissioning (`T-447`)**: Removed all 6 legacy imports and paths from `~/.agents/AGENTS.md` and repository standards, binding truth directly to `~/.memory/USER.md` and `memory` MCP.
|
|
16
195
|
- **Sovereignty Decommissioning Gate (`T-448`)**: Enforces zero external legacy imports, confirms legacy tool removal, and passes 100% cleanly in `test/sovereignty_gate.test.ts`.
|
|
17
196
|
- **Golden Sequence Documentation**: Published the complete 4-phase best-practice sequence for using Muse Memory with AI coding agents in `README.md`, `docs/agent-reference.md`, and `docs/cli-reference.md`.
|
|
18
197
|
|
|
@@ -139,7 +318,7 @@ on any blocking failure, so CI runs it. Report:
|
|
|
139
318
|
---
|
|
140
319
|
|
|
141
320
|
## ⏭️ Next Up (Post-Release Focus)
|
|
142
|
-
- **Wave
|
|
321
|
+
- **Waves 23–25 are complete.** Next is **Wave 26–29** (`T-432`–`T-443`): AST associative retrieval (`T-432`–`T-435`), branchable/enclave memory (`T-436`–`T-439`), test-driven reinforcement (`T-440`–`T-443`). Site note: unblock the Astro/cookie prerender error before any visual QA on the new pages:
|
|
143
322
|
- Full UI overhaul inspired by Ryoku Rashin (`http://127.0.0.1:3600`): fixed 76px left-rail cyber-minimalist navigation, instant Canvas Graph ↔ Filterable List toggle, 60fps kinetic-settling physics loop, and 52-week activity calendar heatmap.
|
|
144
323
|
- Multi-scope switcher: Project Scope (`./.memory`) vs Global User Scope (`~/.memory`) vs Cross-Project Mesh.
|
|
145
324
|
- Workspace Terrain Maps (`stack.md`, `habits.md`, `ownership.md`, `packages.md`, `repo.md`, `logs.md`) for token-efficient agent orientation.
|
|
@@ -154,6 +333,34 @@ on any blocking failure, so CI runs it. Report:
|
|
|
154
333
|
---
|
|
155
334
|
|
|
156
335
|
## 🏁 Recently Landed Waves (Verified on `dev`)
|
|
336
|
+
- [x] **Outcome pilot + RC blockers** (2026-11-09) — with/without pilot 2/2 vs 1/2; latency claims corrected to p95 targets; T-450 ADR-008 boundary; overlay GC, branch root identity, enclave put lock.
|
|
337
|
+
- [x] **Evidence + key lifecycle** (2026-11-09) — dogfood benchmark (hit@3 10/10, MRR 0.933, 68% token savings), evidence ledger with 2 quarantined claims, benchmark title-less crash fixed, `enclave keys/prune`, backup drill, runbook.
|
|
338
|
+
- [x] **Enclave key rotation + client-scope descope** (2026-11-09) — versioned keyring, `enclave rotate`, old-key rollback; `scope: client` descoped per ADR-007.
|
|
339
|
+
- [x] **Attestation v2 + merge guard** (2026-11-09) — seq/head/key-id pinning, truncation rejection; semantic merge blocks untrusted lineage, inflation and protected constraints.
|
|
340
|
+
- [x] **Wave 27 hardening** (2026-11-09) — audit-REJECT fixes: strict names, GCM AAD/key id, audited overlay merge via T-439, fail-closed merge3, corrected claims. Gate 1521/0; CAPPED.
|
|
341
|
+
- [x] **Wave 27 (`T-436`–`T-439`)** (2026-11-09) — branch overlays (#377), encrypted enclaves (#378), packet attestations (#379), three-way merge (#380). Tests 1514/0.
|
|
342
|
+
- [x] **Sensitive-read audit + project identity** (2026-11-09) — `read` audit events for `scope: "all"`/untrusted; configured project via env/config/`memory project`.
|
|
343
|
+
- [x] **Code-context security boundary** (2026-11-09) — project-scoped by default, untrusted opt-in, read-time redaction/sanitization, bounded inputs; `muse_memory_for_code` accepts project/include_untrusted.
|
|
344
|
+
- [x] **Unified code resolver** (2026-11-09) — `resolveMemoriesForCode` is the single matcher; pre-flight and PR context adapt it.
|
|
345
|
+
- [x] **Pre-flight surfaces** (2026-11-09) — PreToolUse hook + read-only `muse_preflight` MCP tool; 119 tools.
|
|
346
|
+
- [x] **Wave 26 (`T-432`–`T-435`)** (2026-11-09) — recursive-CTE associative expansion (`T-432`, direct `dev`), pre-flight context (`T-433`, #370), blast-radius risk (`T-434`, #371), anchor-matched auto-recall (`T-435`, #372). Tests 1495/0.
|
|
347
|
+
- [x] **Site build + scaffolding wiring** (2026-11-08) — PR #367 (Node Astro launcher; site:qa 17/17 SHIP) and #368 (briefing episodes, explicit `asserted_at` belief clock in `as_of`, duplicate decay removed).
|
|
348
|
+
- [x] **Wave 24–25 review hardening** (2026-11-08) — PR #366 merged at `a485875`; playbook rail preservation, fail-loud corrupt store, id-keyed updates, unique episode ids, goal-first phases, epoch timestamps, CLI flags, doc honesty. Gauntlet: REJECT → fixed, CAPPED; website visual gate blocked by pre-existing Astro/cookie prerender error.
|
|
349
|
+
- [x] **Wave 24 (`T-423`–`T-426`)** (2026-11-08) — terminal demo script/recipe, vendored sql.js playground, capability-only benchmark matrix, accessible agent demos. PRs #362–#365. Site prerender has a pre-existing Astro/cookie CJS blocker (entrypoints compile).
|
|
350
|
+
- [x] **Wave 25 (`T-427`–`T-431`)** (2026-11-08) — playbooks, episodes, bi-temporal belief windows, reinforced decay, and playbook CLI/MCP commands. PRs #356–#361.
|
|
351
|
+
- [x] **Post-Wave-23 debt sweep** (2026-11-08) — PR #355 merged at `432cf01`: agents discovery cache, backup retention, unwire tool-grant cleanup, mesh freshness bucket.
|
|
352
|
+
- [x] **Wave 23 gauntlet hardening** (2026-11-08) — PR #354 merged at `d2ea59c`; complete config backups (XDG-aware, timestamped, fail-loud), unknown-agent 404s, honest wire reporting, WAL/layout cache freshness, 44px phone controls. Gauntlet: 7.35 critic → REQUEST-CHANGES review → fixed; **CAPPED, not a PASS**. Evidence: `.agents/artifacts/gauntlet-wave23-pr456/`.
|
|
353
|
+
- [x] **Wave 23 PR 6 (`T-466`–`T-468`)** (2026-11-08) — projection cache, hidden-tab pause and the UI performance benchmark. **Wave 23 complete.** PRs #351–#353.
|
|
354
|
+
- [x] **Wave 23 PR 5 (`T-463`–`T-465`)** (2026-11-08) — poster About panel, quick-start cards and searchable command deck. PRs #348–#350.
|
|
355
|
+
- [x] **Wave 23 PR 4 (`T-460`–`T-462`)** (2026-11-08) — agents hub: discovery statuses, one-click wire/unwire with `.bak` backups and harness opt-in, point-any-agent manifest. PRs #345–#347.
|
|
356
|
+
- [x] **Wave 23 PR 3 / `T-459`** (2026-11-08) — PR #344 merged; generation-time redaction plus a token-savings and leak test (`test/vault_terrain.test.ts`).
|
|
357
|
+
- [x] **Wave 23 PR 3 / `T-458`** (2026-11-08) — PR #343 merged at `65113af`; terrain vault split-pane (tree, GEN badges, markdown viewer, REINDEX scanline).
|
|
358
|
+
- [x] **Wave 23 PR 3 / `T-457`** (2026-11-08) — PR #342 merged at `8006427`; deterministic workspace terrain generator and `terrain --workspace` CLI.
|
|
359
|
+
- [x] **Wave 23 PR 2 / `T-455`** (2026-11-08) — PR #340 merged at `05b4fdf`; energy-settling loop with wake hooks, deterministic ring seed, pointer capture.
|
|
360
|
+
- [x] **Wave 23 PR 2 / `T-456`** (2026-11-08) — PR #341 merged at `436d198`; scope-aware activity endpoint, 52-week heatmap and agent session cards.
|
|
361
|
+
- [x] **T-449 test hermeticity** (2026-11-08) — PR #338 merged at `94620895`; `findProjectRoot` no longer adopts `$HOME`/`/` as a project root, doc-link scan skips local sync state, regression test with a fake home. Earlier caller-scan fix merged via #337 (`c0f7aef`). Issue #336 closes.
|
|
362
|
+
- [x] **Wave 23 PR 2 / `T-454`** (2026-11-08) — PR #339 merged at `3e621fa`; instant graph/list toggle with a sortable table, `aria-sort`, and a 100ms debounced filter.
|
|
363
|
+
- [x] **Wave 23 PR 1 (`T-451`–`T-453`)** (2026-11-08) — merged in PR #337 at `d0c9600`; `check:landed` → **LANDED**. Left rail, dual-scope switcher, modular ETag/gzip assets, read-only global/mesh reads, 375/768/1280 verified, 1451/0 at merge. Follow-ups in PR #337's thread: stateful-regex flake fixed (`c0f7aef`), npm Bun CI fallback (`b298beb`). Gauntlet verdict: CAPPED at 7.99 (not a 9.0 PASS) — evidence in `.agents/artifacts/gauntlet-wave23-pr1/`.
|
|
157
364
|
- [x] **Released: v3.1.2** (2026-10-25) — completes the silent-casing fan-out:
|
|
158
365
|
- PR #330 merged at `d7e875b` (*"Release: v3.1.2"*); annotated tag
|
|
159
366
|
[`v3.1.2`](https://github.com/harshsinghmp/musememory/releases/tag/v3.1.2)
|
|
@@ -222,7 +429,7 @@ on any blocking failure, so CI runs it. Report:
|
|
|
222
429
|
- `T-144`: Trajectory fix-pair mining discovering negative memories (`AVOID: ...`) from *Error ➔ Remediation ➔ No Recurrence* observation sequences with affinity filters excluding non-mutating commands (`ls`, `cat`), dynamic line number normalization, Vibeguard secret scrubbing, and session volume cap of max 3 candidates (`test/fix_pair_mining.test.ts`, commit `cc4b5c5`).
|
|
223
430
|
- `T-314`: Source-tagged recall hits wiring `.memory/HOT.md` candidates into retrieval ranking with sub-millisecond memoized `mtime` cache, origin tagging (`source_channels: ("hot" | "fts" | "vector" | "tree" | "distilled")[]`), relevance-gated `sourceBonus` (+0.20), and explainability tokens (`source:hot`, `source:fts`) (`test/source_tagging_frequency.test.ts`, commit `f9f6a93`).
|
|
224
431
|
- `T-315`: LangMem logarithmic frequency rank curve ($0.25 \times \frac{\ln(1 + \text{effectiveCount})}{\ln(1 + 50)}$) replacing unbounded linear frequency scoring; weights verified memory applications $2\times$ over passive context loads; 7-day recency bonus (+0.05) capped at 0.30; outputs `freq:high` tokens (`test/source_tagging_frequency.test.ts`, commit `f3c8f1d`).
|
|
225
|
-
- [x] **Wave 21:
|
|
432
|
+
- [x] **Wave 21: Ecosystem Distillation, Mutation Safety & Knowledge Routing**:
|
|
226
433
|
- `T-050`: Overnight & in-lock mutation safety guards (`verifyMutationSafety`, `MutationSafetyError`, `ESUSPECT_SHRINK`, `ESUSPECT_EROSION`, `allowDrastic`) preventing accidental bulk erasure or semantic erosion during compaction/governance (`test/mutation_guards.test.ts`, commit `439e31c`).
|
|
227
434
|
- `T-177`: Pre-mutation 30-snapshot rolling ring buffer (`captureSnapshotRing`, `listSnapshotRing`, `restoreSnapshotRing`) with zero resident daemons in `.memory/snapshots/` before write transactions and compaction handoffs (`test/snapshot_ring.test.ts`, commit `76c58eb`).
|
|
228
435
|
- `T-324`: Diff-preserving `CURRENT.md` checkpoint merge semantics (`parseCurrentConstraints`, `mergeCurrentConstraints`), preventing mid-session hand-added constraints from being overwritten (`test/current_compaction_guard.test.ts`, commit `f1a4756`).
|
|
@@ -415,8 +622,9 @@ Removed remaining competitor product names and external comparison links from we
|
|
|
415
622
|
- **Zero External Daemons**: All operations must execute in-process via SQLite (`memory.db`) or flat files. Never depend on background servers.
|
|
416
623
|
- **Fail Fast**: Throw loudly on secret detection, invalid schema shapes, or unconfirmed supersessions.
|
|
417
624
|
- **Verification Gate**: Before declaring changes complete, `bun test`, `bun run build`, and `tsc --noEmit` must pass.
|
|
625
|
+
- **Workspace Isolation & Sync Boundary**: Never run repo-mutating scaffolders from a parent directory; nested clones are separate scopes. Never sync `.git` or a live SQLite store (`.memory/`).
|
|
418
626
|
|
|
419
627
|
## 1. Verified Shipped Reality
|
|
420
628
|
- **2026-10-22**: T-321 per-project health gate scope
|
|
421
629
|
- **2026-10-22**: T-320 contradiction engine calibration
|
|
422
|
-
- **2026-10-20**: Wave 21:
|
|
630
|
+
- **2026-10-20**: Wave 21: Ecosystem Distillation, Mutation Safety & Knowledge Routing (T-050, T-177, T-324)
|
|
@@ -27,3 +27,11 @@
|
|
|
27
27
|
### ADR-006: Harness-Independent Hook Installation (Global Standard First)
|
|
28
28
|
- **Decision**: `memory hooks install` resolves its target as explicit `settingsPath` → explicit `--harness` opt-in → global standard (project `.agents/hooks.json` when a `.agents/` directory exists, otherwise `~/.agents/hooks.json`). A harness path (e.g. `~/.claude/settings.json`) is never auto-selected, and `connectAgent` skips harness-specific agents without an explicit `--harness` opt-in.
|
|
29
29
|
- **Rationale** (principal ruling, 2026-10-15): the runtime is vendor-neutral — hooks must not couple memory to one harness or create a harness directory unprompted. A pre-existing harness settings file does not imply consent; only `--harness claude` does.
|
|
30
|
+
|
|
31
|
+
### ADR-007: Client Scope Descoped from the Memory Store
|
|
32
|
+
- **Decision** (2026-11-09): `scope: client` is not added to `MemoryScope`. Client enclaves remain an explicit encrypted vault (`memory enclave create|list|put|rotate`) outside normal retrieval, recall, and MCP surfaces.
|
|
33
|
+
- **Rationale**: wiring a tenant scope through store/retrieval/sync would make cross-tenant disclosure a single filter bug away. The encrypted vault has its own key lifecycle and is auditable at the CLI boundary. Revisit only with a tenant-aware store substrate and per-client key rotation tests.
|
|
34
|
+
|
|
35
|
+
### ADR-008: Agent Workspace Tracking Boundary (T-450)
|
|
36
|
+
- **Decision** (2026-11-09): keep `.agents/standards/`, `.agents/skills/`, `.agents/context/`, `.agents/brand/`, `.agents/artifacts/` and `.agents/research/` tracked. Ignore new ephemeral state under `.agents/plans/`, `.agents/archive/`, `.agents/worktree-leases/` and `.agents/scratch/`. Already-tracked files stay tracked for history; the rule applies to new files.
|
|
37
|
+
- **Rationale**: standards, skills, decisions, evidence and audit artifacts are collaborator-facing truth. Plans, leases and scratch are per-agent working state that causes churn and merge noise. Removing already-tracked history would break links in prior tickets, so the boundary moves forward only.
|
|
@@ -181,7 +181,7 @@ Currently, Muse Memory excels at **Semantic Memory** (facts, rules, ADRs, prefer
|
|
|
181
181
|
#### B. Multi-Tenant Agency Enclaves (`scope: client`)
|
|
182
182
|
- Tailored for Harsh's agency model with 4 internal divisions: Sol, Jasper, Crew, Nexus.
|
|
183
183
|
- **Isolation Rule**:
|
|
184
|
-
- `scope: client`:
|
|
184
|
+
- `scope: client`: **Descoped** (ADR-007). Enclaves are explicit encrypted vaults; not a store scope.
|
|
185
185
|
- Client A’s confidential database schemas and domain logic are never exposed to Client B.
|
|
186
186
|
- Universal architectural principles (`scope: global`) propagate freely across all client workspaces.
|
|
187
187
|
|