Skip to content
Merged
Show file tree
Hide file tree
Changes from 11 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
4ec6291
fix(core,mcp): tighten reworded-correction resolver, default recall t…
Coding-Dev-Tools Aug 26, 2026
6cdfc57
fix(review): address P1 marker-evidence + P2 idempotency + P2 latency
Coding-Dev-Tools Aug 26, 2026
5440e86
fix(review): address P2 sibling-hook, dead constant, env-alias canoni…
Coding-Dev-Tools Aug 26, 2026
4384a53
fix(typecheck): narrow optional evidence before its use in the resolv…
Coding-Dev-Tools Aug 26, 2026
7c8d0cb
fix(hook): restore session_start_hook.py to working tree
Coding-Dev-Tools Aug 26, 2026
2f95503
fix(security): bound the ordinal regex so CodeQL's polynomial-redos g…
Coding-Dev-Tools Aug 26, 2026
dc3e86a
fix(review): address PR #171 P2 dead-constant + sibling-preservation …
Coding-Dev-Tools Aug 26, 2026
e8371f5
fix(scripts,tests): preserve wrapper-level metadata (e.g. matcher) on…
Coding-Dev-Tools Aug 27, 2026
808a321
fix(commandcode): thread Mcp-Session-Id header through the SessionSta…
Coding-Dev-Tools Aug 27, 2026
0d07b57
tools: add Playwright harness for manual browser-level slider regression
Coding-Dev-Tools Aug 27, 2026
86f53b9
fix(review): resolve final PR #171 review comments
Coding-Dev-Tools Aug 28, 2026
23d46fd
test(review): align tests with PR #181 attribute-correction contract
Coding-Dev-Tools Aug 28, 2026
83e414c
Merge remote-tracking branch 'origin/main' into ship/install-cc-hook-…
Coding-Dev-Tools Aug 28, 2026
9798057
fix(integrations): make session_start_hook compatible with Python 3.9
Coding-Dev-Tools Aug 28, 2026
c148336
fix(review): address PR #181 review round 4 (resolver edge cases)
Coding-Dev-Tools Aug 28, 2026
30c0465
fix(review): address PR #181 codex reviews (round 5)
Coding-Dev-Tools Aug 28, 2026
2b2bd85
fix: tighten reworded corrections and slider harness
Coding-Dev-Tools Aug 29, 2026
c197076
relate subject and environment conflicts safely
Coding-Dev-Tools Aug 29, 2026
8b7caf6
fix resolver identifier detection and hook defaults
Coding-Dev-Tools Aug 29, 2026
aba87df
harden resolver identity detection and dashboard cleanup
Coding-Dev-Tools Aug 29, 2026
3d616b2
harden resolver subject and slider verification
Coding-Dev-Tools Aug 29, 2026
2f7a6a7
test(dashboard): isolate manual slider server port
Coding-Dev-Tools Aug 29, 2026
4e2e955
fix(resolve): protect named organization subjects
Coding-Dev-Tools Aug 30, 2026
7d7ee8d
test(slider): equalize baseline reheat interval
Coding-Dev-Tools Aug 30, 2026
cf6f069
Merge branch 'main' into ship/install-cc-hook-matcher-fix
Coding-Dev-Tools Sep 2, 2026
78f3425
Merge branch 'main' into ship/install-cc-hook-matcher-fix
Coding-Dev-Tools Sep 2, 2026
c4869d9
Merge branch 'main' into ship/install-cc-hook-matcher-fix
Coding-Dev-Tools Sep 2, 2026
d8dfc86
Merge branch 'main' into ship/install-cc-hook-matcher-fix
Coding-Dev-Tools Sep 2, 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
1f62ba2b6abf3dab266d5b4d9c85f2d7fd7fe4ece4e85e2413cfc3fe460ef2c1 skills/engraphis-memory/references/TOOLS.md
fcb5b4d939bda7d18e4b75c0e9106df4240aa7f8eabe8218e4e41f0038fa3df8 skills/engraphis-memory/references/TOOLS.md
0f98098df695b9a00dc78402911124ebf09a4a058f6c8bec2c6234ec61fac13a skills/engraphis-memory/SKILL.md
90 changes: 81 additions & 9 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,68 @@ All notable changes to Engraphis are documented here. Format loosely follows

### Added

- Smart MCP `engraphis_recall_context` default `k` raised 8 -> 50 so the token-budget
packer binds on realistic stores by default. Measured at budget=1024 against a
49-fact store: 100% labelled-relevance retention and ~50% of the store withheld
(savings_ratio 0.0 -> 0.4975) with no caller-side arguments. The packer is the
existing 1.6 contract; the change just makes it the default fast path.
- Smart MCP `engraphis_remember` now accepts and forwards `subject_key` and
`claim_kind` to the classic tool. Without this, every keyed write silently stored
empty keys because the served gateway surface dropped the parameters; the
documented safe-supersession mechanism is now reachable through MCP.
- A new integration at `integrations/commandcode/session_start_hook.py` (with
`scripts/install_cc_hook.py` for idempotent user-scope install/uninstall) wires
durable-memory recall into Command Code's SessionStart lifecycle: each new
session's first turn receives bounded relevant context as `additionalContext`.
Fail-open and silent on any error. Override workspace via
`ENGRAPHIS_HOOK_WORKSPACE`; override the MCP URL via `ENGRAPHIS_MCP_URL`.
- Cross-encoder reranker (`cross-encoder/ms-marco-MiniLM-L-6-v2`) is now
reachable as an opt-in config knob (`rerank_model=` on `MemoryEngine.create`
/ `ENGRAPHIS_RERANK_MODEL`). Evaluated offline on the bundled retrieval gates
(sample.jsonl, codemem.jsonl, k=5): hit@5 stays at 1.0 with zero per-question
regressions, MRR@5 lifts 0.889 -> 0.944 (sample) and 0.962 -> 0.981 (codemem),
with ~15 ms per query added. Not the default; flip with a one-line config.

