Skip to content
Merged
Show file tree
Hide file tree
Changes from 23 commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
2a77893
test(eval): make every offline gate able to fail — floors, exit codes…
Coding-Dev-Tools Aug 21, 2026
cc5c04a
feat(eval): code-arm recall eval — the missing fourth-arm number
Coding-Dev-Tools Aug 21, 2026
423711a
fix(cli): actionable startup errors, zero-config consolidate db, init…
Coding-Dev-Tools Aug 21, 2026
65b19cb
feat(sync): expose Cloud Sync as a product CLI with local status
Coding-Dev-Tools Aug 21, 2026
9a4ca6f
perf(backends): visibility batching 8->500, observable fallback and l…
Coding-Dev-Tools Aug 21, 2026
bb33467
fix(core): audit silent failures, bound scans, resumable embedding re…
Coding-Dev-Tools Aug 21, 2026
1e49329
chore(security): defense-in-depth bundle pointer validation + CSP-off…
Coding-Dev-Tools Aug 21, 2026
8f2b52d
docs: release-parity sweep and evidence re-issue for v1.6
Coding-Dev-Tools Aug 21, 2026
e1fc89b
chore: withdraw Hermes provider integration from the repository
Coding-Dev-Tools Aug 21, 2026
eed11da
feat(core): remember_many batch writes with within-batch resolution
Coding-Dev-Tools Aug 22, 2026
0093a21
test(consolidate): back-date creation so archive recall cannot hit a …
Coding-Dev-Tools Aug 22, 2026
f7f34fe
fix(consolidate): keep archived validity windows non-degenerate under…
Coding-Dev-Tools Aug 22, 2026
19eb554
test(hosted): force strict denial-supersede ordering under coarse clocks
Coding-Dev-Tools Aug 22, 2026
52872bc
fix(consolidate): defer same-tick archives instead of fabricating win…
Coding-Dev-Tools Aug 22, 2026
75f0ac0
fix(mcp): run standalone HTTP transport stateless so restarts don't o…
Coding-Dev-Tools Aug 22, 2026
1ab61a6
chore(repo): atomic codeql-action bumps and root-artifact hygiene
Coding-Dev-Tools Aug 22, 2026
51088dc
test(conftest): keep ingest-path tests offline when owner config sets…
Coding-Dev-Tools Aug 22, 2026
43b3e69
fix(import): raise batch ceilings, bound wizard multipart parsing
Coding-Dev-Tools Aug 23, 2026
c23d6d5
fix(llm): reserve completion budget for reasoning-model calls
Coding-Dev-Tools Aug 23, 2026
5c3e7ae
fix(ci): approve runner tempdir in code-index allowlist
Coding-Dev-Tools Aug 23, 2026
d274d3a
test: py39-safe patching, mcp skip guard, router-contract bounded-upl…
Coding-Dev-Tools Aug 23, 2026
f3b9202
fix(service): redact extractor error details via _safe_reason
Coding-Dev-Tools Aug 23, 2026
9975919
fix(codegraph): regex fallback emits same-file calls edges
Coding-Dev-Tools Aug 23, 2026
2ad3584
fix(engine): harden remember_many batch resolution
Coding-Dev-Tools Aug 23, 2026
16ed446
fix(service): dedicated 15-minute import job recovery lease
Coding-Dev-Tools Aug 23, 2026
96217f0
fix(recall,sync): link-table consolidation evidence; repo-scoped sync…
Coding-Dev-Tools Aug 23, 2026
a1ae091
fix(cli,sync,mcp): three review followups on status scoping, batch sc…
Coding-Dev-Tools Aug 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude-plugin/skill-assets.sha256
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@
94bfa06317a8fe6a6a7e204bb70c5abdc9e4bbc34d79dd6f8447a30140bc8b85 .claude-plugin/plugin.json
055655db84af07561d002f0c69744313d8413c39f3e873f941f0fa0b1e76dc66 skills/engraphis-memory/references/CONVENTIONS.md
62019760766ff472a76a0f81437898f39e3c1fe2631732b7b7733e50c1ad837f skills/engraphis-memory/references/SCOPING.md
96c8e9b9cee1b3cb43c4bef9e48c57ed92af707f7f7a5d28d73b1ac247d2f0c6 skills/engraphis-memory/references/TOOLS.md
1f62ba2b6abf3dab266d5b4d9c85f2d7fd7fe4ece4e85e2413cfc3fe460ef2c1 skills/engraphis-memory/references/TOOLS.md
0f98098df695b9a00dc78402911124ebf09a4a058f6c8bec2c6234ec61fac13a skills/engraphis-memory/SKILL.md
6 changes: 6 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,9 @@ updates:
schedule:
interval: "weekly"
open-pull-requests-limit: 3
groups:
# codeql-action's init and analyze steps must always bump together —
# a mixed-version pair fails CodeQL's analyze post-action step.
codeql-action:
patterns:
- "github/codeql-action/*"
12 changes: 9 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ jobs:
- name: Unit tests (full suite — extras-gated tests included)
run: |
python -c "import fastapi, httpx, mcp, multipart, pydantic, uvicorn"
ENGRAPHIS_INDEX_ROOTS="${GITHUB_WORKSPACE}:${RUNNER_TEMP}" python -m pytest -o addopts="" tests/ -q -rs --basetemp="${RUNNER_TEMP}/engraphis-pytest"
ENGRAPHIS_INDEX_ROOTS="${GITHUB_WORKSPACE}:${RUNNER_TEMP}:$(python -c 'import tempfile; print(tempfile.gettempdir())')" python -m pytest -o addopts="" tests/ -q -rs --basetemp="${RUNNER_TEMP}/engraphis-pytest"
- name: Retrieval eval gate
run: python -m eval.harness --dataset eval/datasets/sample.jsonl --k 5
- name: Retrieval eval gate — CodeMem (coding-agent wedge, incl. conflict resolution)
Expand All @@ -48,6 +48,10 @@ jobs:
run: python -m eval.reinforcement
- name: Adversarial memory prompt-boundary gate
run: python -m eval.adversarial_memory_security
- name: Grounded-recall decision gate
run: python -m eval.grounded
- name: Code-agent arm gate
run: python -m eval.code_arm

