Skip to content

Release 1.6: universal local document imports and hardening - #130

Merged
Coding-Dev-Tools merged 72 commits into
mainfrom
codex/importers-1.6-review
Aug 10, 2026
Merged

Release 1.6: universal local document imports and hardening#130
Coding-Dev-Tools merged 72 commits into
mainfrom
codex/importers-1.6-review

Conversation

@Coding-Dev-Tools

Copy link
Copy Markdown
Owner

Summary

  • ship the Engraphis 1.6 hardening line and a production v2 universal local-document importer
  • add engraphis import documents PATH with preview, trusted-local confirmation, resumable per-document writes, temporal revisions, idempotent re-import, conflict policies, and complete reports
  • retain a rich Obsidian compatibility adapter for frontmatter, tags, aliases, wikilinks, embeds, headings, and attachment references
  • add the owner-confirmed dashboard document wizard without exposing filesystem import through MCP or the generic bearer API
  • add schema 16 source collections, source items, job reports, and exact workspace/repo/session lineage integrity

Why

Users need to bring existing unsorted documents into Engraphis locally and repeatedly without creating a hidden AI-only copy, invoking an LLM extractor, or making network requests. Existing generic folder ingestion did not provide safe preview, stable source identity, temporal updates, resumability, rich Markdown links, or durable per-file reporting.

Safety and correctness

  • dry runs create no database, WAL, shared-memory, audit, receipt, or sidecar writes
  • paths are normalized and contained; traversal, symlinks/reparse points, Unicode path collisions, hidden/configuration paths, sensitive names, secret-bearing content, oversized files, ZIP/XML attacks, and malformed inputs fail closed per file
  • browser uploads enforce per-file/total bounds, duplicate detection, attachment manifest limits, and upload/attachment non-overlap at both dashboard and service boundaries
  • new browser sources cannot silently reuse a same-label lineage; resume requires selecting the registered vlt_ source
  • unchanged documents skip without reinforcement; revisions create temporal successors; exact-content renames preserve lineage; missing sources are reported without deleting memories
  • import jobs persist exact session identity, link reconciliation is cancellable and batched, and rename planning is linear
  • configured semantic models are cache/local-only during CLI imports; no model is downloaded

Supported inputs

Native parsers cover Markdown/Obsidian, plain text and logs, RST, HTML, JSON/JSONL, CSV/TSV, YAML, TOML, INI-style files, XML, RTF, common source code, DOCX, ODT, EPUB, XLSX, PPTX, ODS, and ODP. PDF, image, audio, and video use optional configured local extractors. Legacy OLE, encrypted/DRM, and unknown binary formats are rejected and reported rather than guessed.

Validation

  • complete offline tests/ suite passed
  • focused importer, schema, CLI, dashboard, documentation, encryption, sync, receipt, packaging, and entry-point suites passed
  • ruff check .
  • pyright — 0 errors, 0 warnings
  • commercial manifest and dashboard asset-drift gates passed
  • sample and code/conflict retrieval datasets: 1.000 recall@5, hit@5, and answer-token recall
  • ablation, bounded-reinforcement, and adversarial memory-security gates passed
  • wheel built and installed; all 15 console entry points passed
  • installed-wheel dry run created no DB/WAL/SHM files; first import succeeded; unchanged re-import skipped without duplication

Intentional limitations

Conservative top-level YAML is parsed rather than arbitrary executable YAML. Dataview/plugins/macros/scripts and transclusion expansion are not executed. Attachments are catalogued but not copied. Scanned PDFs do not gain automatic OCR, ambiguous links remain warnings, and legacy OLE/encrypted/DRM files remain unsupported.

Store/Schema:
- Transaction rollback safety on Windows (commits_deferred flag)
- Skip redundant index.upsert when index shares store vector table
- Embedding-space contract validation and direct SQL matrix path
- Restore orphaned Store methods (prompt_eligibility_counts,
  embedding_space_health, context_savings_grouped, add_sync_bytes,
  get_sync_stats) and harden _logical_digest for sqlite-vec
