Persistent memory system for AI coding agents. Agent-agnostic Go binary with SQLite + FTS5, MCP server, HTTP API, CLI, and TUI.
This report presents the forensic synthetic code analysis of Gentleman-Programming/engram, a Go project with 6,268 GitHub stars. SynthScan v2.0 examined 192,713 lines of code across 485 source files, recording 708 pattern matches distributed across 8 syntactic categories. The overall adjusted score of 9.9 places this repository in the Low AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 708 distinct pattern matches across 8 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | cmd/engram/conflicts_test.go | 25 | // ─── mock runner for D.2 tests ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | cmd/engram/conflicts_test.go | 61 | // ─── helpers ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | cmd/engram/conflicts_test.go | 151 | // ─── D.1 RED tests ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | cmd/engram/conflicts_test.go | 534 | // ─── G.1 — End-to-end CLI lifecycle integration tests ──────────────────────── | COMMENT |
| MEDIUM | cmd/engram/conflicts_test.go | 666 | // ─── D.2 RED tests — agentRunnerFactory + resolveAgentRunner ───────────────── | COMMENT |
| MEDIUM | cmd/engram/autosync_status_test.go | 40 | // ─── Status adapter tests (REQ-209) ────────────────────────────────────────── | COMMENT |
| MEDIUM | cmd/engram/llm.go | 12 | // ─── agentRunnerFactory default ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | cmd/engram/llm.go | 26 | // ─── llmRunnerAdapter ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | cmd/engram/llm.go | 52 | // ─── llmBuildPrompt ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | cmd/engram/llm.go | 64 | // ─── resolveAgentRunner ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | cmd/engram/conflicts.go | 62 | // ─── list ───────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | cmd/engram/conflicts.go | 164 | // ─── show ───────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | cmd/engram/conflicts.go | 225 | // ─── stats ──────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | cmd/engram/conflicts.go | 291 | // ─── scan ───────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | cmd/engram/conflicts.go | 510 | // ─── deferred ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | cmd/engram/main.go | 777 | // ─── Commands ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | cmd/engram/main.go | 3019 | // ─── Helpers ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | cmd/engram/autosync_e2e_test.go | 21 | // ─── E2E Round-trip test (REQ-212) ─────────────────────────────────────────── | COMMENT |
| MEDIUM | cmd/engram/autosync_e2e_test.go | 246 | // ─── Fake store for E2E tests ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | cmd/engram/main_test.go | 1359 | // ─── Projects command tests ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | cmd/engram/main_test.go | 2400 | // ─── obsidian-export command tests ─────────────────────────────────────────── | COMMENT |
| MEDIUM | cmd/engram/main_test.go | 2535 | // ─── obsidian-export Phase 4 tests (graph-config, watch, interval) ─────────── | COMMENT |
| MEDIUM | cmd/engram/main_test.go | 2769 | // ─── Delete command tests ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | cmd/engram/main_test.go | 2869 | // ─── delete session sub-command tests ───────────────────────────────────────── | COMMENT |
| MEDIUM | cmd/engram/main_test.go | 2951 | // ─── delete prompt sub-command tests ────────────────────────────────────────── | COMMENT |
| MEDIUM | cmd/engram/main_test.go | 3021 | // ─── delete project sub-command tests ───────────────────────────────────────── | COMMENT |
| MEDIUM | cmd/engram/main_test.go | 3087 | // ─── backward-compat: delete <obs_id> still works ───────────────────────────── | COMMENT |
| MEDIUM | cmd/engram/main_test.go | 3103 | // ─── usage shows new sub-commands ───────────────────────────────────────────── | COMMENT |
| MEDIUM | plugin/claude-code/scripts/user-prompt-submit.sh | 410 | # ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugin/claude-code/scripts/user-prompt-submit.sh | 417 | # ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugin/claude-code/scripts/user-prompt-submit.sh | 434 | # ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugin/claude-code/scripts/user-prompt-submit.sh | 439 | # ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | plugin/claude-code/scripts/user-prompt-submit.sh | 452 | # ── FIRST MESSAGE ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | plugin/claude-code/scripts/user-prompt-submit.sh | 461 | # ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | plugin/claude-code/scripts/user-prompt-submit.sh | 463 | # ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugin/codex/scripts/user-prompt-submit.sh | 33 | # ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugin/codex/scripts/user-prompt-submit.sh | 40 | # ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugin/codex/scripts/user-prompt-submit.sh | 92 | # ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugin/codex/scripts/user-prompt-submit.sh | 97 | # ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | plugin/codex/scripts/user-prompt-submit.sh | 109 | # ── FIRST MESSAGE ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | plugin/codex/scripts/user-prompt-submit.sh | 118 | # ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | plugin/codex/scripts/user-prompt-submit.sh | 120 | # ────────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugin/obsidian/src/main.ts | 10 | // ─── Plugin ─────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugin/obsidian/src/main.ts | 24 | // ─── Lifecycle ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugin/obsidian/src/main.ts | 69 | // ─── Settings ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugin/obsidian/src/main.ts | 80 | // ─── Auto-sync ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugin/obsidian/src/main.ts | 118 | // ─── Sync ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugin/obsidian/src/main.ts | 134 | // ── Failure path ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugin/obsidian/src/main.ts | 145 | // ── Success path ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugin/obsidian/src/main.ts | 169 | // ─── Status Bar ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugin/obsidian/src/settings.ts | 4 | // ─── Settings Interface ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugin/obsidian/src/settings.ts | 30 | // ─── Settings Tab ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugin/obsidian/src/settings.ts | 50 | // ── Engram URL ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugin/obsidian/src/settings.ts | 95 | // ── Auto-sync Interval ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugin/obsidian/src/settings.ts | 118 | // ── Project Filter ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugin/obsidian/src/settings.ts | 134 | // ── Vault Subfolder ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugin/obsidian/src/settings.ts | 151 | // ── Manual Sync Button ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugin/obsidian/src/settings.ts | 189 | // ─── Helpers ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugin/obsidian/src/sync.ts | 4 | // ─── API Types ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugin/obsidian/src/sync.ts | 25 | // ─── Sync State ─────────────────────────────────────────────────────────────── | COMMENT |
| 514 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docker-compose.beta.yml | 1 | # Engram Beta — Phases 2 + 3 + 4 community testing | COMMENT |
| LOW | DOCS.md | 701 | # source-run flow (without compose): set BOTH token + allowlist before startup | COMMENT |
| LOW | cmd/engram/cloud.go | 121 | } | COMMENT |
| LOW | cmd/engram/cloud.go | 141 | // credentials, but PrincipalResolver.ResolveBearerToken (foundation.go) | COMMENT |
| LOW | cmd/engram/cloud_bootstrap.go | 21 | cloudBootstrapAuditOutcomeSuccess = "success" | COMMENT |
| LOW | cmd/engram/cloud_runtime_auth.go | 21 | // actually checks the legacy credentials FIRST and only falls back to | COMMENT |
| LOW | cmd/engram/cloud_runtime_auth.go | 41 | // s.auth.Authorize when s.auth does NOT implement ResolveBearerToken; since | COMMENT |
| LOW | cmd/engram/cloud_runtime_auth.go | 61 | // cloudstoreManagedTokenLookup depends on. *cloudstore.CloudStore satisfies | COMMENT |
| LOW | cmd/engram/cloud_runtime_e2e_test.go | 61 | // real HTTP requests through the assembled *cloudserver.CloudServer, proving: | COMMENT |
| LOW | cmd/engram/cloud_runtime_auth_test.go | 101 | } | COMMENT |
| LOW | tools/repair-missing-session-directory.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | plugin/claude-code/scripts/user-prompt-submit.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | plugin/codex/scripts/user-prompt-submit.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | plugin/codex/scripts/subagent-stop.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | internal/llm/runner.go | 1 | // Package llm defines the AgentRunner abstraction used by Engram to delegate | COMMENT |
| LOW | internal/llm/runner.go | 21 | // structured Verdict. | COMMENT |
| LOW | internal/llm/claude.go | 21 | runCLI func(ctx context.Context, name string, args []string, stdin string) ([]byte, error) | COMMENT |
| LOW | internal/llm/cost.go | 1 | package llm | COMMENT |
| LOW | internal/llm/cost.go | 21 | // EstimateScanCost returns the estimated total input and output token counts | COMMENT |
| LOW | internal/llm/prompt.go | 21 | } | COMMENT |
| LOW | internal/diagnostic/checks.go | 221 | // work that still needs a decision rather than already-dispositioned evidence. | COMMENT |
| LOW | internal/setup/generate.go | 1 | package setup | COMMENT |
| LOW | internal/setup/protocol.go | 41 | return normalizeProtocolMode(mode) | COMMENT |
| LOW | internal/setup/registry.go | 21 | const ( | COMMENT |
| LOW | internal/setup/setup.go | 1 | // Package setup handles agent plugin installation. | COMMENT |
| LOW | internal/setup/setup.go | 361 | COMMENT | |
| LOW | internal/setup/setup.go | 501 | // patchEngramBINLine rewrites the ENGRAM_BIN constant declaration in the | COMMENT |
| LOW | internal/mcp/mcp_test.go | 7521 | // TestHandleSave_MCPConfig_OverridesDefaults verifies that MCPConfig.BM25Floor | COMMENT |
| LOW | internal/mcp/mcp_conflict_loop_test.go | 421 | } | COMMENT |
| LOW | internal/mcp/mcp.go | 1 | // Package mcp implements the Model Context Protocol server for Engram. | COMMENT |
| LOW | internal/mcp/mcp.go | 41 | // auto-resolution; per-call project arguments remain separately validated. | COMMENT |
| LOW | internal/mcp/mcp.go | 101 | if strings.TrimSpace(directory) == "" { | COMMENT |
| LOW | internal/mcp/serverinstructions_length_test.go | 1 | package mcp | COMMENT |
| LOW | internal/project/detect.go | 41 | SourceUserSelectedAfterAmbiguousProject = "user_selected_after_ambiguous_project" | COMMENT |
| LOW | internal/cloud/cloudstore/identity_storage_test.go | 681 | // TestFindPrincipalTokenByHashResolvesActiveTokenAndRejectsUnknownOrRevoked | COMMENT |
| LOW | internal/cloud/cloudstore/identity.go | 281 | // guardLastActiveAdminTx (key "engram_cloud_active_admin_guard"). This | COMMENT |
| LOW | internal/cloud/cloudstore/identity.go | 681 | // internal/cloud/auth already imports cloudstore and a direct cloudstore -> | COMMENT |
| LOW | internal/cloud/autosync/manager.go | 1 | // Package autosync implements a lease-guarded background sync manager | COMMENT |
| LOW | internal/cloud/cloudserver/dashboard_session.go | 161 | } | COMMENT |
| LOW | internal/cloud/cloudserver/dashboard_session.go | 201 | log.Printf("[engram-cloud] dashboard login audit insert failed (best-effort): %v", err) | COMMENT |
| LOW | internal/cloud/cloudserver/dashboard_session.go | 561 | if source := string(actor.Source); source != "" { | COMMENT |
| LOW | internal/cloud/cloudserver/dashboard_admin_users.go | 21 | // (requireManagedAdmin), and SAME audit path (recordAdminAudit) already | COMMENT |
| LOW | internal/cloud/cloudserver/dashboard_admin_users.go | 81 | // renderDashboardAdminComponentStatus is renderDashboardAdminComponent but | COMMENT |
| LOW | internal/sync/transport.go | 21 | // WriteManifest persists the manifest. | COMMENT |
| LOW | internal/sync/sync.go | 1 | // Package sync implements git-friendly memory synchronization for Engram. | COMMENT |
| LOW | internal/sync/sync_test.go | 1041 | } | COMMENT |
| LOW | internal/store/store_migration_test.go | 401 | COMMENT | |
| LOW | internal/store/store_migration_test.go | 541 | missing = append(missing, req) | COMMENT |
| LOW | internal/store/store_legacy_ddl_test.go | 1 | package store | COMMENT |
| LOW | internal/store/store_legacy_ddl_test.go | 221 | VALUES (new.id, new.content, new.project); | COMMENT |
| LOW | internal/store/store_test.go | 6581 | } | COMMENT |
| LOW | internal/store/store_test.go | 10561 | } | COMMENT |
| LOW | internal/store/store.go | 1221 | // This runs on every open rather than only in the open that added the column. | COMMENT |
| LOW | internal/store/store.go | 2461 | // such a session exists, or ok=false when none does. | COMMENT |
| LOW | internal/store/store.go | 5281 | // relation mutation. The two apply statuses record different things and so carry | COMMENT |
| LOW | internal/store/store.go | 5601 | // parent session belongs to another project, so moving it would split it. | COMMENT |
| LOW | internal/store/store.go | 6461 | } | COMMENT |
| LOW | internal/store/store.go | 7201 | // Design mirrors backfillObservationSyncMutationsTx exactly: | COMMENT |
| LOW | internal/store/store.go | 7581 | } | COMMENT |
| LOW | internal/store/store.go | 7641 | } | COMMENT |
| 12 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | CONTRIBUTING.md | 13 | ### Step 1: Open an Issue | COMMENT |
| LOW⚡ | CONTRIBUTING.md | 23 | ### Step 2: Wait for Approval | COMMENT |
| LOW⚡ | CONTRIBUTING.md | 29 | ### Step 3: Open a Pull Request | COMMENT |
| LOW⚡ | CONTRIBUTING.md | 38 | ### Step 4: Automated PR Checks | COMMENT |
| LOW⚡ | internal/tui/update_test.go | 960 | // Step 1: from SearchResults, enter ObservationDetail — PrevScreen = ScreenSearchResults | COMMENT |
| LOW⚡ | internal/tui/update_test.go | 969 | // Step 2: from ObservationDetail, Esc → back to SearchResults (via PrevScreen) | COMMENT |
| LOW⚡ | internal/tui/update_test.go | 978 | // Step 3: from SearchResults, Esc → back to ScreenSearch, PrevScreen reset to Dashboard | COMMENT |
| LOW⚡ | internal/tui/update_test.go | 989 | // Step 4: from Search (no input focused), Esc → always Dashboard, never loops | COMMENT |
| LOW⚡ | internal/tui/update_test.go | 997 | // Step 5: from Search input focused, Esc → always Dashboard, never loops | COMMENT |
| LOW⚡ | internal/setup/setup.go | 811 | // Step 1: Add marketplace (idempotent — if already added, claude will say so) | COMMENT |
| LOW⚡ | internal/setup/setup.go | 821 | // Step 2: Install the plugin | COMMENT |
| LOW⚡ | internal/setup/setup.go | 831 | // Step 3: Write a durable user-level MCP config at ~/.claude/mcp/engram.json | COMMENT |
| LOW⚡ | internal/setup/setup.go | 1207 | // Step 1: add the marketplace (idempotent — tolerate "already" in output). | COMMENT |
| LOW⚡ | internal/setup/setup.go | 1214 | // Step 2: install the plugin (idempotent — tolerate "already" in output). | COMMENT |
| LOW | internal/cloud/cloudserver/cloudserver_test.go | 1459 | // Step 1: POST to mutation push with paused project → should 409 + emit audit. | COMMENT |
| LOW | internal/cloud/cloudserver/cloudserver_test.go | 1475 | // Step 2: verify audit row was captured in the store. | COMMENT |
| LOW | internal/cloud/cloudserver/cloudserver_test.go | 1487 | // Step 3: list via the store's audit method (simulates what the dashboard handler would call). | COMMENT |
| LOW⚡ | internal/sync/sync.go | 1695 | // Step 1: index sessions that match by their own project | COMMENT |
| LOW⚡ | internal/sync/sync.go | 1704 | // Step 2: observations — match by own project OR by session | COMMENT |
| LOW | internal/sync/sync.go | 1720 | // Step 3: prompts — match by own project OR by session | COMMENT |
| LOW | internal/sync/sync.go | 1735 | // Step 4: include sessions that matched directly or are referenced by included entities | COMMENT |
| LOW | internal/store/store.go | 7713 | // Step 1: decode payload. | COMMENT |
| LOW | internal/store/store.go | 7759 | // Step 2: FK precondition — both observations must exist locally (by sync_id). | COMMENT |
| LOW | internal/store/store.go | 7775 | // Step 3: upsert into memory_relations keyed on sync_id (idempotent re-apply). | COMMENT |
| LOW | internal/store/store.go | 7804 | // Step 4: clean up the rows this relation left behind (its pending retry | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | internal/tui/update_test.go | 960 | // Step 1: from SearchResults, enter ObservationDetail — PrevScreen = ScreenSearchResults | COMMENT |
| LOW⚡ | internal/tui/update_test.go | 969 | // Step 2: from ObservationDetail, Esc → back to SearchResults (via PrevScreen) | COMMENT |
| LOW⚡ | internal/tui/update_test.go | 978 | // Step 3: from SearchResults, Esc → back to ScreenSearch, PrevScreen reset to Dashboard | COMMENT |
| LOW⚡ | internal/tui/update_test.go | 989 | // Step 4: from Search (no input focused), Esc → always Dashboard, never loops | COMMENT |
| LOW⚡ | internal/tui/update_test.go | 997 | // Step 5: from Search input focused, Esc → always Dashboard, never loops | COMMENT |
| LOW⚡ | internal/setup/setup.go | 811 | // Step 1: Add marketplace (idempotent — if already added, claude will say so) | COMMENT |
| LOW⚡ | internal/setup/setup.go | 821 | // Step 2: Install the plugin | COMMENT |
| LOW⚡ | internal/setup/setup.go | 831 | // Step 3: Write a durable user-level MCP config at ~/.claude/mcp/engram.json | COMMENT |
| LOW⚡ | internal/setup/setup.go | 1207 | // Step 1: add the marketplace (idempotent — tolerate "already" in output). | COMMENT |
| LOW⚡ | internal/setup/setup.go | 1214 | // Step 2: install the plugin (idempotent — tolerate "already" in output). | COMMENT |
| LOW | internal/cloud/cloudserver/cloudserver_test.go | 1459 | // Step 1: POST to mutation push with paused project → should 409 + emit audit. | COMMENT |
| LOW | internal/cloud/cloudserver/cloudserver_test.go | 1475 | // Step 2: verify audit row was captured in the store. | COMMENT |
| LOW | internal/cloud/cloudserver/cloudserver_test.go | 1487 | // Step 3: list via the store's audit method (simulates what the dashboard handler would call). | COMMENT |
| LOW⚡ | internal/sync/sync.go | 1695 | // Step 1: index sessions that match by their own project | COMMENT |
| LOW⚡ | internal/sync/sync.go | 1704 | // Step 2: observations — match by own project OR by session | COMMENT |
| LOW | internal/sync/sync.go | 1720 | // Step 3: prompts — match by own project OR by session | COMMENT |
| LOW | internal/sync/sync.go | 1735 | // Step 4: include sessions that matched directly or are referenced by included entities | COMMENT |
| LOW | internal/store/store.go | 7713 | // Step 1: decode payload. | COMMENT |
| LOW | internal/store/store.go | 7759 | // Step 2: FK precondition — both observations must exist locally (by sync_id). | COMMENT |
| LOW | internal/store/store.go | 7775 | // Step 3: upsert into memory_relations keyed on sync_id (idempotent re-apply). | COMMENT |
| LOW | internal/store/store.go | 7804 | // Step 4: clean up the rows this relation left behind (its pending retry | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docs/ARCHITECTURE.md | 237 | ├── skills/ # Contributor AI skills (repo-wide standards + Engram-specific guardrails) | CODE |
| MEDIUM | docs/codebase/sync-and-cloud.md | 106 | ## Sync/cloud guardrails | COMMENT |
| MEDIUM | …chive/2026-04-24-memory-conflict-surfacing/proposal.md | 447 | ### 6.5 Boundary/regression tests (per `engram-server-api`, `engram-architecture-guardrails`) | COMMENT |
| MEDIUM | …ges/archive/2026-04-27-memory-conflict-audit/design.md | 53 | ### 1.2 Boundaries (engram-architecture-guardrails) | COMMENT |
| MEDIUM | openspec/changes/memory-conflict-surfacing/proposal.md | 447 | ### 6.5 Boundary/regression tests (per `engram-server-api`, `engram-architecture-guardrails`) | COMMENT |
| MEDIUM | openspec/changes/memory-conflict-audit/design.md | 53 | ### 1.2 Boundaries (engram-architecture-guardrails) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | plugin/claude-code/scripts/user-prompt-submit.sh | 453 | # Create the state file immediately to prevent repeat injections | COMMENT |
| MEDIUM⚡ | plugin/codex/scripts/user-prompt-submit.sh | 110 | # Create the state file immediately to prevent repeat injections | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | plugin/pi/index.ts | 185 | function takeLastFetchTimeoutMethod(): string | undefined { | CODE |
| LOW | plugin/pi/index.ts | 300 | function projectCurrentUnsupportedError(cwd: string): CurrentProjectResponse { | CODE |
| LOW | plugin/pi/index.ts | 729 | function normalizeInitializationError(error: unknown): Error { | CODE |
| LOW | plugin/opencode/engram.ts | 277 | function isKnownAuthoritativeRootSession(sessionId: string): boolean { | CODE |
| LOW | plugin/opencode/engram.ts | 333 | async function resolveAuthoritativeSessionID(sessionId: string): Promise<string> { | CODE |
| LOW | internal/setup/plugins/opencode/engram.ts | 277 | function isKnownAuthoritativeRootSession(sessionId: string): boolean { | CODE |
| LOW | internal/setup/plugins/opencode/engram.ts | 333 | async function resolveAuthoritativeSessionID(sessionId: string): Promise<string> { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docker-compose.beta.yml | 7 | # Usage: | COMMENT |