typecheck:
name: core + backends typecheck (Python 3.11)
Expand Down Expand Up @@ -110,9 +114,11 @@ jobs:
python -m pip install --upgrade pip
pip install numpy "pytest<9"
- name: Unit tests (extras-gated tests skip; the core must pass)
run: ENGRAPHIS_INDEX_ROOTS="${GITHUB_WORKSPACE}:${RUNNER_TEMP}" python -m pytest -o addopts="" tests/ -q -rs --basetemp="${RUNNER_TEMP}/engraphis-pytest"
run: ENGRAPHIS_INDEX_ROOTS="${GITHUB_WORKSPACE}:${RUNNER_TEMP}:$(python -c 'import tempfile; print(tempfile.gettempdir())')" python -m pytest -o addopts="" tests/ -q -rs --basetemp="${RUNNER_TEMP}/engraphis-pytest"
- name: Retrieval eval gate
run: python -m eval.harness --dataset eval/datasets/sample.jsonl --k 5
- name: Retrieval eval gate — CodeMem (coding-agent wedge, incl. conflict resolution)
run: python -m eval.harness --dataset eval/datasets/codemem.jsonl --k 5
- name: Ablation
run: python -m eval.ablation
- name: Reinforcement state-transition gate
Expand Down Expand Up @@ -178,7 +184,7 @@ jobs:
python -m pip install --upgrade pip
pip install -e ".[test]" pytest-cov
- name: Coverage run (all extras-gated tests, tracked modules)
run: ENGRAPHIS_INDEX_ROOTS="${GITHUB_WORKSPACE}:${RUNNER_TEMP}" python -m pytest -o addopts="" tests/ -q -rs --basetemp="${RUNNER_TEMP}/engraphis-pytest" --cov=engraphis --cov-report=term-missing --cov-fail-under=60
run: ENGRAPHIS_INDEX_ROOTS="${GITHUB_WORKSPACE}:${RUNNER_TEMP}:$(python -c 'import tempfile; print(tempfile.gettempdir())')" python -m pytest -o addopts="" tests/ -q -rs --basetemp="${RUNNER_TEMP}/engraphis-pytest" --cov=engraphis --cov-report=term-missing --cov-fail-under=60

hygiene:
name: repo hygiene gate (no stray DBs/logs)
Expand Down
13 changes: 13 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -114,3 +114,16 @@ cookies.txt

# uv lockfile (generated tooling, not a project dependency)
uv.lock

# Schema-migration flock lives next to the DB (engraphis/config.py _migration_lock);
# regenerable runtime state like *.db itself. Held live while the server runs.
.*.migration.lock

# One-off diagnostic/report dumps that keep landing at the repo root — regenerable
# command output, never package content (same policy as /_*.mjs above).
/404_paths.txt
/disk_report.txt
/large_files.txt
/stats_pm2.txt
/venv_status.txt
/r3.txt
6 changes: 5 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ python -m eval.harness --dataset eval/datasets/codemem.jsonl --k 5 # coding/con
python -m eval.ablation # vector-only vs hybrid
python -m eval.reinforcement # bounded retention trajectory
python -m eval.adversarial_memory_security # prompt/graph boundary
python -m eval.grounded # grounded-abstain decision gate
python -m eval.code_arm # coding-agent arm gate
pyright # core + backends typecheck

# ── External benchmarks (real numbers need torch + the dataset; see eval/external.py) ──
Expand Down Expand Up @@ -89,7 +91,9 @@ python -m scripts.migrate_to_v2 --old engraphis_v1.db --new engraphis_v2.db