- Dashboard startup self-check for orphaned Store methods
- v11 handoff column migration for sessions table

Release readiness:
- Strip dead TEAM scope surface (Scope.TEAM, MemoryRecord.team_id,
  SearchFilter.team_id/caller_id) per AGENTS.md §0
- Remove team_id column from memories table (team_members retained)
- Remove conflict_aware profile (zero callers/tests/docs)
- Add format/group_by params to MemoryService.context_savings()

Other:
- watch_repo key name, LLM fallback chain cost tracking
- context_savings_grouped SELECT columns
- Sync robustness, response budgets, docs sync
- MCP tool engraphis_context_savings: add format and group_by params
- v2 API route /context-savings: add format and group_by query params
- Read-only API /context-savings: add format and group_by query params
- MCP HTTP CLI: minor fix
- eval/extractor_quality.py: offline extractor distillation quality harness
- eval/handoff_quality.py: structured session-handoff eval
- eval/datasets/handoff_quality.jsonl: handoff scenario fixtures
- eval/datasets/sample.jsonl: 3 new entries (link_symbol, hierarchical
  consolidation, extractor/handoff patterns)
- scripts/watch_repo.py: file-watcher for code-graph reindexing
- scripts/validate_compose_contract.py: schema contract validator
- dashboard_app.py: pass workspace to stats() when allowed_workspaces
  is configured (prevents ValidationError on workspace-bound instances)
- Sync classic_assets and static bundles with latest dashboard changes
- test_cli_entrypoints: clear ENGRAPHIS_WORKSPACES env for subprocess isolation
- test_dashboard_security_headers: monkeypatch.delenv ENGRAPHIS_WORKSPACES
- test_savings: adjust for context_savings format/group_by signature
- test_sync: align with sync robustness hardening
- test_update_check: align with 2-part semver acceptance
- test_mcp_server, test_smart_mcp_gateway: align with MCP surface wiring
- test_store_class_integrity: new Store method integrity coverage
- test_dashboard_v2, test_release_infrastructure, test_secret_hygiene: minor
  alignment with pro-feature changes
The restored method from b7e80c2 predated the hash-validation contract
in _public_receipt_row. Without prev_hash and receipt_hash in the SELECT,
every receipt was marked invalid_payload and excluded from aggregation,
causing the grouped method to return 0 groups despite valid receipts.

Verified: all 4 dimensions (workspace/repo/agent/day) now return correct
token aggregation. Savings ratio: 0.6 (180 saved / 300 source).

Found by round-3 ContextSavingsGroupedRuntime scout.
Save JSON reports to a directory with timestamped filenames.
Cherry-picked from codex/fix-pr-104-codeql-v4 (a4928c5).
… preservation, retention SQL, migration safety, port parsing

- llm/client.py: _LLMProviderError accepts *args + message kwarg (fixes TypeError on cost-ceiling path)
- llm/client.py: parse_provider_chain detects URL ports via :// prefix check (prevents port-as-ceiling stripping)
- core/sync.py: quarantine merge preserves prior reasons alongside inherited_quarantine (audit trail)
- stores/vectors.py: upsert_memory preserves existing memory_type when caller passes default semantic
- routes/memory.py: AVG(stability) SQL approximation for retention stats (avoids OOM on large workspaces)
- routes/vault.py: hashlib suffix on smart-import split doc_ids (collision prevention)
- routes/vault.py: health_overview and find_stale bounded to 10k limit
- service.py: Windows-safe two-step rename with staging file and rollback for v1->v2 migration
- stores/__init__.py: graph backfill uses _replace_support_rows + per-namespace rebuild (O(N) not O(N²))
- config.py: embed_dim downstream consumers use 'is not None' pattern
- 6 downstream embed_dim call sites fixed (dashboard_app, mcp_server, read_only_api, inspector, v2_api, embedder)
- eval/longmemeval_v2.py: _stored_memory_type_counts scoped to workspace
- eval/harness.py: --output-dir writing inside try/except for clean CLI errors
- KILO_CODE_INTEGRATION.md: tool count corrected to nine; engraphis_forget row added
- .env.example: ENGRAPHIS_SYNC_TOKEN_ORIGIN documented
- Test file trailing newlines restored
…verage

