Skip to content

Commit 7bc7746

Browse files
Merge remote-tracking branch 'origin/main' into ship/flow-speed-range-widen
2 parents 3cd7edc + 439aec4 commit 7bc7746

18 files changed

Lines changed: 1829 additions & 177 deletions

.claude-plugin/skill-assets.sha256

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
94bfa06317a8fe6a6a7e204bb70c5abdc9e4bbc34d79dd6f8447a30140bc8b85 .claude-plugin/plugin.json
33
055655db84af07561d002f0c69744313d8413c39f3e873f941f0fa0b1e76dc66 skills/engraphis-memory/references/CONVENTIONS.md
44
62019760766ff472a76a0f81437898f39e3c1fe2631732b7b7733e50c1ad837f skills/engraphis-memory/references/SCOPING.md
5-
1f62ba2b6abf3dab266d5b4d9c85f2d7fd7fe4ece4e85e2413cfc3fe460ef2c1 skills/engraphis-memory/references/TOOLS.md
5+
fcb5b4d939bda7d18e4b75c0e9106df4240aa7f8eabe8218e4e41f0038fa3df8 skills/engraphis-memory/references/TOOLS.md
66
0f98098df695b9a00dc78402911124ebf09a4a058f6c8bec2c6234ec61fac13a skills/engraphis-memory/SKILL.md

CHANGELOG.md

Lines changed: 81 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,68 @@ All notable changes to Engraphis are documented here. Format loosely follows
77

88
### Added
99