### Changed

- The reworded-correction detector in `core/resolve.py` now supersedes reworded
corrections without a stable `subject_key` when the aligned token diff shows
a same-attribute value change (e.g. "the timeout is 30 seconds" -> "we raised
the timeout to 90 seconds"). The strong-evidence branch and the rewrite_gate
branch both require a change marker (e.g. "now", "raised") to be accompanied
by a value_swap on the same shared subject, so a bare "now" can never retire
a fact it merely shares surface nouns with. Vetoes preserve coexisting
distinct facts: clashing environment qualifiers (staging vs production,
folded through `prod`/`production` and `dev`/`development` aliases so a
legitimate correction across short forms does not get vetoed),
named mixed-case identifier swaps (ProviderA -> ProviderB), and clean
noun-for-noun replacements (REST -> GraphQL docs). Measured on the
reproducible corpus shipped at
`eval/datasets/resolver_reworded_corrections.jsonl` (44 pairs, 38
positives + 6 negatives); reproduce locally with
`python -m eval.resolver_reworded_corrections` or
`python -m eval.resolver_reworded_corrections --strict` in CI.
- The `temporal_splice` flag passed from `core/engine.py` to `resolve()` is
now narrowed to the bi-temporal backfill case (a deliberate `valid_at`
AND a `subject_key`), instead of any `valid_at`-pinned write. Scheduled
future writes stay on the present-time veto contract.

### Fixed

- The Smart MCP gateway `engraphis_remember` binding was silently dropping
`subject_key` and `claim_kind`; this is the underlying cause of the
benchmark correction-miss pattern that the reworded-correction detector
then had to compensate for.

### Operational

- The new `engraphis_recall_context` tool emits one `INFO` log per call with
workspace, k, budget, packed/omitted counts, and the call's measured ms.
Operators get visibility without changing the on-the-wire contract.
The standalone \engraphis-mcp-http\ launcher only configures the root logger when
\ENGRAPHIS_MCP_LOG\ is set to a truthy value (\ / \ rue\ / \yes\ / \info\ /
\on\); the default stays silent so the CLI keeps its quiet profile.

- The graph's "Show all nodes" toggle is replaced by a dedicated **Every node** layout built
on a new ultra-performance engine (`engraphis-graph-every.js` +
`engraphis-graph-every-worker.js`, WebGL2-only): all geometry is uploaded once and camera
Expand Down Expand Up @@ -125,14 +187,14 @@ All notable changes to Engraphis are documented here. Format loosely follows

### Fixed

- The Every node dashboard view no longer crashes on open: a declaration-order bug in the
renderer threw during construction before anything painted. The scene canvas also keeps its
accessible role/label now instead of being hidden from assistive technology.
- Import previews now page the source manifest exactly like execution, so vaults whose manifest
outgrew one list page (10k identities) no longer show manifest-only files as silently absent
from the preview plan; beyond-boundary rows are reported as `missing` instead of dropped.
Manifest pages now use one read snapshot and de-duplicate identities that move across a
cursor while a concurrent import updates their path.
- The Every node dashboard view no longer crashes on open: a declaration-order bug in the
renderer threw during construction before anything painted. The scene canvas also keeps its
accessible role/label now instead of being hidden from assistive technology.
- Import previews now page the source manifest exactly like execution, so vaults whose manifest
outgrew one list page (10k identities) no longer show manifest-only files as silently absent
from the preview plan; beyond-boundary rows are reported as `missing` instead of dropped.
Manifest pages now use one read snapshot and de-duplicate identities that move across a
cursor while a concurrent import updates their path.
- 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,
Expand Down Expand Up @@ -178,7 +240,17 @@ All notable changes to Engraphis are documented here. Format loosely follows
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.
newer attempt, and the finalized-state check completes in constant time.
- Smart MCP `engraphis_session` now accepts `action="start_session"` and `action="end_session"`
(the full tool-name forms the Command Code harness sends when translating the AGENTS.md
`engraphis_start_session`/`engraphis_end_session` shorthand), normalizing them to `start`/`end`
before the pattern validation instead of rejecting them with a 400.

### Documentation

- `docs/LLM_PROVIDERS.md` now warns Windows users that `cmd` may resolve to `cmd.exe`
(the built-in Windows command interpreter) instead of the Command Code CLI, and explains
how to diagnose and work around the PATH collision.

### Security

Expand Down
6 changes: 6 additions & 0 deletions engraphis/core/engine.py
Original file line number Diff line number Diff line change
Expand Up @@ -2175,9 +2175,15 @@ def append_visible_neighbors(
for sim, rec in extra_neighbors:
if rec.id not in known_ids:
neighbors.append((sim, rec))
# Bi-temporal backfill only: anchored writes (valid_at pinned AND a
# subject_key is present) assert explicit chain membership and may
# supersede a live neighbour even when prose alone would suggest two
# coexisting facts. Other valid_at-pinned writes (e.g. scheduled
# future writes) stay on the present-time veto contract.
decision = resolve(
text, neighbors, subject_key=subject_key, claim_kind=claim_kind,
candidate_content=content,
temporal_splice=valid_at is not None and bool(subject_key),
)
# Repair trigger: when the resolver cannot safely supersede (INVALIDATE/NOOP),
# surface a genuine high-severity contradiction as a persisted relation instead
Expand Down
Loading