musememory 2.2.1 → 3.0.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-20-lifeos-memory-distillation-plan.md +865 -0
- package/.agents/artifacts/HANDOFF.md +22 -0
- package/.agents/artifacts/audit-and-realigned-roadmap-20261015.md +152 -0
- package/.agents/artifacts/bench-graph-baseline.json +519 -0
- package/.agents/artifacts/bench-graph-baseline.md +139 -0
- package/.agents/artifacts/brief-dayos-inspired-site-redo.md +89 -0
- package/.agents/artifacts/handoff-20261015-143202.md +109 -0
- package/.agents/artifacts/plan-competitor-adaptation-dashboard-graph.md +99 -0
- package/.agents/artifacts/session-report-2026-10-01-memory-gaps-and-website.md +94 -0
- package/.agents/artifacts/wave-3-sdd-ledger.md +18 -0
- package/.agents/artifacts/wave-4-sdd-ledger.md +18 -0
- package/.agents/context/architecture.md +1 -0
- package/.agents/context/current.md +168 -3
- package/.agents/context/decisions.md +4 -0
- package/.agents/context/deep-research-agentic-memory-evolution.md +261 -0
- package/.agents/context/deep-research-memory-adaptation-2026-10.md +107 -0
- package/.agents/context/deep-research-memory-improvement-2026-10.md +420 -0
- package/.agents/context/deep-research-memory-mechanisms-2026-09.md +334 -0
- package/.agents/context/index.md +5 -0
- package/.agents/context/product.md +2 -1
- package/.agents/context/roadmap.md +361 -7
- package/.agents/context/ticket-plan.md +553 -0
- package/.agents/plans/2026-10-20-wave-22-failure-attribution-negative-mining-design.md +198 -0
- package/.agents/plans/2026-10-20-wave-22-failure-attribution-negative-mining-plan.md +274 -0
- package/.agents/plans/EVOLUTION_PLAN.md +351 -0
- package/.agents/plans/local-embeddings-llama-cpp.md +37 -0
- package/.agents/plans/recall-eval-harness.md +31 -0
- package/.agents/research/ecosystem-teardown-2026-10.md +289 -0
- package/.agents/research/research-brief-walrus-memory-architecture.md +189 -0
- package/.agents/research/retirement-audit-2026-10.md +45 -0
- package/.agents/skills/muse-current/SKILL.md +47 -17
- package/.agents/standards/git-workflow.md +5 -0
- package/.agents/standards/workflows.md +13 -0
- package/README.md +141 -54
- package/dist/index.js +21008 -8958
- package/package.json +20 -10
- package/schema.json +39 -2
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# HANDOFF — 2026-10-20T14:05:00Z
|
|
2
|
+
branch: dev | phase: Wave 21 complete; dev green 1285/0 (v2.10.1)
|
|
3
|
+
|
|
4
|
+
## Next Step
|
|
5
|
+
Advance to Wave 22: Review next backlog items from .agents/context/ticket-plan.md (failure attribution, eval harness, dashboard panels, Hermes provider adapter).
|
|
6
|
+
|
|
7
|
+
## In-Flight
|
|
8
|
+
- Wave 21 landed on dev via Ticket=Commit=Verify workflow:
|
|
9
|
+
- T-050: In-lock mutation safety guards (`verifyMutationSafety`, `allowDrastic`).
|
|
10
|
+
- T-177: Pre-mutation 30-snapshot rolling ring buffer (`captureSnapshotRing`).
|
|
11
|
+
- T-324: Diff-preserving `CURRENT.md` compaction handoff merge.
|
|
12
|
+
- Distillation Router: 3-channel router CLI (`distill-route`) & MCP (`memory_distill_route`).
|
|
13
|
+
- Docs pass: `README.md` (1285 passed), `current.md`, `ticket-plan.md`.
|
|
14
|
+
|
|
15
|
+
## Decisions
|
|
16
|
+
- Safe Mutation Guard: Block drastic shrinks (>50%) & erosion (net -2 drops) unless `allowDrastic`.
|
|
17
|
+
- Snapshot Ring: 30 rolling snapshots in `.memory/snapshots/` before mutations with zero daemons.
|
|
18
|
+
- Checkpoint Merge: Union hand-added constraints with handoff constraints; never clobber.
|
|
19
|
+
- Knowledge Router: 3 lanes (system, content, health) with SHA-256 dedupe to `.memory/distill_state.json`.
|
|
20
|
+
|
|
21
|
+
## Verify
|
|
22
|
+
`bun test` 1285/0 + `bunx tsc --noEmit` + `bun run build`
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# 🛡️ Senior Technical Audit & Realigned Roadmap
|
|
2
|
+
|
|
3
|
+
> **Audit Authority**: Nexus (Quality Gate) & Muse (Chief Agency Orchestrator)
|
|
4
|
+
> **Evaluation Date**: 2026-10-15
|
|
5
|
+
> **Target Branch**: `dev` @ `ee7c40f`
|
|
6
|
+
> **Test Status**: 649 pass, 0 fail (`bun test < /dev/null`), `tsc --noEmit` clean, 384 bundled modules
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 1. Executive Summary & Audit Findings
|
|
11
|
+
|
|
12
|
+
A full agency-level senior developer and security audit of the Muse Memory codebase, test harness, documentation, and roadmap was conducted.
|
|
13
|
+
|
|
14
|
+
While the test suite demonstrates clean execution (649/649 green) and 21 major architectural PRs (#57–#75) successfully landed on `dev`, several critical runtime traps, validation regressions, tracking drifts, and security gaps were uncovered:
|
|
15
|
+
|
|
16
|
+
### 🚨 Critical Vulnerabilities & Code Gaps Discovered
|
|
17
|
+
|
|
18
|
+
1. **Silent SQLite Initialization Crash & Fallback to Flat-Files (GAP-01)**:
|
|
19
|
+
- **Location**: [`src/sqlite.ts:169-171`](file:///home/harsh/Projects/github/musememory/src/sqlite.ts#L169-L171) & [`src/store.ts:173-177`](file:///home/harsh/Projects/github/musememory/src/store.ts#L173-L177)
|
|
20
|
+
- **Defect**: `initSchema` attempts `CREATE INDEX IF NOT EXISTS idx_memories_mem_path ON memories(mem_path)` unconditionally on existing tables. On stores created prior to v1, `memories` lacks `mem_path`. SQLite throws `SQLiteError: no such column: mem_path`.
|
|
21
|
+
- **Impact**: `openStore` catches this error, swallows it, leaves `store.db` as `undefined`, and silently degrades to flat-file storage. Crucially, `runMigrations` in `src/migrate.ts` never executes for these stores.
|
|
22
|
+
- **Remediation**: Guard index creation by inspecting existing columns via `PRAGMA table_info(memories)` or delegate index creation to `src/migrate.ts` migration `v1`.
|
|
23
|
+
|
|
24
|
+
2. **Stored-Command Validation Failure on Legacy Memories (GAP-02)**:
|
|
25
|
+
- **Location**: [`.memory/memories/m_1791995990650_...yaml`](file:///home/harsh/Projects/github/musememory/.memory/memories/m_1791995990650_avoidneverre-invokebinsh-cformemorytest_commandexecutionb4.yaml#L36) & [`src/schema.ts`](file:///home/harsh/Projects/github/musememory/src/schema.ts)
|
|
26
|
+
- **Defect**: Pre-`T-001` memory entries contain legacy `test_command` values (e.g. `grep -n 'bin/sh' src/verify.ts`). Following `T-001`'s template gating, `memory validate` and `memory doctor` exit with code 1 (`/test_command is not an executable command`).
|
|
27
|
+
- **Impact**: Breaks automated health checks and CLI compliance.
|
|
28
|
+
- **Remediation**: Add a stored-command doctor sweep/migration to sanitize non-template test commands.
|
|
29
|
+
|
|
30
|
+
3. **Terminal Hang on Interactive Stdin in Test Suite & Hooks (GAP-03)**:
|
|
31
|
+
- **Location**: [`src/hooks/pack.ts:220-227`](file:///home/harsh/Projects/github/musememory/src/hooks/pack.ts#L220-L227)
|
|
32
|
+
- **Defect**: `readStdinJson()` synchronously calls `readFileSync(0, "utf8")` without verifying whether stdin is a TTY.
|
|
33
|
+
- **Impact**: When running in an interactive terminal or non-piped runner, `test/hooks.test.ts` blocks indefinitely waiting for EOF on fd 0.
|
|
34
|
+
- **Remediation**: Guard with `if (process.stdin.isTTY) return {};` before attempting synchronous reads on fd 0.
|
|
35
|
+
|
|
36
|
+
4. **Plan & Tracking Drift (GAP-04)**:
|
|
37
|
+
- 21 tickets landed on `dev` across PRs #57–#75 (`T-001`, `T-020`, `T-024-026`, `T-030-032`, `T-301`, `T-303`, `T-308`, `T-311`, `T-336-337`, `T-342`, `T-351`, `T-355`, `T-363`, `T-368`, `T-383`, `T-390`) but were left unchecked in `.agents/context/ticket-plan.md` and unrecorded in `current.md`.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## 2. Realigned Feature-Wave Roadmap (In-Line Cohesion)
|
|
42
|
+
|
|
43
|
+
To prevent context-switching across unrelated subsystems, all remaining tasks have been restructured into **7 In-Line Feature Waves**. Each wave groups tightly coupled files, tests, and dependencies into sequential, self-verifying delivery units:
|
|
44
|
+
|
|
45
|
+
```mermaid
|
|
46
|
+
flowchart TD
|
|
47
|
+
W0["Wave 0: Pre-Flight Integrity & Baseline Fixes\n(GAP-01/02/03 + Bunfig T-401 + Docs T-370)"] --> W1["Wave 1: Storage Engine, Outbox & Concurrency\n(Outbox T-041, Flocking T-044, Idempotency T-038)"]
|
|
48
|
+
W1 --> W2["Wave 2: Write Admission, Trust & Anti-Poisoning\n(scoreRetain T-104, Corroboration T-105, Trust Tiers T-075)"]
|
|
49
|
+
W2 --> W3["Wave 3: Retrieval Quality, Ranking & Token Economics\n(IDF Cache T-036, Math.max T-035, Soft-OR T-114)"]
|
|
50
|
+
W3 --> W4["Wave 4: Compaction, Ephemeral Observations & Distillation\n(pre-compress T-045, Log Rotation T-306, Body Cap T-305)"]
|
|
51
|
+
W4 --> W5["Wave 5: Security Hardening & UI Observability\n(XSS Escaping T-002, Routines Guard T-399, UI Gates T-004)"]
|
|
52
|
+
W5 --> W6["Wave 6: Semantic Embeddings & Eval Harness\n(Local Embeddings T-071/136-139, Eval Suite T-140-143)"]
|
|
53
|
+
W6 -.-> W7["Wave 7: Team Slice (On-Demand / Opt-In)\n(Streamable HTTP T-150, Auth T-386, Multi-DB T-153)"]
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
### Wave 0 — Pre-Flight Integrity & Baseline Fixes (P0 · Immediate)
|
|
59
|
+
*Goal: Eliminate runtime regressions, fix doctor warnings, and ensure test-suite runs smoothly in any environment.*
|
|
60
|
+
|
|
61
|
+
- [ ] **T-402** · `initSchema` column-order fix: guard index creation on `mem_path`, `last_accessed_at`, `access_count` against missing columns so pre-v1 databases migrate smoothly (`src/sqlite.ts`).
|
|
62
|
+
- [ ] **T-403** · Stored-command doctor sweep: sanitize or migrate legacy non-template `test_command`s across stored YAML files (`.memory/memories/*.yaml`, `src/doctor.ts`).
|
|
63
|
+
- [ ] **T-404** · Stdin TTY decoupling: add `process.stdin.isTTY` check in `src/hooks/pack.ts:readStdinJson()` to prevent test runner hanging in interactive terminals.
|
|
64
|
+
- [ ] **T-401** · Bunfig surface hardening: configure explicit test runner timeout and isolation defaults (`bunfig.toml`).
|
|
65
|
+
- [ ] **T-370** · Documentation truth pass: align platform count (52 verified), tool count (107 tools), and version stamps (`README.md`, `.agents/context/current.md`).
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
### Wave 1 — Storage Engine, Outbox & Concurrency (P0 · In-Line Storage)
|
|
70
|
+
*Goal: Provide unbreakable queued writes, crash recovery, and multi-process file-locking without external daemons.*
|
|
71
|
+
|
|
72
|
+
- [x] **T-041** · Outbox state machine (`pending` → `processing` → `sent` / `held` / `failed`) via additive migration `v3` (`src/migrate.ts`, `src/store.ts`, `src/outbox.ts`).
|
|
73
|
+
- [x] **T-042** · Stale-lock recovery sweep (300s) on store open (`src/store.ts`, `src/outbox.ts`).
|
|
74
|
+
- [x] **T-044** · Append-only fsync JSONL event log + single-writer flock (`src/store.ts`, `src/lock.ts`).
|
|
75
|
+
- [x] **T-038** · `idempotency_key` column + UNIQUE constraint on capture (`src/migrate.ts`, `src/store.ts`).
|
|
76
|
+
- [x] **T-040** · Normalized `content_hash` (whitespace/case) + dedup on propose (`src/store.ts`, `src/quality.ts`).
|
|
77
|
+
- [x] **T-056** · `atexit` bounded join for async write workers (`src/store.ts`, `src/async_workers.ts`).
|
|
78
|
+
- [x] **T-055** · Circuit breaker around store paths (5 failures → 120s cooldown → degraded mode) (`src/store.ts`, `src/circuit.ts`).
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
### Wave 2 — Write Admission, Trust & Anti-Poisoning (P0/P1 · In-Line Trust)
|
|
83
|
+
*Goal: Guard memory intake against prompt injections, junk captures, and unverified promotions.*
|
|
84
|
+
|
|
85
|
+
- [ ] **T-104** · `scoreRetain` 0.3 write gate (refuses junk writes with low informational density) (`src/store.ts`).
|
|
86
|
+
- [ ] **T-105** · Corroboration-gated promotion (≥2 independent days, non-synthetic sources) (`src/promotion.ts`).
|
|
87
|
+
- [ ] **T-105b** · Syntax-only promotion rule: enforce AST/schema verification before candidate confirmation (`src/promotion.ts`).
|
|
88
|
+
- [ ] **T-075** · Ingest trust tiers (`trusted` | `candidate` | `untrusted`) by source type (`src/provenance.ts`, `src/types.ts`).
|
|
89
|
+
- [ ] **T-058** · Read-path re-validation: injection markup, credentials, and invisible characters excluded from recall (`src/retrieval.ts`).
|
|
90
|
+
- [ ] **T-103** · Index-time credential redaction keeping text searchable without secret leakage (`src/store.ts`).
|
|
91
|
+
- [ ] **T-391** · Citation validation: validate `source_ids` and `memory_ids` against live registry at write time (`src/claims.ts`, `src/mcp.ts`).
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
### Wave 3 — Retrieval Optimization, Ranking & Token Economics (P1 · In-Line Retrieval)
|
|
96
|
+
*Goal: Accelerate query speeds, eliminate scale crashes, and optimize token knapsack utilization.*
|
|
97
|
+
|
|
98
|
+
- [ ] **T-035** · Replace `Math.max(...arr)` spread crash at scale with iterative max (`src/retrieval.ts`).
|
|
99
|
+
- [ ] **T-036** · In-memory IDF caching across queries (`src/retrieval.ts`).
|
|
100
|
+
- [ ] **T-037** · Drop redundant full-list scan in `hybridSearch` (`src/retrieval/engine.ts`).
|
|
101
|
+
- [ ] **T-060** · Safe FTS5 query token escaping (quote every token to prevent syntax errors) (`src/store.ts`).
|
|
102
|
+
- [ ] **T-061** · Compound-token expansion (camelCase / snake_case splitting) (`src/retrieval.ts`).
|
|
103
|
+
- [ ] **T-070** · IDF-weighted relevance gate before FTS5 search (`src/retrieval.ts`).
|
|
104
|
+
- [ ] **T-114** · Soft-OR evidence fusion formula `P = 1 - (1 - pv)(1 - pl)` (`src/retrieval/ranking.ts`).
|
|
105
|
+
- [ ] **T-115** · Low-discrimination conditional reranking (`src/retrieval/ranking.ts`).
|
|
106
|
+
- [ ] **T-117** · Watermark staleness tracking from `last_memory_seen_at` (`src/retrieval.ts`).
|
|
107
|
+
- [ ] **T-126** · Deterministic `why_retrieved` reason tokens (`src/retrieval.ts`).
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
### Wave 4 — Compaction, Ephemeral Observations & Distillation (P1 · In-Line Cognition)
|
|
112
|
+
*Goal: Bound observation log growth, ensure lossless compaction, and prevent log injection into prompts.*
|
|
113
|
+
|
|
114
|
+
- [ ] **T-045** · `on_pre_compress` fact extraction hook in compaction engine (`src/compaction.ts`).
|
|
115
|
+
- [ ] **T-046** · Persisted digest-dedup set for extracted facts (`src/compaction.ts`).
|
|
116
|
+
- [ ] **T-305** · Distillation body cap: prevent raw logs from bloating memory content (`src/learning/distill.ts`).
|
|
117
|
+
- [ ] **T-306** · Observation log atomic rotation and size cap (`src/learning/observation.ts`).
|
|
118
|
+
- [ ] **T-053** · Honest dual-measure token accounting (`src/compaction.ts`).
|
|
119
|
+
- [ ] **T-054** · Refuse-incomplete digest contract in `get_context` (`src/orchestrator.ts`).
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
### Wave 5 — Security Hardening, Routine Guardrails & UI Protection (P1 · In-Line Security)
|
|
124
|
+
*Goal: Eliminate all web/dashboard injection vectors and secure automated routine steps.*
|
|
125
|
+
|
|
126
|
+
- [ ] **T-002 / T-003** · UI XSS escaping for `p.title`, `p.slug`, `r.entry_id`, `r.actor` interpolation (`src/ui.ts`).
|
|
127
|
+
- [ ] **T-004** · UI optimizer gate (`POST /api/optimize` dry-run default + localhost token check) (`src/ui.ts`).
|
|
128
|
+
- [ ] **T-388** · Hook `SessionStart` `<muse-memory>` block escaping (`src/hooks/pack.ts`).
|
|
129
|
+
- [ ] **T-389** · `recordObservation` metadata JSON credential scanning (`src/learning/observation.ts`).
|
|
130
|
+
- [ ] **T-399** · Memory routine step allowlist + re-entrancy recursion guard (`src/routines.ts`).
|
|
131
|
+
- [ ] **T-400** · UI read route projection field allowlist (`src/ui.ts`).
|
|
132
|
+
- [ ] **T-380** · Independent unit test suite for `escapeHtml` (`test/ui_security.test.ts`).
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
### Wave 6 — Semantic Embeddings & Retrieval Evaluation Harness (P2 · In-Line Evals)
|
|
137
|
+
*Goal: Zero-daemon vector search paired with an oracle recall-grading benchmark.*
|
|
138
|
+
|
|
139
|
+
- [ ] **T-381** · Embeddings spike: validate local llama-cpp embedding generation E2E (`src/intelligence/embed/`).
|
|
140
|
+
- [ ] **T-071 / T-136–T-139** · Local embeddings engine + brute-force SQLite BLOB cosine similarity + degradation path (`src/retrieval/`).
|
|
141
|
+
- [ ] **T-140–T-143** · Recall evaluation harness: frozen benchmark corpus, precision/recall scoring, p50 latency (`test/recall_eval.test.ts`).
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
### Wave 7 — Team Slice (P2 · On-Demand Network Mode)
|
|
146
|
+
*Goal: Multi-agent and agency team collaboration over authenticated HTTP.*
|
|
147
|
+
|
|
148
|
+
- [ ] **T-150** · MCP Streamable HTTP transport (`src/mcp.ts`).
|
|
149
|
+
- [ ] **T-151** · Transport security headers (Origin, session ID, protocol version).
|
|
150
|
+
- [ ] **T-386** · Bearer-token authentication + per-peer allowlist.
|
|
151
|
+
- [ ] **T-153** · Multi-DB topology: shared team store + per-member local DBs.
|
|
152
|
+
- [ ] **T-387** · Client configuration recipes & shared+personal scoping governance.
|
|
@@ -0,0 +1,519 @@
|
|
|
1
|
+
{
|
|
2
|
+
"generated_at": "2026-10-01T07:35:57.892Z",
|
|
3
|
+
"results": [
|
|
4
|
+
{
|
|
5
|
+
"size": 100,
|
|
6
|
+
"seedMs": 0,
|
|
7
|
+
"seedReused": true,
|
|
8
|
+
"storeCount": 100,
|
|
9
|
+
"server": [
|
|
10
|
+
{
|
|
11
|
+
"name": "GET /api/memories",
|
|
12
|
+
"coldMs": 15.82127299999999,
|
|
13
|
+
"medianMs": 0.8126179999999863,
|
|
14
|
+
"bytes": 92179,
|
|
15
|
+
"status": 200
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "GET /api/snapshot",
|
|
19
|
+
"coldMs": 1.3489560000000438,
|
|
20
|
+
"medianMs": 0.9502570000000219,
|
|
21
|
+
"bytes": 92262,
|
|
22
|
+
"status": 200
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"name": "GET /api/stats",
|
|
26
|
+
"coldMs": 1.451708999999994,
|
|
27
|
+
"medianMs": 0.6542199999999525,
|
|
28
|
+
"bytes": 255,
|
|
29
|
+
"status": 200
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"name": "POST /api/search",
|
|
33
|
+
"coldMs": 4.27201100000002,
|
|
34
|
+
"medianMs": 4.27201100000002,
|
|
35
|
+
"bytes": 23005,
|
|
36
|
+
"status": 200
|
|
37
|
+
}
|
|
38
|
+
],
|
|
39
|
+
"client": {
|
|
40
|
+
"firstGraphPaintMs": 212.6000000089407,
|
|
41
|
+
"domNodes": 1714,
|
|
42
|
+
"graphNodes": 100,
|
|
43
|
+
"graphEdges": 198,
|
|
44
|
+
"longTasks": {
|
|
45
|
+
"count": 1,
|
|
46
|
+
"totalMs": 68,
|
|
47
|
+
"maxMs": 68
|
|
48
|
+
},
|
|
49
|
+
"longTaskList": [
|
|
50
|
+
{
|
|
51
|
+
"start": 66.20000000298023,
|
|
52
|
+
"dur": 68
|
|
53
|
+
}
|
|
54
|
+
],
|
|
55
|
+
"interaction": {
|
|
56
|
+
"frames": 55,
|
|
57
|
+
"medianFrameMs": 16.69999999999999,
|
|
58
|
+
"p95FrameMs": 16.700000000000045,
|
|
59
|
+
"fps": 59.88023952095813,
|
|
60
|
+
"longFrames": 0
|
|
61
|
+
},
|
|
62
|
+
"loopAlive": true,
|
|
63
|
+
"consoleErrors": [],
|
|
64
|
+
"notes": [
|
|
65
|
+
"load event 148ms",
|
|
66
|
+
"interaction burst wall time 906ms, 55 frames"
|
|
67
|
+
]
|
|
68
|
+
},
|
|
69
|
+
"clientRuns": [
|
|
70
|
+
{
|
|
71
|
+
"firstGraphPaintMs": 1965.1000000089407,
|
|
72
|
+
"domNodes": 1714,
|
|
73
|
+
"graphNodes": 100,
|
|
74
|
+
"graphEdges": 198,
|
|
75
|
+
"longTasks": {
|
|
76
|
+
"count": 2,
|
|
77
|
+
"totalMs": 1859,
|
|
78
|
+
"maxMs": 1780
|
|
79
|
+
},
|
|
80
|
+
"longTaskList": [
|
|
81
|
+
{
|
|
82
|
+
"start": 31,
|
|
83
|
+
"dur": 1780
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"start": 1811.5,
|
|
87
|
+
"dur": 79
|
|
88
|
+
}
|
|
89
|
+
],
|
|
90
|
+
"interaction": {
|
|
91
|
+
"frames": 55,
|
|
92
|
+
"medianFrameMs": 16.699999999999818,
|
|
93
|
+
"p95FrameMs": 16.700000000000273,
|
|
94
|
+
"fps": 59.88023952095874,
|
|
95
|
+
"longFrames": 0
|
|
96
|
+
},
|
|
97
|
+
"loopAlive": true,
|
|
98
|
+
"consoleErrors": [],
|
|
99
|
+
"notes": [
|
|
100
|
+
"load event 1910ms",
|
|
101
|
+
"interaction burst wall time 910ms, 55 frames"
|
|
102
|
+
]
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"firstGraphPaintMs": 196.79999999701977,
|
|
106
|
+
"domNodes": 1714,
|
|
107
|
+
"graphNodes": 100,
|
|
108
|
+
"graphEdges": 198,
|
|
109
|
+
"longTasks": {
|
|
110
|
+
"count": 1,
|
|
111
|
+
"totalMs": 67,
|
|
112
|
+
"maxMs": 67
|
|
113
|
+
},
|
|
114
|
+
"longTaskList": [
|
|
115
|
+
{
|
|
116
|
+
"start": 55.79999999701977,
|
|
117
|
+
"dur": 67
|
|
118
|
+
}
|
|
119
|
+
],
|
|
120
|
+
"interaction": {
|
|
121
|
+
"frames": 55,
|
|
122
|
+
"medianFrameMs": 16.699999999999932,
|
|
123
|
+
"p95FrameMs": 16.799999999999955,
|
|
124
|
+
"fps": 59.88023952095833,
|
|
125
|
+
"longFrames": 0
|
|
126
|
+
},
|
|
127
|
+
"loopAlive": true,
|
|
128
|
+
"consoleErrors": [],
|
|
129
|
+
"notes": [
|
|
130
|
+
"load event 132ms",
|
|
131
|
+
"interaction burst wall time 913ms, 55 frames"
|
|
132
|
+
]
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"firstGraphPaintMs": 212.6000000089407,
|
|
136
|
+
"domNodes": 1714,
|
|
137
|
+
"graphNodes": 100,
|
|
138
|
+
"graphEdges": 198,
|
|
139
|
+
"longTasks": {
|
|
140
|
+
"count": 1,
|
|
141
|
+
"totalMs": 68,
|
|
142
|
+
"maxMs": 68
|
|
143
|
+
},
|
|
144
|
+
"longTaskList": [
|
|
145
|
+
{
|
|
146
|
+
"start": 66.20000000298023,
|
|
147
|
+
"dur": 68
|
|
148
|
+
}
|
|
149
|
+
],
|
|
150
|
+
"interaction": {
|
|
151
|
+
"frames": 55,
|
|
152
|
+
"medianFrameMs": 16.69999999999999,
|
|
153
|
+
"p95FrameMs": 16.700000000000045,
|
|
154
|
+
"fps": 59.88023952095813,
|
|
155
|
+
"longFrames": 0
|
|
156
|
+
},
|
|
157
|
+
"loopAlive": true,
|
|
158
|
+
"consoleErrors": [],
|
|
159
|
+
"notes": [
|
|
160
|
+
"load event 148ms",
|
|
161
|
+
"interaction burst wall time 906ms, 55 frames"
|
|
162
|
+
]
|
|
163
|
+
}
|
|
164
|
+
],
|
|
165
|
+
"paintSpreadMs": [
|
|
166
|
+
196.79999999701977,
|
|
167
|
+
1965.1000000089407
|
|
168
|
+
]
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"size": 1000,
|
|
172
|
+
"seedMs": 0,
|
|
173
|
+
"seedReused": true,
|
|
174
|
+
"storeCount": 1000,
|
|
175
|
+
"server": [
|
|
176
|
+
{
|
|
177
|
+
"name": "GET /api/memories",
|
|
178
|
+
"coldMs": 15.22866999999951,
|
|
179
|
+
"medianMs": 6.522202000000107,
|
|
180
|
+
"bytes": 927362,
|
|
181
|
+
"status": 200
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
"name": "GET /api/snapshot",
|
|
185
|
+
"coldMs": 12.185318000000734,
|
|
186
|
+
"medianMs": 5.486735999999837,
|
|
187
|
+
"bytes": 927446,
|
|
188
|
+
"status": 200
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
"name": "GET /api/stats",
|
|
192
|
+
"coldMs": 7.7054049999997005,
|
|
193
|
+
"medianMs": 7.7054049999997005,
|
|
194
|
+
"bytes": 266,
|
|
195
|
+
"status": 200
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
"name": "POST /api/search",
|
|
199
|
+
"coldMs": 32.07821700000022,
|
|
200
|
+
"medianMs": 31.010749000000033,
|
|
201
|
+
"bytes": 23205,
|
|
202
|
+
"status": 200
|
|
203
|
+
}
|
|
204
|
+
],
|
|
205
|
+
"client": {
|
|
206
|
+
"firstGraphPaintMs": 267.79999999701977,
|
|
207
|
+
"domNodes": 11614,
|
|
208
|
+
"graphNodes": 1000,
|
|
209
|
+
"graphEdges": 1998,
|
|
210
|
+
"longTasks": {
|
|
211
|
+
"count": 2,
|
|
212
|
+
"totalMs": 191,
|
|
213
|
+
"maxMs": 116
|
|
214
|
+
},
|
|
215
|
+
"longTaskList": [
|
|
216
|
+
{
|
|
217
|
+
"start": 29.299999997019768,
|
|
218
|
+
"dur": 75
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
"start": 149.59999999403954,
|
|
222
|
+
"dur": 116
|
|
223
|
+
}
|
|
224
|
+
],
|
|
225
|
+
"interaction": null,
|
|
226
|
+
"loopAlive": false,
|
|
227
|
+
"consoleErrors": [
|
|
228
|
+
"IndexSizeError: Failed to execute 'arc' on 'CanvasRenderingContext2D': The radius provided (-14.0736) is negative."
|
|
229
|
+
],
|
|
230
|
+
"notes": [
|
|
231
|
+
"load event 119ms",
|
|
232
|
+
"interaction burst wall time 852ms, 0 frames",
|
|
233
|
+
"animation loop stopped repainting"
|
|
234
|
+
]
|
|
235
|
+
},
|
|
236
|
+
"clientRuns": [
|
|
237
|
+
{
|
|
238
|
+
"firstGraphPaintMs": 309.5,
|
|
239
|
+
"domNodes": 11614,
|
|
240
|
+
"graphNodes": 1000,
|
|
241
|
+
"graphEdges": 1998,
|
|
242
|
+
"longTasks": {
|
|
243
|
+
"count": 2,
|
|
244
|
+
"totalMs": 211,
|
|
245
|
+
"maxMs": 142
|
|
246
|
+
},
|
|
247
|
+
"longTaskList": [
|
|
248
|
+
{
|
|
249
|
+
"start": 63.29999999701977,
|
|
250
|
+
"dur": 69
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
"start": 166.5,
|
|
254
|
+
"dur": 142
|
|
255
|
+
}
|
|
256
|
+
],
|
|
257
|
+
"interaction": null,
|
|
258
|
+
"loopAlive": false,
|
|
259
|
+
"consoleErrors": [
|
|
260
|
+
"IndexSizeError: Failed to execute 'arc' on 'CanvasRenderingContext2D': The radius provided (-12.0703) is negative."
|
|
261
|
+
],
|
|
262
|
+
"notes": [
|
|
263
|
+
"load event 141ms",
|
|
264
|
+
"interaction burst wall time 866ms, 0 frames",
|
|
265
|
+
"animation loop stopped repainting"
|
|
266
|
+
]
|
|
267
|
+
},
|
|
268
|
+
{
|
|
269
|
+
"firstGraphPaintMs": 267.79999999701977,
|
|
270
|
+
"domNodes": 11614,
|
|
271
|
+
"graphNodes": 1000,
|
|
272
|
+
"graphEdges": 1998,
|
|
273
|
+
"longTasks": {
|
|
274
|
+
"count": 2,
|
|
275
|
+
"totalMs": 191,
|
|
276
|
+
"maxMs": 116
|
|
277
|
+
},
|
|
278
|
+
"longTaskList": [
|
|
279
|
+
{
|
|
280
|
+
"start": 29.299999997019768,
|
|
281
|
+
"dur": 75
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
"start": 149.59999999403954,
|
|
285
|
+
"dur": 116
|
|
286
|
+
}
|
|
287
|
+
],
|
|
288
|
+
"interaction": null,
|
|
289
|
+
"loopAlive": false,
|
|
290
|
+
"consoleErrors": [
|
|
291
|
+
"IndexSizeError: Failed to execute 'arc' on 'CanvasRenderingContext2D': The radius provided (-14.0736) is negative."
|
|
292
|
+
],
|
|
293
|
+
"notes": [
|
|
294
|
+
"load event 119ms",
|
|
295
|
+
"interaction burst wall time 852ms, 0 frames",
|
|
296
|
+
"animation loop stopped repainting"
|
|
297
|
+
]
|
|
298
|
+
},
|
|
299
|
+
{
|
|
300
|
+
"firstGraphPaintMs": 260.20000000298023,
|
|
301
|
+
"domNodes": 11614,
|
|
302
|
+
"graphNodes": 1000,
|
|
303
|
+
"graphEdges": 1998,
|
|
304
|
+
"longTasks": {
|
|
305
|
+
"count": 2,
|
|
306
|
+
"totalMs": 196,
|
|
307
|
+
"maxMs": 124
|
|
308
|
+
},
|
|
309
|
+
"longTaskList": [
|
|
310
|
+
{
|
|
311
|
+
"start": 26.900000005960464,
|
|
312
|
+
"dur": 72
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
"start": 135.1000000089407,
|
|
316
|
+
"dur": 124
|
|
317
|
+
}
|
|
318
|
+
],
|
|
319
|
+
"interaction": null,
|
|
320
|
+
"loopAlive": false,
|
|
321
|
+
"consoleErrors": [
|
|
322
|
+
"IndexSizeError: Failed to execute 'arc' on 'CanvasRenderingContext2D': The radius provided (-5.47931) is negative."
|
|
323
|
+
],
|
|
324
|
+
"notes": [
|
|
325
|
+
"load event 123ms",
|
|
326
|
+
"interaction burst wall time 858ms, 0 frames",
|
|
327
|
+
"animation loop stopped repainting"
|
|
328
|
+
]
|
|
329
|
+
}
|
|
330
|
+
],
|
|
331
|
+
"paintSpreadMs": [
|
|
332
|
+
260.20000000298023,
|
|
333
|
+
309.5
|
|
334
|
+
]
|
|
335
|
+
},
|
|
336
|
+
{
|
|
337
|
+
"size": 10000,
|
|
338
|
+
"seedMs": 0,
|
|
339
|
+
"seedReused": true,
|
|
340
|
+
"storeCount": 10000,
|
|
341
|
+
"server": [
|
|
342
|
+
{
|
|
343
|
+
"name": "GET /api/memories",
|
|
344
|
+
"coldMs": 70.38181599999916,
|
|
345
|
+
"medianMs": 81.21665600000051,
|
|
346
|
+
"bytes": 9323985,
|
|
347
|
+
"status": 200
|
|
348
|
+
},
|
|
349
|
+
{
|
|
350
|
+
"name": "GET /api/snapshot",
|
|
351
|
+
"coldMs": 70.74486900000011,
|
|
352
|
+
"medianMs": 73.06401899999946,
|
|
353
|
+
"bytes": 9324070,
|
|
354
|
+
"status": 200
|
|
355
|
+
},
|
|
356
|
+
{
|
|
357
|
+
"name": "GET /api/stats",
|
|
358
|
+
"coldMs": 57.263083999998344,
|
|
359
|
+
"medianMs": 53.781958999999915,
|
|
360
|
+
"bytes": 277,
|
|
361
|
+
"status": 200
|
|
362
|
+
},
|
|
363
|
+
{
|
|
364
|
+
"name": "POST /api/search",
|
|
365
|
+
"coldMs": 339.12077000000136,
|
|
366
|
+
"medianMs": 339.12077000000136,
|
|
367
|
+
"bytes": 23318,
|
|
368
|
+
"status": 200
|
|
369
|
+
}
|
|
370
|
+
],
|
|
371
|
+
"client": {
|
|
372
|
+
"firstGraphPaintMs": 2027.5,
|
|
373
|
+
"domNodes": 110614,
|
|
374
|
+
"graphNodes": 10000,
|
|
375
|
+
"graphEdges": 19998,
|
|
376
|
+
"longTasks": {
|
|
377
|
+
"count": 3,
|
|
378
|
+
"totalMs": 1874,
|
|
379
|
+
"maxMs": 1689
|
|
380
|
+
},
|
|
381
|
+
"longTaskList": [
|
|
382
|
+
{
|
|
383
|
+
"start": 69,
|
|
384
|
+
"dur": 86
|
|
385
|
+
},
|
|
386
|
+
{
|
|
387
|
+
"start": 238.40000000596046,
|
|
388
|
+
"dur": 99
|
|
389
|
+
},
|
|
390
|
+
{
|
|
391
|
+
"start": 338,
|
|
392
|
+
"dur": 1689
|
|
393
|
+
}
|
|
394
|
+
],
|
|
395
|
+
"interaction": null,
|
|
396
|
+
"loopAlive": false,
|
|
397
|
+
"consoleErrors": [
|
|
398
|
+
"IndexSizeError: Failed to execute 'arc' on 'CanvasRenderingContext2D': The radius provided (-0.957297) is negative."
|
|
399
|
+
],
|
|
400
|
+
"notes": [
|
|
401
|
+
"load event 196ms",
|
|
402
|
+
"interaction burst wall time 860ms, 0 frames",
|
|
403
|
+
"animation loop stopped repainting"
|
|
404
|
+
]
|
|
405
|
+
},
|
|
406
|
+
"clientRuns": [
|
|
407
|
+
{
|
|
408
|
+
"firstGraphPaintMs": 2087.4000000059605,
|
|
409
|
+
"domNodes": 110614,
|
|
410
|
+
"graphNodes": 10000,
|
|
411
|
+
"graphEdges": 19998,
|
|
412
|
+
"longTasks": {
|
|
413
|
+
"count": 3,
|
|
414
|
+
"totalMs": 1914,
|
|
415
|
+
"maxMs": 1713
|
|
416
|
+
},
|
|
417
|
+
"longTaskList": [
|
|
418
|
+
{
|
|
419
|
+
"start": 25,
|
|
420
|
+
"dur": 90
|
|
421
|
+
},
|
|
422
|
+
{
|
|
423
|
+
"start": 261.6000000089407,
|
|
424
|
+
"dur": 111
|
|
425
|
+
},
|
|
426
|
+
{
|
|
427
|
+
"start": 373.5,
|
|
428
|
+
"dur": 1713
|
|
429
|
+
}
|
|
430
|
+
],
|
|
431
|
+
"interaction": null,
|
|
432
|
+
"loopAlive": false,
|
|
433
|
+
"consoleErrors": [
|
|
434
|
+
"IndexSizeError: Failed to execute 'arc' on 'CanvasRenderingContext2D': The radius provided (-10.0694) is negative."
|
|
435
|
+
],
|
|
436
|
+
"notes": [
|
|
437
|
+
"load event 265ms",
|
|
438
|
+
"interaction burst wall time 859ms, 0 frames",
|
|
439
|
+
"animation loop stopped repainting"
|
|
440
|
+
]
|
|
441
|
+
},
|
|
442
|
+
{
|
|
443
|
+
"firstGraphPaintMs": 2020.9000000059605,
|
|
444
|
+
"domNodes": 110614,
|
|
445
|
+
"graphNodes": 10000,
|
|
446
|
+
"graphEdges": 19998,
|
|
447
|
+
"longTasks": {
|
|
448
|
+
"count": 3,
|
|
449
|
+
"totalMs": 1874,
|
|
450
|
+
"maxMs": 1702
|
|
451
|
+
},
|
|
452
|
+
"longTaskList": [
|
|
453
|
+
{
|
|
454
|
+
"start": 19.30000001192093,
|
|
455
|
+
"dur": 82
|
|
456
|
+
},
|
|
457
|
+
{
|
|
458
|
+
"start": 227.40000000596046,
|
|
459
|
+
"dur": 90
|
|
460
|
+
},
|
|
461
|
+
{
|
|
462
|
+
"start": 318.1000000089407,
|
|
463
|
+
"dur": 1702
|
|
464
|
+
}
|
|
465
|
+
],
|
|
466
|
+
"interaction": null,
|
|
467
|
+
"loopAlive": false,
|
|
468
|
+
"consoleErrors": [
|
|
469
|
+
"IndexSizeError: Failed to execute 'arc' on 'CanvasRenderingContext2D': The radius provided (-3.67911) is negative."
|
|
470
|
+
],
|
|
471
|
+
"notes": [
|
|
472
|
+
"load event 2024ms",
|
|
473
|
+
"interaction burst wall time 868ms, 0 frames",
|
|
474
|
+
"animation loop stopped repainting"
|
|
475
|
+
]
|
|
476
|
+
},
|
|
477
|
+
{
|
|
478
|
+
"firstGraphPaintMs": 2027.5,
|
|
479
|
+
"domNodes": 110614,
|
|
480
|
+
"graphNodes": 10000,
|
|
481
|
+
"graphEdges": 19998,
|
|
482
|
+
"longTasks": {
|
|
483
|
+
"count": 3,
|
|
484
|
+
"totalMs": 1874,
|
|
485
|
+
"maxMs": 1689
|
|
486
|
+
},
|
|
487
|
+
"longTaskList": [
|
|
488
|
+
{
|
|
489
|
+
"start": 69,
|
|
490
|
+
"dur": 86
|
|
491
|
+
},
|
|
492
|
+
{
|
|
493
|
+
"start": 238.40000000596046,
|
|
494
|
+
"dur": 99
|
|
495
|
+
},
|
|
496
|
+
{
|
|
497
|
+
"start": 338,
|
|
498
|
+
"dur": 1689
|
|
499
|
+
}
|
|
500
|
+
],
|
|
501
|
+
"interaction": null,
|
|
502
|
+
"loopAlive": false,
|
|
503
|
+
"consoleErrors": [
|
|
504
|
+
"IndexSizeError: Failed to execute 'arc' on 'CanvasRenderingContext2D': The radius provided (-0.957297) is negative."
|
|
505
|
+
],
|
|
506
|
+
"notes": [
|
|
507
|
+
"load event 196ms",
|
|
508
|
+
"interaction burst wall time 860ms, 0 frames",
|
|
509
|
+
"animation loop stopped repainting"
|
|
510
|
+
]
|
|
511
|
+
}
|
|
512
|
+
],
|
|
513
|
+
"paintSpreadMs": [
|
|
514
|
+
2020.9000000059605,
|
|
515
|
+
2087.4000000059605
|
|
516
|
+
]
|
|
517
|
+
}
|
|
518
|
+
]
|
|
519
|
+
}
|