10+
- Smart MCP `engraphis_recall_context` default `k` raised 8 -> 50 so the token-budget
11+
packer binds on realistic stores by default. Measured at budget=1024 against a
12+
49-fact store: 100% labelled-relevance retention and ~50% of the store withheld
13+
(savings_ratio 0.0 -> 0.4975) with no caller-side arguments. The packer is the
14+
existing 1.6 contract; the change just makes it the default fast path.
15+
- Smart MCP `engraphis_remember` now accepts and forwards `subject_key` and
16+
`claim_kind` to the classic tool. Without this, every keyed write silently stored
17+
empty keys because the served gateway surface dropped the parameters; the
18+
documented safe-supersession mechanism is now reachable through MCP.
19+
- A new integration at `integrations/commandcode/session_start_hook.py` (with
20+
`scripts/install_cc_hook.py` for idempotent user-scope install/uninstall) wires
21+
durable-memory recall into Command Code's SessionStart lifecycle: each new
22+
session's first turn receives bounded relevant context as `additionalContext`.
23+
Fail-open and silent on any error. Override workspace via
24+
`ENGRAPHIS_HOOK_WORKSPACE`; override the MCP URL via `ENGRAPHIS_MCP_URL`.
25+
- Cross-encoder reranker (`cross-encoder/ms-marco-MiniLM-L-6-v2`) is now
26+
reachable as an opt-in config knob (`rerank_model=` on `MemoryEngine.create`
27+
/ `ENGRAPHIS_RERANK_MODEL`). Evaluated offline on the bundled retrieval gates
28+
(sample.jsonl, codemem.jsonl, k=5): hit@5 stays at 1.0 with zero per-question
29+
regressions, MRR@5 lifts 0.889 -> 0.944 (sample) and 0.962 -> 0.981 (codemem),
30+
with ~15 ms per query added. Not the default; flip with a one-line config.
31+
32+
### Changed
33+
34+
- The reworded-correction detector in `core/resolve.py` now supersedes reworded
35+
corrections without a stable `subject_key` when the aligned token diff shows
36+
a same-attribute value change (e.g. "the timeout is 30 seconds" -> "we raised
37+
the timeout to 90 seconds"). The strong-evidence branch and the rewrite_gate
38+
branch both require a change marker (e.g. "now", "raised") to be accompanied
39+
by a value_swap on the same shared subject, so a bare "now" can never retire
40+
a fact it merely shares surface nouns with. Vetoes preserve coexisting
41+
distinct facts: clashing environment qualifiers (staging vs production,
42+
folded through `prod`/`production` and `dev`/`development` aliases so a
43+
legitimate correction across short forms does not get vetoed),
44+
named mixed-case identifier swaps (ProviderA -> ProviderB), and clean
45+
noun-for-noun replacements (REST -> GraphQL docs). Measured on the
46+
reproducible corpus shipped at
47+
`eval/datasets/resolver_reworded_corrections.jsonl` (44 pairs, 38
48+
positives + 6 negatives); reproduce locally with
49+
`python -m eval.resolver_reworded_corrections` or
50+
`python -m eval.resolver_reworded_corrections --strict` in CI.
51+
- The `temporal_splice` flag passed from `core/engine.py` to `resolve()` is
52+
now narrowed to the bi-temporal backfill case (a deliberate `valid_at`
53+
AND a `subject_key`), instead of any `valid_at`-pinned write. Scheduled
54+
future writes stay on the present-time veto contract.
55+
56+
### Fixed
57+
58+
- The Smart MCP gateway `engraphis_remember` binding was silently dropping
59+
`subject_key` and `claim_kind`; this is the underlying cause of the
60+
benchmark correction-miss pattern that the reworded-correction detector
61+
then had to compensate for.
62+
63+
### Operational
64+
65+
- The new `engraphis_recall_context` tool emits one `INFO` log per call with
66+
workspace, k, budget, packed/omitted counts, and the call's measured ms.
67+
Operators get visibility without changing the on-the-wire contract.
68+
The standalone \engraphis-mcp-http\ launcher only configures the root logger when
69+
\ENGRAPHIS_MCP_LOG\ is set to a truthy value (\ / \ rue\ / \yes\ / \info\ /
70+
\on\); the default stays silent so the CLI keeps its quiet profile.
71+
1072
- The graph's "Show all nodes" toggle is replaced by a dedicated **Every node** layout built
1173
on a new ultra-performance engine (`engraphis-graph-every.js` +
1274
`engraphis-graph-every-worker.js`, WebGL2-only): all geometry is uploaded once and camera
@@ -125,14 +187,14 @@ All notable changes to Engraphis are documented here. Format loosely follows
125187

126188
### Fixed
127189

128-
- The Every node dashboard view no longer crashes on open: a declaration-order bug in the
129-
renderer threw during construction before anything painted. The scene canvas also keeps its
130-
accessible role/label now instead of being hidden from assistive technology.
131-
- Import previews now page the source manifest exactly like execution, so vaults whose manifest
132-
outgrew one list page (10k identities) no longer show manifest-only files as silently absent
133-
from the preview plan; beyond-boundary rows are reported as `missing` instead of dropped.
134-
Manifest pages now use one read snapshot and de-duplicate identities that move across a
135-
cursor while a concurrent import updates their path.
190+
- The Every node dashboard view no longer crashes on open: a declaration-order bug in the
191+
renderer threw during construction before anything painted. The scene canvas also keeps its
192+
accessible role/label now instead of being hidden from assistive technology.
193+
- Import previews now page the source manifest exactly like execution, so vaults whose manifest
194+
outgrew one list page (10k identities) no longer show manifest-only files as silently absent
195+
from the preview plan; beyond-boundary rows are reported as `missing` instead of dropped.
196+
Manifest pages now use one read snapshot and de-duplicate identities that move across a
197+
cursor while a concurrent import updates their path.
136198
- Importing more than 1,000 files through the dashboard no longer fails with "Internal Server
137199
Error": wizard upload routes parse multipart forms under the advertised 1,500-file ceiling
138200
instead of Starlette's hidden 1,000-part parser default, oversized batches return a clear 413,
@@ -178,7 +240,17 @@ All notable changes to Engraphis are documented here. Format loosely follows
178240
now guards an unknown baseline instead of reporting spurious misses, denial-guard
179241
supersession binds digests computed from the parsed record rather than raw input,
180242
import-job finalization is generation-guarded so a stale worker cannot finalize over a
181-
newer attempt, and the finalized-state check completes in constant time.
243+
newer attempt, and the finalized-state check completes in constant time.
244+
- Smart MCP `engraphis_session` now accepts `action="start_session"` and `action="end_session"`
245+
(the full tool-name forms the Command Code harness sends when translating the AGENTS.md
246+
`engraphis_start_session`/`engraphis_end_session` shorthand), normalizing them to `start`/`end`
247+
before the pattern validation instead of rejecting them with a 400.
248+
249+
### Documentation
250+
251+
- `docs/LLM_PROVIDERS.md` now warns Windows users that `cmd` may resolve to `cmd.exe`
252+
(the built-in Windows command interpreter) instead of the Command Code CLI, and explains
253+
how to diagnose and work around the PATH collision.
182254

183255
### Security
184256

engraphis/core/engine.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2175,9 +2175,15 @@ def append_visible_neighbors(
21752175
for sim, rec in extra_neighbors:
21762176
if rec.id not in known_ids:
21772177
neighbors.append((sim, rec))
2178+
# Bi-temporal backfill only: anchored writes (valid_at pinned AND a
2179+
# subject_key is present) assert explicit chain membership and may
2180+
# supersede a live neighbour even when prose alone would suggest two
2181+
# coexisting facts. Other valid_at-pinned writes (e.g. scheduled
2182+
# future writes) stay on the present-time veto contract.
21782183
decision = resolve(
21792184
text, neighbors, subject_key=subject_key, claim_kind=claim_kind,
21802185
candidate_content=content,
2186+
temporal_splice=valid_at is not None and bool(subject_key),
21812187
)
21822188
# Repair trigger: when the resolver cannot safely supersede (INVALIDATE/NOOP),
21832189
# surface a genuine high-severity contradiction as a persisted relation instead

0 commit comments

Comments
 (0)