`requires-python >= 3.9` (ruff targets `py39`). CI tests the NumPy-only core on 3.9, the full
offline stack on 3.10–3.14, and Pyright on 3.11; dedicated jobs also exercise encryption and built
artifacts. `.github/workflows/ci.yml` is authoritative when the matrix changes.
artifacts, and further jobs run the coverage gate (`--cov-fail-under=60`), repo hygiene, the Pi
extension, browser accessibility, and the Docker smoke. `.github/workflows/ci.yml` is
authoritative when the matrix changes.

---

Expand Down
2 changes: 1 addition & 1 deletion BENCHMARKS.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ For the locked operator sequence for a public canonical run, see
Every exact public aggregate retained below comes from the checked-in, public-safe
[`offline-fixtures-v1.json`](docs/benchmark-evidence/offline-fixtures-v1.json) artifact. Its
SHA-256 is
`c3a74f1770ad3f868f55261ba11680e2dadca30167082ac2cb6669f9e3bdfad2`, also recorded in the
`0f60b0868444f676fe14c5f94d7db2c475e22669930c4d760881d0842eaa6800`, also recorded in the
adjacent `.sha256` file. The artifact contains no raw questions, answers, prompts, customer data,
or per-record content fingerprints.

Expand Down
33 changes: 32 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ All notable changes to Engraphis are documented here. Format loosely follows

### Changed


- Direct black-hole children now receive compact, deterministic orbital lanes near the black
hole instead of inheriting the farthest authored radius. Each lane keeps phase and painted
clearance, while community-child planets remain in their local moving frame; oversized Galaxy
Expand Down Expand Up @@ -97,9 +96,28 @@ All notable changes to Engraphis are documented here. Format loosely follows
- Added `docs/GRAPH_PERFORMANCE.md` documenting the two graph presentation profiles,
worker layout, progressive rendering, and the 20,000-node / 200,000-relation safety
ceilings.
- Source-import manifest paging now uses keyset (cursor) pagination instead of OFFSET,
so concurrent writes during a source re-import can no longer skip or duplicate rows
mid-scan (PR #154).
- Local file/folder imports now accept up to 1,500 files per batch (was 500), with the total
batch ceiling scaled to 750 MB so the average per-file allowance is unchanged; document-wizard
scanner ceilings move in lockstep.
- Folder imports report truncation explicitly: a folder with more matching files than the
ceiling now warns and returns `truncated`/`matched_total`/`unreadable` fields instead of
silently importing an alphabetically-first slice that looks complete.

### Fixed

- Importing more than 1,000 files through the dashboard no longer fails with "Internal Server
Error": wizard upload routes parse multipart forms under the advertised 1,500-file ceiling
instead of Starlette's hidden 1,000-part parser default, oversized batches return a clear 413,
and large vault uploads no longer trip the dashboard's 8 MB default body limit.
- One unreadable or pathological file (locked, deep-nested JSON, concurrent writer) now degrades
to a per-file error instead of rolling back the entire import batch with a 500.
- Document/Obsidian import jobs whose worker died with the process are marked failed on the next
status poll (`worker_lease_expired`) instead of reporting `running` forever.
- Cloud-placeholder files (OneDrive Files-On-Demand) on Windows are hydrated and imported rather
than rejected as non-regular files; symlinks and junctions remain blocked.
- Galaxy layout now packs each complete solar-system envelope before orbital seeding and keeps
those envelopes separated with rigid carrier translations during live motion. Compact server
targets can no longer stack large systems near the black hole, while local planet positions,
Expand Down Expand Up @@ -131,15 +149,28 @@ All notable changes to Engraphis are documented here. Format loosely follows
to register, instead of replaying the same broken asset response.
- Existing Galaxy preferences migrate only the retired `48` orbital-separation default to `60`;
deliberate custom values, including Gravity `0`, remain unchanged.
- Source-import hardening lands via separate PR #154: deterministic missing-item detection
now guards an unknown baseline instead of reporting spurious misses, denial-guard
supersession binds digests computed from the parsed record rather than raw input,
import-job finalization is generation-guarded so a stale worker cannot finalize over a
newer attempt, and the finalized-state check completes in constant time.

### Security


- HTTP error responses in `vault.py` and `service.py` no longer echo user-controlled paths back
to the client, preventing filesystem structure leakage (SEC-001).
- Graph visibility SQL helpers now use parameterized queries instead of `repr(float)` string
interpolation, eliminating a fragile SQL construction pattern (SEC-002).
- The `pypdf` dependency floor is raised to `>=6.15.0` to address PYSEC-2026-3655 and
PYSEC-2026-3656 (arbitrary code execution via crafted PDF objects).

### Removed

- The Hermes memory-provider plugin integration (`integrations/hermes/`, its
`ENGRAPHIS_HERMES_*` environment surface, and its integration test) is withdrawn from
the repository ahead of the v1.6 tag. The provider remains available in the v1.5
release history for anyone who already copied it.
## [1.6] - 2026-08-15

Minor release advancing the v2 engine through schema 16 with deterministic sync state, trusted
Expand Down
Loading