Closes P1 gap flagged by FinalA_Tests review:
- port-stripping fix (localhost:8080 vs ceiling) — 5 cases
- multi-provider chain parsing with mixed ceilings
- empty/whitespace fallback to default chain
- _LLMProviderError positional+kwarg construction contract
… harness improvements

- .github/workflows/release.yml: CodeQL config-file reference added
- .env.example: ENGRAPHIS_SYNC_TOKEN_ORIGIN documented for standalone sync tokens
- docs/KILO_CODE_INTEGRATION.md: Smart tool count corrected to nine; engraphis_forget row added to Classic table
- engraphis/dashboard_assets/vendor/d3.min.js: unified across classic/static (no new Function)
- eval/longmemeval_v2.py: _stored_memory_type_counts scoped to workspace
- eval/harness.py: --output-dir writing inside try/except for clean CLI errors
- tests/e2e/demo.spec.js, test_dashboard_vendor_assets.py, test_documentation_contracts.py: new coverage
- deploy/force-graph license/yarn lock files added
- docs/benchmark-evidence offline fixtures added
- Multiple doc updates: AGENTS.md, BENCHMARKS.md, CHANGELOG.md, README.md, SECURITY.md, SYNC.md
- Demo infrastructure: screen demo HTML, prepare script, record script
- Integration updates: hermes plugin, pi MCP client
- Skills: engraphis-memory SKILL.md and references updated
Comment thread engraphis/routes/vault.py Fixed
Comment thread engraphis/routes/vault.py Fixed
@Coding-Dev-Tools
Coding-Dev-Tools marked this pull request as ready for review August 9, 2026 08:07

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5aaa943bd5

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread engraphis/core/documents.py Outdated
Comment thread engraphis/core/documents.py Outdated
Comment thread engraphis/core/documents.py Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0a2110b64e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread engraphis/core/documents.py Outdated
Comment thread engraphis/core/documents.py

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: df587ce27a

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread engraphis/core/documents.py Outdated
@Coding-Dev-Tools

Copy link
Copy Markdown
Owner Author

Pre-PR Code Review — engraphis#130

Structural Assessment

This is a massive release PR (17,354 additions / 4,830 deletions across 62 files, 50+ commits) covering:

  • Universal local document importer with preview, resumability, and temporal revisions
  • Schema 16 source collections and job reports
  • Pro-feature hardening (store, sync, encryption, analytics)
  • CI/CD alignment, docs corrections, dashboard assets
  • Extensive iterative review from chatgpt-codex-connector (20+ comment cycles)

CI Status: ✅ All 23 checks green

CodeQL, test+lint (Python 3.9–3.14), coverage, typecheck, encryption driver gates, Pi extension (Ubuntu + Windows), browser accessibility, docker build/smoke, wheel build, repo hygiene — all passing.

Security Observations

The PR body documents thorough safety measures:

  • Dry runs create no DB/WAL/SHM writes
  • Path normalization and containment; symlink/traversal/Unicode collision protection
  • Browser upload bounds, duplicate detection, attachment manifest limits
  • No model downloads during CLI imports
  • ZIP/XML attack prevention, malformed input fail-closed

Hard Gate Blocks (cannot approve yet)

  • Contributor count: Only Coding-Dev-Tools has authored commits. The hard gate requires 3 distinct agent contributors before merge approval. While chatgpt-codex-connector provided extensive review feedback, it has not authored commits to this branch.
  • PR scope: This is a release aggregation PR. The individual feature commits have been iteratively reviewed, but the consolidated diff warrants a final pass on integration points (schema migration ordering, import reconciliation with concurrent writes, v1→v2 rename rollback).

