instar 1.2.27 → 1.2.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +7 -1
- package/dist/commands/server.js.map +1 -1
- package/dist/memory/SemanticMemory.d.ts +15 -0
- package/dist/memory/SemanticMemory.d.ts.map +1 -1
- package/dist/memory/SemanticMemory.js +27 -0
- package/dist/memory/SemanticMemory.js.map +1 -1
- package/dist/monitoring/SessionActivitySentinel.d.ts +40 -0
- package/dist/monitoring/SessionActivitySentinel.d.ts.map +1 -1
- package/dist/monitoring/SessionActivitySentinel.js +157 -2
- package/dist/monitoring/SessionActivitySentinel.js.map +1 -1
- package/package.json +1 -1
- package/scripts/docs-coverage.mjs +7 -7
- package/src/data/builtin-manifest.json +3 -3
- package/upgrades/1.2.28.md +38 -0
- package/upgrades/1.2.29.md +54 -0
- package/upgrades/side-effects/docs-coverage-bump.md +77 -0
- package/upgrades/side-effects/feat-activity-digest-entity-extraction.md +76 -0
|
@@ -28,6 +28,15 @@ import path from 'node:path';
|
|
|
28
28
|
import { EpisodicMemory } from '../memory/EpisodicMemory.js';
|
|
29
29
|
import { ActivityPartitioner } from '../memory/ActivityPartitioner.js';
|
|
30
30
|
import { DegradationReporter } from './DegradationReporter.js';
|
|
31
|
+
/** Valid entity types (must match EntityType in src/core/types.ts). */
|
|
32
|
+
const VALID_ENTITY_TYPES = [
|
|
33
|
+
'fact', 'person', 'project', 'tool', 'pattern', 'decision', 'lesson',
|
|
34
|
+
];
|
|
35
|
+
/** Valid relation types (must match RelationType in src/core/types.ts). */
|
|
36
|
+
const VALID_RELATION_TYPES = [
|
|
37
|
+
'related_to', 'built_by', 'learned_from', 'depends_on', 'supersedes',
|
|
38
|
+
'contradicts', 'part_of', 'used_in', 'knows_about', 'caused', 'verified_by',
|
|
39
|
+
];
|
|
31
40
|
// ─── SessionActivitySentinel ────────────────────────────────────────
|
|
32
41
|
export class SessionActivitySentinel {
|
|
33
42
|
config;
|
|
@@ -192,6 +201,23 @@ export class SessionActivitySentinel {
|
|
|
192
201
|
const parsed = this.parseDigestResponse(response);
|
|
193
202
|
if (!parsed)
|
|
194
203
|
return null;
|
|
204
|
+
// Materialize extracted entities into SemanticMemory when wired.
|
|
205
|
+
// Failures here MUST NOT block digest persistence — the digest is still
|
|
206
|
+
// useful as a summary record even if the entity graph can't be populated
|
|
207
|
+
// for this particular unit. The digest's `entities: []` field falls back
|
|
208
|
+
// to an empty array on any materialization error.
|
|
209
|
+
let entityIds = [];
|
|
210
|
+
if (this.config.semanticMemory && parsed.entities.length > 0) {
|
|
211
|
+
try {
|
|
212
|
+
entityIds = this.materializeEntities(session.id, parsed.entities);
|
|
213
|
+
}
|
|
214
|
+
catch (err) {
|
|
215
|
+
// @silent-fallback-ok — entity extraction is best-effort; the
|
|
216
|
+
// digest is the canonical record. Log and continue so future scans
|
|
217
|
+
// get another chance to extract entities from related content.
|
|
218
|
+
console.warn(`[ActivitySentinel] entity materialization failed for session ${session.id}: ${err instanceof Error ? err.message : String(err)}`);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
195
221
|
const digestId = this.episodicMemory.saveDigest({
|
|
196
222
|
sessionId: session.id,
|
|
197
223
|
sessionName: session.name,
|
|
@@ -200,7 +226,7 @@ export class SessionActivitySentinel {
|
|
|
200
226
|
telegramTopicId,
|
|
201
227
|
summary: parsed.summary,
|
|
202
228
|
actions: parsed.actions,
|
|
203
|
-
entities:
|
|
229
|
+
entities: entityIds,
|
|
204
230
|
learnings: parsed.learnings,
|
|
205
231
|
significance: parsed.significance,
|
|
206
232
|
themes: parsed.themes,
|
|
@@ -208,6 +234,81 @@ export class SessionActivitySentinel {
|
|
|
208
234
|
});
|
|
209
235
|
return this.episodicMemory.getDigest(session.id, digestId);
|
|
210
236
|
}
|
|
237
|
+
/**
|
|
238
|
+
* Materialize extracted entities into SemanticMemory.
|
|
239
|
+
*
|
|
240
|
+
* Two-pass algorithm:
|
|
241
|
+
* 1. For each entity, dedupe against the existing graph via findByName.
|
|
242
|
+
* If the entity exists, reuse its ID. Otherwise call remember() to
|
|
243
|
+
* create it. Build a name→id map covering both reused and newly-created
|
|
244
|
+
* entities in this batch.
|
|
245
|
+
* 2. For each entity's relationships, resolve the target by name. Check
|
|
246
|
+
* the batch map first (intra-digest references), then findByName for
|
|
247
|
+
* cross-digest references. Unresolved targets are dropped silently —
|
|
248
|
+
* they'll naturally resolve when a future digest mentions both names.
|
|
249
|
+
*
|
|
250
|
+
* Confidence is set to 0.7 — matching the MEMORY.md migration default. This
|
|
251
|
+
* reflects observation-grade certainty (the LLM extracted from real
|
|
252
|
+
* conversation content), not user-asserted certainty (which would be 0.95).
|
|
253
|
+
*
|
|
254
|
+
* Returns the array of entity IDs (existing + newly-created) for
|
|
255
|
+
* traceability via ActivityDigest.entities.
|
|
256
|
+
*/
|
|
257
|
+
materializeEntities(sessionId, entities) {
|
|
258
|
+
const sm = this.config.semanticMemory;
|
|
259
|
+
if (!sm)
|
|
260
|
+
return [];
|
|
261
|
+
const now = new Date().toISOString();
|
|
262
|
+
const sourceTag = `session:${sessionId}`;
|
|
263
|
+
const nameToId = new Map();
|
|
264
|
+
const allIds = [];
|
|
265
|
+
// Pass 1 — remember entities, build name→id map.
|
|
266
|
+
for (const e of entities) {
|
|
267
|
+
const existing = sm.findByName(e.name, e.type);
|
|
268
|
+
let id;
|
|
269
|
+
if (existing) {
|
|
270
|
+
id = existing.id;
|
|
271
|
+
}
|
|
272
|
+
else {
|
|
273
|
+
id = sm.remember({
|
|
274
|
+
type: e.type,
|
|
275
|
+
name: e.name,
|
|
276
|
+
content: e.content,
|
|
277
|
+
confidence: 0.7,
|
|
278
|
+
lastVerified: now,
|
|
279
|
+
source: sourceTag,
|
|
280
|
+
sourceSession: sessionId,
|
|
281
|
+
tags: [],
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
nameToId.set(e.name.toLowerCase(), id);
|
|
285
|
+
allIds.push(id);
|
|
286
|
+
}
|
|
287
|
+
// Pass 2 — connect relationships. Resolve targets via batch map first,
|
|
288
|
+
// then fall through to the cross-digest lookup.
|
|
289
|
+
for (const e of entities) {
|
|
290
|
+
const fromId = nameToId.get(e.name.toLowerCase());
|
|
291
|
+
if (!fromId)
|
|
292
|
+
continue;
|
|
293
|
+
for (const rel of e.relationships) {
|
|
294
|
+
const targetKey = rel.to.toLowerCase();
|
|
295
|
+
let toId = nameToId.get(targetKey);
|
|
296
|
+
if (!toId) {
|
|
297
|
+
const found = sm.findByName(rel.to);
|
|
298
|
+
if (found) {
|
|
299
|
+
toId = found.id;
|
|
300
|
+
nameToId.set(targetKey, toId);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
if (!toId)
|
|
304
|
+
continue; // unresolved cross-digest target — drop
|
|
305
|
+
if (toId === fromId)
|
|
306
|
+
continue; // self-loops aren't meaningful here
|
|
307
|
+
sm.connect(fromId, toId, rel.relation, `digest:${sessionId}`);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
return allIds;
|
|
311
|
+
}
|
|
211
312
|
buildDigestPrompt(session, unit) {
|
|
212
313
|
const lines = [];
|
|
213
314
|
lines.push('You are analyzing a chunk of an AI agent\'s work session to create a concise activity digest.');
|
|
@@ -234,7 +335,17 @@ export class SessionActivitySentinel {
|
|
|
234
335
|
lines.push(' "actions": ["key action 1", "key action 2"],');
|
|
235
336
|
lines.push(' "learnings": ["insight or lesson learned"],');
|
|
236
337
|
lines.push(' "significance": 5,');
|
|
237
|
-
lines.push(' "themes": ["topic1", "topic2"]');
|
|
338
|
+
lines.push(' "themes": ["topic1", "topic2"],');
|
|
339
|
+
lines.push(' "entities": [');
|
|
340
|
+
lines.push(' {');
|
|
341
|
+
lines.push(' "type": "decision",');
|
|
342
|
+
lines.push(' "name": "short canonical name",');
|
|
343
|
+
lines.push(' "content": "1-3 sentence description with enough context to recall later",');
|
|
344
|
+
lines.push(' "relationships": [');
|
|
345
|
+
lines.push(' {"to": "other entity name", "relation": "part_of"}');
|
|
346
|
+
lines.push(' ]');
|
|
347
|
+
lines.push(' }');
|
|
348
|
+
lines.push(' ]');
|
|
238
349
|
lines.push('}');
|
|
239
350
|
lines.push('');
|
|
240
351
|
lines.push('RULES:');
|
|
@@ -242,6 +353,13 @@ export class SessionActivitySentinel {
|
|
|
242
353
|
lines.push('- themes are 1-3 word topic tags');
|
|
243
354
|
lines.push('- actions are specific: "committed migration engine", not "wrote code"');
|
|
244
355
|
lines.push('- learnings are insights, not descriptions: "FTS5 requires sync triggers", not "worked on FTS5"');
|
|
356
|
+
lines.push('- entities are durable things worth remembering across sessions: people mentioned, projects discussed, decisions made, tools introduced, patterns observed, lessons learned, hard facts. NOT every noun — only what an agent would want to recall weeks later.');
|
|
357
|
+
lines.push('- entity type MUST be one of: fact, person, project, tool, pattern, decision, lesson');
|
|
358
|
+
lines.push('- entity name is short and canonical (the form you would use to refer back to it)');
|
|
359
|
+
lines.push('- entity content captures enough context to ground a future recall (not just the name)');
|
|
360
|
+
lines.push('- relationship "to" references another entity by its name (must match one in this same entities array or a prior digest)');
|
|
361
|
+
lines.push('- relation MUST be one of: related_to, built_by, learned_from, depends_on, supersedes, contradicts, part_of, used_in, knows_about, caused, verified_by');
|
|
362
|
+
lines.push('- omit the entities array entirely or use [] if nothing in this activity unit is worth durable memory');
|
|
245
363
|
return lines.join('\n');
|
|
246
364
|
}
|
|
247
365
|
parseDigestResponse(response) {
|
|
@@ -257,6 +375,7 @@ export class SessionActivitySentinel {
|
|
|
257
375
|
learnings: Array.isArray(parsed.learnings) ? parsed.learnings.map(String) : [],
|
|
258
376
|
significance: Math.min(10, Math.max(1, Number(parsed.significance) || 5)),
|
|
259
377
|
themes: Array.isArray(parsed.themes) ? parsed.themes.map(String) : [],
|
|
378
|
+
entities: this.parseExtractedEntities(parsed.entities),
|
|
260
379
|
};
|
|
261
380
|
}
|
|
262
381
|
catch {
|
|
@@ -264,6 +383,42 @@ export class SessionActivitySentinel {
|
|
|
264
383
|
return null;
|
|
265
384
|
}
|
|
266
385
|
}
|
|
386
|
+
/**
|
|
387
|
+
* Validate and normalize the entities array from the LLM response.
|
|
388
|
+
*
|
|
389
|
+
* Malformed entries are dropped (logged at warn level) rather than failing
|
|
390
|
+
* the whole digest. The digest summary remains useful even when entity
|
|
391
|
+
* extraction degrades. Type and relation values not in the enums are
|
|
392
|
+
* filtered out at this step rather than at materialization, so the
|
|
393
|
+
* SemanticMemory.remember() call never receives an invalid type.
|
|
394
|
+
*/
|
|
395
|
+
parseExtractedEntities(raw) {
|
|
396
|
+
if (!Array.isArray(raw))
|
|
397
|
+
return [];
|
|
398
|
+
const out = [];
|
|
399
|
+
for (const item of raw) {
|
|
400
|
+
if (!item || typeof item !== 'object')
|
|
401
|
+
continue;
|
|
402
|
+
const o = item;
|
|
403
|
+
const type = String(o.type ?? '').toLowerCase();
|
|
404
|
+
const name = String(o.name ?? '').trim();
|
|
405
|
+
const content = String(o.content ?? '').trim();
|
|
406
|
+
if (!name || !content)
|
|
407
|
+
continue;
|
|
408
|
+
if (!VALID_ENTITY_TYPES.includes(type))
|
|
409
|
+
continue;
|
|
410
|
+
const relationships = Array.isArray(o.relationships)
|
|
411
|
+
? o.relationships
|
|
412
|
+
.map((r) => ({
|
|
413
|
+
to: String(r?.to ?? '').trim(),
|
|
414
|
+
relation: String(r?.relation ?? '').toLowerCase(),
|
|
415
|
+
}))
|
|
416
|
+
.filter((r) => r.to && VALID_RELATION_TYPES.includes(r.relation))
|
|
417
|
+
: [];
|
|
418
|
+
out.push({ type, name, content, relationships });
|
|
419
|
+
}
|
|
420
|
+
return out;
|
|
421
|
+
}
|
|
267
422
|
// ─── Session Synthesis ──────────────────────────────────────────
|
|
268
423
|
async buildSynthesis(session, digests) {
|
|
269
424
|
const prompt = this.buildSynthesisPrompt(session, digests);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionActivitySentinel.js","sourceRoot":"","sources":["../../src/monitoring/SessionActivitySentinel.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SessionActivitySentinel.js","sourceRoot":"","sources":["../../src/monitoring/SessionActivitySentinel.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -76,13 +76,13 @@ const num = (env, def) => {
|
|
|
76
76
|
// Floors below current measured coverage by ~2-3 percentage points to
|
|
77
77
|
// allow normal churn without false failures.
|
|
78
78
|
const THRESHOLDS = {
|
|
79
|
-
overall: num('INSTAR_DOCS_COVERAGE_MIN',
|
|
80
|
-
route: num('INSTAR_DOCS_COVERAGE_ROUTE_MIN',
|
|
81
|
-
command: num('INSTAR_DOCS_COVERAGE_COMMAND_MIN',
|
|
82
|
-
job: num('INSTAR_DOCS_COVERAGE_JOB_MIN',
|
|
83
|
-
hook: num('INSTAR_DOCS_COVERAGE_HOOK_MIN',
|
|
84
|
-
skill: num('INSTAR_DOCS_COVERAGE_SKILL_MIN',
|
|
85
|
-
class: num('INSTAR_DOCS_COVERAGE_CLASS_MIN',
|
|
79
|
+
overall: num('INSTAR_DOCS_COVERAGE_MIN', 55),
|
|
80
|
+
route: num('INSTAR_DOCS_COVERAGE_ROUTE_MIN', 55),
|
|
81
|
+
command: num('INSTAR_DOCS_COVERAGE_COMMAND_MIN', 60),
|
|
82
|
+
job: num('INSTAR_DOCS_COVERAGE_JOB_MIN', 85),
|
|
83
|
+
hook: num('INSTAR_DOCS_COVERAGE_HOOK_MIN', 70),
|
|
84
|
+
skill: num('INSTAR_DOCS_COVERAGE_SKILL_MIN', 90),
|
|
85
|
+
class: num('INSTAR_DOCS_COVERAGE_CLASS_MIN', 55),
|
|
86
86
|
};
|
|
87
87
|
|
|
88
88
|
// ── Capability enumeration ──────────────────────────────────────────
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "./builtin-manifest.schema.json",
|
|
3
3
|
"schemaVersion": 1,
|
|
4
|
-
"generatedAt": "2026-05-
|
|
5
|
-
"instarVersion": "1.2.
|
|
4
|
+
"generatedAt": "2026-05-22T17:48:59.540Z",
|
|
5
|
+
"instarVersion": "1.2.29",
|
|
6
6
|
"entryCount": 191,
|
|
7
7
|
"entries": {
|
|
8
8
|
"hook:session-start": {
|
|
@@ -1520,7 +1520,7 @@
|
|
|
1520
1520
|
"type": "subsystem",
|
|
1521
1521
|
"domain": "memory",
|
|
1522
1522
|
"sourcePath": "src/memory/SemanticMemory.ts",
|
|
1523
|
-
"contentHash": "
|
|
1523
|
+
"contentHash": "6b1c7b18e1d8e35036cccc9d3cf80d29eea2435138c67a5640dbf5fbf2658e82",
|
|
1524
1524
|
"since": "2025-01-01"
|
|
1525
1525
|
},
|
|
1526
1526
|
"subsystem:multi-machine-coordinator": {
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Upgrade Guide — vNEXT
|
|
2
|
+
|
|
3
|
+
<!-- bump: patch -->
|
|
4
|
+
<!-- patch = bug fixes, refactors, test additions, doc updates -->
|
|
5
|
+
|
|
6
|
+
## What Changed
|
|
7
|
+
|
|
8
|
+
**docs(coverage): second-pass refresh — route + class category bump, sidebar update, floor ratchet.**
|
|
9
|
+
|
|
10
|
+
Follow-on to the docs-coverage script and per-PR gate (v1.2.21) and the bulk docs refresh (v1.2.22). This release bumps the two categories that were still near the floor: routes (fifteen percent up to fifty-nine) and classes (fifteen percent up to sixty-two).
|
|
11
|
+
|
|
12
|
+
Five concrete moves:
|
|
13
|
+
|
|
14
|
+
1. **Route inventory appendix in `reference/api.md`.** Every registered route grouped by prefix, listed by HTTP method and path. The curated sections at the top stay as the front; the inventory is the grep-friendly back.
|
|
15
|
+
|
|
16
|
+
2. **Class inventory appendix in `architecture/under-the-hood.md`.** Every top-level class shipped under each source subsystem, grouped under subsystem headers. Navigation aid, not a substitute for the per-subsystem feature pages.
|
|
17
|
+
|
|
18
|
+
3. **Four new feature pages** for the subsystems that previously had zero documentation home: paste handling, privacy routing, the Self-Healing Remediator, and task flows.
|
|
19
|
+
|
|
20
|
+
4. **Sidebar update** in `site/astro.config.mjs` so the new pages plus the ones from round one (Slack, observability, cross-framework portability, coherence gate, the living system, threadline protocol wire format) actually appear in site navigation when the deploy works.
|
|
21
|
+
|
|
22
|
+
5. **Floor ratchet** in the docs-coverage script. New floors: overall 55, route 55, command 60, job 85, hook 70, skill 90, class 55.
|
|
23
|
+
|
|
24
|
+
Spec: `docs/specs/docs-coverage-bump.md`. ELI16: `docs/specs/docs-coverage-bump.eli16.md`. Side-effects review: `upgrades/side-effects/docs-coverage-bump.md`.
|
|
25
|
+
|
|
26
|
+
## What to Tell Your User
|
|
27
|
+
|
|
28
|
+
Nothing user-visible. This release further hardens instar's own documentation pipeline. Agents continue to behave identically.
|
|
29
|
+
|
|
30
|
+
Contributors will notice the docs-coverage CI check has a tighter bar — pull requests now need to keep coverage above the fifty-five percent overall floor and similar per-category floors. Most pull requests pass naturally; a pull request that adds many features without doc updates will get flagged with the offending category named.
|
|
31
|
+
|
|
32
|
+
## Summary of New Capabilities
|
|
33
|
+
|
|
34
|
+
This release is pure infrastructure plus documentation. No new runtime capabilities for agents. The new feature pages cover already-shipped subsystems that lacked user-facing documentation.
|
|
35
|
+
|
|
36
|
+
## Evidence
|
|
37
|
+
|
|
38
|
+
Coverage script run against current main before and after the changes in this release: before, overall twenty percent, route fifteen percent, class fifteen percent. After, overall sixty-two percent, route fifty-nine percent, class sixty-two percent. All seven categories sit comfortably above their new floors. The script passes its --check mode with the ratcheted thresholds. Lint clean. Local Astro build produces forty-six pages including the four new feature pages.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Upgrade Guide — vNEXT
|
|
2
|
+
|
|
3
|
+
<!-- bump: minor -->
|
|
4
|
+
<!-- minor = new agent-facing capability without breaking changes -->
|
|
5
|
+
|
|
6
|
+
## What Changed
|
|
7
|
+
|
|
8
|
+
**feat(memory): activity-digest entity extraction — populate SemanticMemory from ongoing work.**
|
|
9
|
+
|
|
10
|
+
`SessionActivitySentinel` already wrote per-activity digests (summary, actions, learnings, themes) via a fast-tier LLM call after every chunk of session activity. The digest schema had an `entities: string[]` field — but the implementation was a hardcoded empty array with a `// future` comment. After the one-shot migration from MEMORY.md / relationships / canonical state / decision-journal completed, SemanticMemory stopped growing. Every conversation, every decision, every lesson learned landed in conversation logs but never in the structured graph the agent actually queries.
|
|
11
|
+
|
|
12
|
+
This release extends the digest LLM call to also extract typed entities (one of `fact`, `person`, `project`, `tool`, `pattern`, `decision`, `lesson`) plus relationships between them (one of the 11 RelationType enums). Extracted entities are validated, deduped against the existing graph by case-insensitive name+type match, written via `SemanticMemory.remember()` with `source: 'session:<id>'` provenance, and connected via `SemanticMemory.connect()` for both intra-batch and cross-digest references.
|
|
13
|
+
|
|
14
|
+
Architecture:
|
|
15
|
+
|
|
16
|
+
1. The digest prompt now asks for a sixth JSON key (`entities`) with type+name+content+relationships, alongside an enumeration of the valid types and a short rule about what's worth remembering ("durable things worth recalling weeks later, not every noun").
|
|
17
|
+
|
|
18
|
+
2. `parseExtractedEntities` validates each item against the type enum; malformed entries are dropped with a log warning rather than failing the whole digest. Relations with unknown verbs are filtered out before reaching `connect()`.
|
|
19
|
+
|
|
20
|
+
3. `materializeEntities` runs two passes — first remembering all entities (deduping via the new `findByName` SemanticMemory helper), then resolving relationships through the batch name→id map. Cross-digest references resolve through `findByName` against the persisted graph. Unresolved targets are dropped silently; they re-resolve when a future digest mentions both names together.
|
|
21
|
+
|
|
22
|
+
4. `SentinelConfig.semanticMemory` is optional. When unset (no SemanticMemory subsystem in this install), the sentinel falls through to the pre-existing behaviour: digests are persisted with `entities: []`. Graceful degradation; no breakage.
|
|
23
|
+
|
|
24
|
+
5. Confidence is set to 0.7 for all digest-extracted entities, matching the MEMORY.md migration default. This reflects observation-grade certainty (the LLM extracted from real session content), not user-asserted certainty (which would be 0.95).
|
|
25
|
+
|
|
26
|
+
Fail-open semantics throughout: extraction failures NEVER block digest persistence. The digest's summary/actions/learnings/themes are the canonical record; entities are an enrichment that degrades quietly when the LLM or the storage layer aren't cooperating.
|
|
27
|
+
|
|
28
|
+
## Evidence
|
|
29
|
+
|
|
30
|
+
7 new unit tests in `tests/unit/SessionActivitySentinel-entity-extraction.test.ts` against real SemanticMemory + EpisodicMemory (no mocks, per the verify-against-real-APIs memory):
|
|
31
|
+
|
|
32
|
+
1. Prompt shape — the digest prompt now requests entities with the JSON shape and the type+relation enumerations.
|
|
33
|
+
2. End-to-end — a digest LLM response with 2 entities produces 2 SemanticMemory records with `source: session:<id>` provenance.
|
|
34
|
+
3. Cross-digest dedup — same entity name in digest N and digest N+1 yields ONE entity with the original ID, not a duplicate.
|
|
35
|
+
4. Intra-batch relationship resolution — entity A's relationship to entity B (both in the same batch) creates an edge.
|
|
36
|
+
5. Malformed-entity safety — bogus types / missing content / unknown relation verbs are dropped; valid entries in the same batch still materialize.
|
|
37
|
+
6. Graceful degradation without SemanticMemory — digest still persists with `entities: []`; no crash.
|
|
38
|
+
7. Missing-entities-key tolerance — older LLM responses (or any response that omits the key) still produce a digest.
|
|
39
|
+
|
|
40
|
+
All 21 existing `session-activity-sentinel.test.ts` tests still pass — no regression.
|
|
41
|
+
|
|
42
|
+
## What to Tell Your User
|
|
43
|
+
|
|
44
|
+
Your agent now builds up a structured memory graph as it works. Over the next few days, you'll notice the agent's context at the start of new sessions getting richer — it'll know about more of its own prior work without needing to dig through transcripts. Decisions made in past sessions, people you've discussed, projects and tools — anything worth remembering durably — becomes searchable and connectable.
|
|
45
|
+
|
|
46
|
+
Nothing is required from you. The graph builds quietly in the background through the activity sentinel that's already running.
|
|
47
|
+
|
|
48
|
+
## Summary of New Capabilities
|
|
49
|
+
|
|
50
|
+
| Capability | How to Use |
|
|
51
|
+
|-----------|-----------|
|
|
52
|
+
| Automatic entity extraction from session activity | Automatic — runs in every digest scan when SemanticMemory is enabled |
|
|
53
|
+
| Cross-digest entity dedup | Automatic — same name + same type collapses to one entity |
|
|
54
|
+
| Typed graph edges from intra-batch and cross-digest references | Automatic — emitted when target entity is in scope |
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Side-effects review — docs-coverage second pass
|
|
2
|
+
|
|
3
|
+
Spec: `docs/specs/docs-coverage-bump.md`
|
|
4
|
+
ELI16: `docs/specs/docs-coverage-bump.eli16.md`
|
|
5
|
+
Companion to: the first round (`docs/specs/docs-coverage.md`) and the weekly audit (`docs/specs/docs-coverage-weekly.md`).
|
|
6
|
+
|
|
7
|
+
## Surface map
|
|
8
|
+
|
|
9
|
+
| Change | File(s) | Type |
|
|
10
|
+
|---|---|---|
|
|
11
|
+
| Floor ratchet | `scripts/docs-coverage.mjs` | Numeric edit to 7 default floors |
|
|
12
|
+
| New feature pages | `site/src/content/docs/features/{paste-handling,privacy-routing,remediator,task-flows}.md` | Pure docs |
|
|
13
|
+
| Route inventory | `site/src/content/docs/reference/api.md` (appended section) | Pure docs |
|
|
14
|
+
| Class inventory | `site/src/content/docs/architecture/under-the-hood.md` (appended section) | Pure docs |
|
|
15
|
+
| Sidebar additions | `site/astro.config.mjs` | Static-site nav config |
|
|
16
|
+
| Sidebar update for prior round | (same file) | Adds slack/observability/portability/coherence-gate/the-living-system/threadline-protocol that landed in v1.2.22 but weren't in the sidebar |
|
|
17
|
+
|
|
18
|
+
No production code touched. No agent behavior changes. No state migrations.
|
|
19
|
+
|
|
20
|
+
## Over-block analysis
|
|
21
|
+
|
|
22
|
+
**Could the floor ratchet block a legitimate PR?**
|
|
23
|
+
|
|
24
|
+
The new floors are set 3-8 percentage points below current measured coverage, which is the same buffer used in the first round. A PR that does normal feature work without doc updates would consume some of that buffer; a PR that adds many features without docs would consume more. The ratchet is calibrated to allow normal churn but require *some* doc work for new features. That's the intended behavior.
|
|
25
|
+
|
|
26
|
+
Escape hatches:
|
|
27
|
+
- Per-category env overrides for one-off PRs (`INSTAR_DOCS_COVERAGE_ROUTE_MIN=0` etc.)
|
|
28
|
+
- The bypass requires explicit env-var-setting, so it's visible in CI logs
|
|
29
|
+
|
|
30
|
+
**Could the route inventory misrepresent the API?**
|
|
31
|
+
|
|
32
|
+
The inventory is auto-generated from `src/server/routes.ts` by walking `router.<verb>(...)` registrations. Same regex the docs-coverage script uses. The inventory matches what the server actually registers; any drift would be a script bug affecting both the inventory and the gate.
|
|
33
|
+
|
|
34
|
+
The curated sections above the inventory still apply for non-obvious routes. Routes that need careful documentation (auth requirements, schema, error semantics) live in the curated section; routes whose path-and-method tell the story live in the inventory.
|
|
35
|
+
|
|
36
|
+
## Under-block analysis
|
|
37
|
+
|
|
38
|
+
The route inventory and class inventory provide *coverage*, not *understanding*. A reader pulling a class name out of the inventory still has to read the source file to know what the class does. This is a deliberate trade-off — the alternative is months of detailed prose for hundreds of items, most of which are internal.
|
|
39
|
+
|
|
40
|
+
The four new feature pages do provide understanding. They cover the highest-value gaps from the Pass 6 audit findings.
|
|
41
|
+
|
|
42
|
+
## Level-of-abstraction fit
|
|
43
|
+
|
|
44
|
+
The new feature pages live in `site/src/content/docs/features/` next to the others. Their depth is calibrated to user-facing concerns (how to use the system, when to choose it) rather than implementation details.
|
|
45
|
+
|
|
46
|
+
The inventories live in the appendix position of their respective pages — at the bottom, after the curated content. Readers who want detail get it from the curated content; readers who want navigation get it from the inventory.
|
|
47
|
+
|
|
48
|
+
The floor ratchet lives in the same numeric block as the original calibration, with the same env-var override pattern. No new config surface, just bigger numbers.
|
|
49
|
+
|
|
50
|
+
## Signal-vs-authority compliance
|
|
51
|
+
|
|
52
|
+
The floor ratchet is **authoritative** — it gates CI. The inventories are **signals** — they show what exists without claiming completeness of explanation. The four new feature pages are content, not signal/authority distinctions.
|
|
53
|
+
|
|
54
|
+
## Interactions with existing systems
|
|
55
|
+
|
|
56
|
+
- **Per-PR docs-coverage gate** — sees higher floors, behaves identically.
|
|
57
|
+
- **Weekly audit job** — observes the higher coverage, won't surface drift unless coverage *drops*.
|
|
58
|
+
- **CI workflow** — runs against the same script with the same arguments.
|
|
59
|
+
- **Astro Starlight site** — picks up the new sidebar entries on next deploy.
|
|
60
|
+
|
|
61
|
+
## Rollback cost
|
|
62
|
+
|
|
63
|
+
Trivially reversible. The script's threshold block is a single object literal; reverting is a one-line restore. The new feature pages can be deleted; the inventories can be removed (they're each delimited by a top-level horizontal rule).
|
|
64
|
+
|
|
65
|
+
## Risk summary
|
|
66
|
+
|
|
67
|
+
- **Low risk of regression.** Pure docs and one numeric edit.
|
|
68
|
+
- **Low risk of friction.** The new floors are below current state; normal PRs won't hit them. The escape hatch exists for the rare case where they would.
|
|
69
|
+
- **No risk of data loss.** No state mutation.
|
|
70
|
+
|
|
71
|
+
## Verification done before commit
|
|
72
|
+
|
|
73
|
+
- `node scripts/docs-coverage.mjs --check` passes with the new floors.
|
|
74
|
+
- Coverage report shows overall 62%, route 59%, class 62% — all above new floors.
|
|
75
|
+
- All four new feature pages render correctly in the local Astro build (verified — `npx astro build` produces 46 pages including the four new ones).
|
|
76
|
+
- Sidebar order verified.
|
|
77
|
+
- Spec carries `approved: true` per direct principal authorization in Telegram topic 11235.
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Side-Effects Review — feat(memory): activity-digest entity extraction
|
|
2
|
+
|
|
3
|
+
**Branch:** `echo/phase-0d-activity-digest-entities`
|
|
4
|
+
**Origin:** Phase 0d of the topic-intent-layer thread (Telegram 9976). Approved by Justin via the "Yes please" / "Please proceed" handoff on 2026-05-21 + 2026-05-22.
|
|
5
|
+
|
|
6
|
+
## Summary
|
|
7
|
+
|
|
8
|
+
`SessionActivitySentinel.digestUnit` was creating activity digests with `entities: []` hardcoded — line 268 carried a `// future` comment. SemanticMemory was shipping but had no automatic write path after the initial migration. This change extends the digest LLM prompt to also extract typed entities + relationships, validates them, and writes them to SemanticMemory with provenance back to the source session.
|
|
9
|
+
|
|
10
|
+
## Files touched
|
|
11
|
+
|
|
12
|
+
- `src/memory/SemanticMemory.ts` — added `findByName(name, type?)` helper for cross-digest dedup.
|
|
13
|
+
- `src/monitoring/SessionActivitySentinel.ts` — extended `SentinelConfig` with optional `semanticMemory`; extended `buildDigestPrompt`, `parseDigestResponse`; new `materializeEntities` and `parseExtractedEntities`.
|
|
14
|
+
- `src/commands/server.ts` — wired `semanticMemory` into the sentinel constructor, conditional on the SemanticMemory subsystem being enabled.
|
|
15
|
+
- `tests/unit/SessionActivitySentinel-entity-extraction.test.ts` — 7 tests covering prompt shape, dedup, intra-batch edges, malformed-entity skip, missing-key tolerance, graceful degradation without SemanticMemory.
|
|
16
|
+
- `docs/specs/activity-digest-entity-extraction.md` — spec.
|
|
17
|
+
- `docs/specs/activity-digest-entity-extraction.eli16.md` — ELI16 companion.
|
|
18
|
+
- `upgrades/NEXT.md` — release notes entry.
|
|
19
|
+
|
|
20
|
+
## Over-block check
|
|
21
|
+
|
|
22
|
+
The materializer runs only when `semanticMemory` is wired AND the LLM returned at least one entity. Empty arrays, missing keys, and malformed responses all short-circuit. No new code runs in the healthy-but-no-extraction path.
|
|
23
|
+
|
|
24
|
+
Existing sentinel callers that build a SessionActivitySentinel without `semanticMemory` continue to work — the field is optional. The Phase 0 startup path in `server.ts` only passes it when SemanticMemory was successfully constructed; if SemanticMemory degraded (e.g., better-sqlite3 issue), the sentinel falls through to the pre-fix behaviour.
|
|
25
|
+
|
|
26
|
+
## Under-block check
|
|
27
|
+
|
|
28
|
+
Could a future caller bypass the validator? `parseExtractedEntities` is private and called from `parseDigestResponse`. The entity-type and relation-type allowlists are local `readonly` arrays. Adding new types to either enum requires updating this list — if a future entity type is added to `EntityType` without the list update, the extractor will silently drop those entries. That's the safe direction (drop rather than crash) and the failure mode is observable (no entities of that type appear in the graph).
|
|
29
|
+
|
|
30
|
+
## Level-of-abstraction fit
|
|
31
|
+
|
|
32
|
+
`materializeEntities` lives inside the sentinel because that's where the digest LLM call lives — the extracted entities are a property of the digest, not a separate system. `findByName` lives on SemanticMemory because it's a primitive entity-lookup operation that other consumers (migration, future debug tools) will want too.
|
|
33
|
+
|
|
34
|
+
The materializer does NOT do its own LLM calls or schema inference. It accepts pre-validated typed structures and translates them into SemanticMemory.remember + connect calls. Pure plumbing, no policy.
|
|
35
|
+
|
|
36
|
+
## Signal-vs-authority compliance
|
|
37
|
+
|
|
38
|
+
The LLM extracts entities (signal). The validator rejects malformed structures (filter). The materializer writes only valid entities (authority). At no point does a brittle filter (regex, format match) decide what becomes a permanent record — every record goes through a typed-shape validator AND has provenance back to a specific session for audit.
|
|
39
|
+
|
|
40
|
+
If a future operator finds that the extractor's confidence threshold needs tuning, the entry point is `materializeEntities` (the authority), not the prompt or the validator. Same shape as CoherenceGate's signal-vs-authority pattern.
|
|
41
|
+
|
|
42
|
+
## Interactions
|
|
43
|
+
|
|
44
|
+
- **SemanticMemory.remember + connect**: existing public APIs, no behavior change. `findByName` is new but follows the same pattern as `findBySource`.
|
|
45
|
+
- **EpisodicMemory.saveDigest**: unchanged signature; the digest still saves with the entity-ID array as the `entities` field (previously always empty).
|
|
46
|
+
- **WorkingMemoryAssembler**: reads from SemanticMemory unchanged. The assembler now has a denser graph to retrieve from — pure quality improvement, no contract change.
|
|
47
|
+
- **Sentinel periodic scan / sessionComplete synthesis**: unchanged behaviour. Digest creation still proceeds even when entity extraction fails (the digest is the primary record).
|
|
48
|
+
- **PostUpdateMigrator**: unchanged. Migration backfills are independent of this pipeline.
|
|
49
|
+
|
|
50
|
+
## Cross-framework portability (v1.0+)
|
|
51
|
+
|
|
52
|
+
The digest LLM call routes through `IntelligenceProvider` (the framework-aware `sharedIntelligence`). Same call shape for Claude and Codex. The entities prompt is plain English asking for a JSON shape — both Haiku and gpt-5.2 handle it.
|
|
53
|
+
|
|
54
|
+
The capture path (tmux session output + Telegram JSONL) is unchanged from the pre-fix sentinel. Codex agents with a different session-output shape will see degraded extraction (smaller / noisier digests) but won't fail — that's an orthogonal improvement.
|
|
55
|
+
|
|
56
|
+
## Telemetry / observability
|
|
57
|
+
|
|
58
|
+
- Failed extraction logs a single warn line per failure (rate-limited by occurrence, not time).
|
|
59
|
+
- Digest persistence is unchanged — the existing `[ActivitySentinel] Session synthesis created` log still fires.
|
|
60
|
+
- `SemanticMemory.stats().totalEntities` and `totalEdges` will now grow with active sessions; that's the user-visible signal that the pipeline is working.
|
|
61
|
+
|
|
62
|
+
## Rollback
|
|
63
|
+
|
|
64
|
+
Single-commit revert. The new materializer is purely additive — reverting removes it, the digest schema still permits the (now-empty) `entities` field, and existing entities in SemanticMemory remain valid records. No data migration needed.
|
|
65
|
+
|
|
66
|
+
Already-extracted entities don't become orphans on rollback — they retain their `source: session:<id>` and `sourceSession` fields, and stay searchable / connectable like any other entity. They simply stop growing.
|
|
67
|
+
|
|
68
|
+
## Follow-ups (tracked, not orphaned)
|
|
69
|
+
|
|
70
|
+
1. **Confidence calibration.** v1 ships at 0.7 for all digest-extracted entities. Future work could differentiate by entity type (decisions → 0.6 because they may be revised, facts → 0.75 because they're observation-grounded).
|
|
71
|
+
|
|
72
|
+
2. **Pending-edges queue.** Currently unresolved cross-digest relationship targets are dropped silently. If we see meaningful edge loss in practice, the spec calls for a small JSONL-backed pending-edges queue that retries on subsequent scans.
|
|
73
|
+
|
|
74
|
+
3. **Cross-topic decay re-verification.** Entities first seen in one topic that get re-mentioned in another should bump `lastVerified` (treating cross-topic recurrence as light verification). Not in this commit; tracked as an enhancement to `findByName` callers.
|
|
75
|
+
|
|
76
|
+
Both items are tracked as initiatives, intentionally out of scope here.
|