Verdict: REQUEST_CHANGES

The code quality appears high based on CI coverage and iterative review history. Once the contributor gate is satisfied (e.g., another agent authors a refinement commit or the contributor requirement is waived for release PRs), this is approvable.

Suggested next steps:

  1. Coordinate with Sentinel for multi-contributor coverage or obtain a waiver for release aggregation PRs.
  2. Ensure schema 16 migration has been tested against a production-sized workspace.
  3. Verify the importer reconciliation handles partial-failure recovery under concurrent access.

Comment thread engraphis/read_only_api.py Fixed

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 7183db882e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread engraphis/core/documents.py

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: ee933a3c57

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread scripts/importer.py
…allback paths

- Wrap engraphis_get_memory post-inspect body in try/except with
  _classify_gateway_exception to match all other Smart tools, preventing
  internal error details from leaking through FastMCP.
- Fix malformed SQLite URI on Windows in _keyword_search and memories
  routes: use Path.resolve().as_uri() + '?mode=ro' instead of bare string
  interpolation, matching the store's URI construction pattern.
… warnings

- Fix README 1.5 release notes anchor link to match CHANGELOG heading format
- Add missing CHANGELOG entries for dashboard version display, MCP error
  redaction fix, Windows SQLite URI fix, graph layers enforcement, and
  header parse warning
- Apply _graph_csv() limit enforcement to /graph endpoint layers parameter,
  matching all other graph endpoints (64-item, 200-char limits)
- Add stderr warnings to _parse_headers for silent ENGRAPHIS_LLM_EXTRA_HEADERS
  misconfiguration instead of silently dropping invalid headers

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0cb8e658d9

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread engraphis/core/documents.py
Comment thread engraphis/core/documents.py Outdated
…\n- Reject symlinks on import folder and individual candidates\n- Verify resolved folder stays under allowed roots via normcase+startswith\n- Use resolved_folder for relative_to to prevent escape via symlink

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5a159c21fd

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread engraphis/core/documents.py
Comment thread engraphis/core/documents.py
Coding-Dev-Tools and others added 4 commits August 9, 2026 20:52
MCP server and LLM client import pydantic/httpx at module load, which
breaks the numpy-only core floor when those extras are absent. Guard
both imports so the core remains importable without optional extras,
matching the deterministic hashing-embedder floor that CI enforces.

Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
Closes the last open review concerns before merge:

- XLSX worksheets and PPTX slides now follow the workbook/presentation
  relationship order (r:id via the rels parts) instead of numeric order,
  with a deterministic fallback when those parts are missing.
- RTF \binN binary payloads are skipped without unbalancing the group
  stack; XHTML encoding honors the XML prolog before <meta charset>.
- _walk_tree bounds directory entry sorting before the 10k file cap and
  marks oversized directories as incomplete scans.
- import launchers guard worker.start() and mark the job failed instead
  of leaving it stuck running when thread start raises.
- vault import_folder reads through an fd-safe helper (O_NOFOLLOW,
  identity and containment revalidation) to close the open/read TOCTOU.
- watchdog watcher applies the same exclude policy as the polling
  backend before enqueueing events.
- Store._write_operation joins an active defer_commits boundary instead
  of opening an unreleased inner savepoint; link reconciliation commits
  the batch it owns even when the connection reports no ownership.
- ENGRAPHIS_LLM_EXTRA_HEADERS parse errors are value-free on stderr.
- Tests: workbook/slide order, RTF bin, XHTML prolog, oversized
  directory, worker-start failure, sync relay origin binding, and
  external-vector equality for HLC conflict successors.

Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
…gation

- Add skip link, main-content focus target, and notice banner to both the
  v2 ledger and classic dashboards.
- Surface a persistent runtime-savings summary (value, meta, rate) and a
  savings overview section on Today, with receipt-backed fallbacks when
  the estimate cannot load.
- Rename the metric labels to "Live memories" / "All versions, including
  history" so the counts are unambiguous.
- Keyboard support: arrow/Home/End navigation for library options,
  graph/provenance/manage tabs, and roving tabindex for role=option cards.
- View routing via history.pushState/popstate with a ?view= parameter and
  focus management on view switch.
- Dashboard tests and e2e spec updated for the new markup and keyboard
  behavior.

Co-authored-by: CommandCodeBot <noreply@commandcode.ai>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 909f71f264

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread engraphis/service.py
Comment thread engraphis/read_only_api.py Outdated
dependabot Bot and others added 2 commits August 9, 2026 22:08
Bumps [@playwright/test](https://github.com/microsoft/playwright) from 1.61.1 to 1.62.1.
- [Release notes](https://github.com/microsoft/playwright/releases)
- [Commits](microsoft/playwright@v1.61.1...v1.62.1)

---
updated-dependencies:
- dependency-name: "@playwright/test"
  dependency-version: 1.62.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Jaixii <algorithmictradingsolutions@gmail.com>
…#134)

Bumps [tree-sitter-language-pack](https://github.com/xberg-io/tree-sitter-language-pack) from 1.13.5 to 1.14.3.
- [Release notes](https://github.com/xberg-io/tree-sitter-language-pack/releases)
- [Changelog](https://github.com/xberg-io/tree-sitter-language-pack/blob/main/CHANGELOG.md)
- [Commits](xberg-io/tree-sitter-language-pack@v1.13.5...v1.14.3)

---
updated-dependencies:
- dependency-name: tree-sitter-language-pack
  dependency-version: 1.14.3
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Jaixii <algorithmictradingsolutions@gmail.com>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 57599fa3ab

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread engraphis/core/store.py
Coding-Dev-Tools and others added 2 commits August 9, 2026 22:23
…ackfill

- memory_health() falls back to a portable Python retention calculation
  when the SQLite build lacks SQLITE_ENABLE_MATH_FUNCTIONS (EXP), so the
  diagnostic keeps working on SQLCipher and minimal builds.
- read-only API returns 413 for streamed/chunked bodies that exceed the
  limit: the receive hook raises an internal marker the middleware
  translates directly, since FastAPI's body parser would otherwise turn
  it into a generic 400 before the ValueError handler runs.
- migration backfills jobs.session_id from the live v15 source manifest
  (not only staged v14 temp tables) so the v16 exact-session triggers
  never reject lineage for legacy session-scoped import jobs. The staged
  path shares the same backfill helpers.
- Tests: streamed-oversize 413 regression; existing declared-oversize,
  health, and migration suites pass.

Co-authored-by: CommandCodeBot <noreply@commandcode.ai>
@Coding-Dev-Tools
Coding-Dev-Tools merged commit da01ea3 into main Aug 10, 2026
23 checks passed

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0d39adb6be

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread engraphis/core/store.py
Comment on lines +5164 to +5168
targets = self._secure_erase_targets(self.conn, memory_id)
current_rows = []
for target_id in targets:
marker = self.get_memory_sync_export(target_id)
current = self._erase_memory_rows(self.conn, target_id, actor=actor)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Delete conflict successors from external vector indexes

When a synced equal-HLC conflict was published to a separately backed vector index, this new loop erases both the original and its conflict successors from the Store, but MemoryEngine.secure_erase() still calls index.delete([memory_id]) for only the original. The successor's sensitive derived vector therefore remains in the external backend while the response reports vector_index_cleanup="deleted", making breach-remediation status inaccurate; delete every discovered target ID externally or report incomplete cleanup.

AGENTS.md reference: AGENTS.md:L160-L161

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants